Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

dsp.ColoredNoise

カラード ノイズ信号の生成

説明

dsp.ColoredNoise System object™ は、周波数全体で1/|f|α のパワー スペクトル密度 (PSD) をもつカラード ノイズ信号を生成します。周波数の逆べき乗 α には、区間 [-2 2] の任意の値を指定できます。オブジェクトで生成されるカラード ノイズのタイプは、選択したColorに応じて変わります。Color'custom' に設定すると、InverseFrequencyPowerプロパティを使ってノイズのパワー密度を指定できます。

生成される信号のサイズとデータ型のプロパティは、SamplesPerFrameNumChannels、およびOutputDataTypeの各プロパティに応じて異なります。

このオブジェクトでは、既定の MATLAB® ランダム ストリームである RandStream が使用されます。反復可能なシミュレーションの既定のストリームをリセットします。

カラード ノイズ信号を生成するには、次のようにします。

  1. dsp.ColoredNoise オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

cn = dsp.ColoredNoise は、カラード ノイズ オブジェクト cn を作成します。このオブジェクトは、一度に 1 サンプルまたは 1 フレームのノイズ信号を出力し、周波数全体で 1/|f|α のスペクトラル特性を持ちます。α の標準値は α = 1 (ピンク ノイズ) と α = 2 (ブラウニアン ノイズ) です。

cn = dsp.ColoredNoise(Name,Value) は指定されたそれぞれのプロパティを指定された値に設定して、カラード ノイズ オブジェクトを作成します。各プロパティ名を一重引用符で囲みます。

例: dsp.ColoredNoise('Color','pink');

cn = dsp.ColoredNoise(pow,samp,numChan,Name,Value) は、InverseFrequencyPower プロパティを pow、SamplesPerFrame プロパティを samp、NumChannels プロパティを numChan に設定して、カラード ノイズ オブジェクトを作成します。

例: dsp.ColoredNoise(1,44.1e3,1,'OutputDataType','single');

cn = dsp.ColoredNoise(color,samp,numChan,Name,Value) は、Color プロパティを color、SamplesPerFrame プロパティを samp、NumChannels プロパティを numChan に設定して、カラード ノイズ オブジェクトを作成します。

例: dsp.ColoredNoise('pink',1024,2,'OutputDataType','single');

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

ノイズの色。次のいずれかに指定します。各色は生成されたノイズ シーケンスの特定の周波数の逆べき乗に関連付けられています。

  • 'pink' –– 周波数の逆べき乗 α は 1 になります。

  • 'white' –– α = 0.

  • 'brown' –– α = 2.レッド ノイズまたはブラウニアン ノイズとも呼ばれます。

  • 'blue' –– α = -1.アジュール ノイズとも呼ばれます。

  • 'purple' –– α = -2.バイオレット ノイズとも呼ばれます。

  • 'custom' –– カスタムの周波数の逆べき乗をもつノイズの場合、α はInverseFrequencyPowerプロパティの値になります。

    InverseFrequencyPower。α には区間 [-2,2] 内の任意の値を指定できます。

周波数の逆べき乗 α。区間 [-2 2] の実数スカラーで指定します。逆指数はランダム過程の PSD を 1/|f|α として定義します。0 より大きい InverseFrequencyPower の値により、f = 0 で特異性 (極) をもつローパス ノイズが生成されます。これらの過程では長期記憶性が見られます。0 より小さい InverseFrequencyPower の値によって、負の相関があるインクリメントをもつハイパス ノイズが生成されます。これらのプロセスは反持続的と呼ばれます。特殊なケースとして次のような場合があります。

  • 1 –– ピンク ノイズ

  • 2 –– ブラウン ノイズ、レッド ノイズまたはブラウニアン ノイズ

  • 0 –– 平坦な PSD をもつホワイト ノイズ過程

  • -1 –– ブルー ノイズまたはアジュール ノイズ

  • -2 –– バイオレット ノイズの紫

周波数関数としてのパワーの両対数プロットでは、このオブジェクトで生成された過程は傾斜が –α に等しい線形関係の近似を示します。

例: 1.2

例: -1.4

依存関係

このプロパティはColor'custom' に設定した場合にのみ適用されます。

出力チャネルあたりのサンプル数。正の整数で指定します。このプロパティにより信号の行数が決まります。

例: 512

出力チャネルの数。整数で指定します。このプロパティにより信号の列数が決まります。

例: 5

例: 25

乱数ストリームのソース。次のいずれかに指定します。

  • 'Global stream' –– 正規分布の乱数発生に現在のグローバル乱数ストリームが使用されます。

  • 'mt19937ar with seed' –– 正規分布の乱数発生に mt19937ar アルゴリズムが使用されます。関数 reset は、乱数ストリームを Seed プロパティの値に再初期化します。

mt19937ar 乱数ストリーム発生器のアルゴリズムの初期シード。非負の整数で指定します。関数 reset は、乱数ストリームを Seed プロパティの値に再初期化します。

例: 3

例: 34

依存関係

このプロパティは、RandomStream プロパティを 'mt19937ar with seed' に設定した場合にのみ適用されます。

データ型: double

出力範囲が +1 ~ -1 になるように指定します。以下を指定します。

  • true –– ノイズを生成する内部ランダム ソースが一様になります。Color'white' に設定されている場合、ランダム ソースの出力にカラー フィルターは適用されません。出力は、振幅が +1 ~ -1 の一様なノイズになります。Color が他のオプションに設定されている場合、カラー フィルターがランダム ソースの出力に適用され、絶対最大出力が 1 を超えないゲインになります。

  • false –– 内部ランダム ソースがガウス型になります。出力の制限がなくなります。

データ型: logical

出力のデータ型。'double' または 'single' を指定します。

使用法

説明

noiseOut = cn() は、カラード ノイズ データの 1 つのサンプルまたは 1 つのフレームを出力します。

出力引数

すべて展開する

カラード ノイズ出力。ベクトルまたは行列で返されます。SamplesPerFrameNumChannels、およびOutputDataTypeの各プロパティは、出力のサイズとデータ型を指定します。

例: [0.5377;2.1027;-1.1403;0.5885;0.6229;-0.8971;-0.7435;-0.0588;3.458;4.4537]

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x)step(obj,x) になります。

この例の出力では、ピンク ノイズが各オクターブ帯域でほぼ等しいパワーをもつことを説明します。

長さが 44100 サンプルのピンク ノイズの単一チャネル信号を生成します。再現性のある結果を得るために、乱数発生器を既定の状態に設定します。

pinkNoise = dsp.ColoredNoise(1,44.1e3,1);
rng default;
x = pinkNoise();

サンプリング周波数を 44.1 kHz に設定します。100-200 Hz で開始して 6.400-12.8 kHz で終了する各オクターブ帯域でパワーを測定します。結果を表に示します。

beginfreq = 100;
endfreq = 200;
count = 1;
freqinterval = zeros(7,2);
Pwr = zeros(7,1);
while(endfreq<=44.1e3/2)
    freqinterval(count,:) = [beginfreq endfreq];
    Pwr(count) = bandpower(x,44.1e3,[beginfreq endfreq]);
    beginfreq = endfreq;
    endfreq = 2*endfreq;
    count = count+1;
end
Pwr = Pwr(:);
table(freqinterval,Pwr)
ans=7×2 table
    freqinterval       Pwr  
    _____________    _______

     100      200    0.17549
     200      400    0.20313
     400      800     0.2438
     800     1600     0.2503
    1600     3200    0.25233
    3200     6400    0.26828
    6400    12800    0.25211

ピンク ノイズは各オクターブ帯域でほぼ等しいパワーをもっています。

前述のコードを 'InverseFrequencyPower' を 0 にして再実行すると、ホワイト ノイズ信号が生成されます。ホワイト ノイズ信号は平坦なパワー スペクトル密度、つまり単位周波数ごとに等しいパワーをもっています。再現性のある結果を得るために、乱数発生器を既定の状態に設定します。

whiteNoise = dsp.ColoredNoise(0,44.1e3,1);
rng default;
x = whiteNoise();

サンプリング周波数を 44.1 kHz に設定します。100-200 Hz で開始して 6.400-12.8 kHz で終了する各オクターブ帯域でパワーを測定します。結果を表に示します。

beginfreq = 100;
endfreq = 200;
count = 1;
while(endfreq<=44.1e3/2)
    freqinterval(count,:) = [beginfreq endfreq];
    Pwr(count) = bandpower(x,44.1e3,[beginfreq endfreq]);
    beginfreq = endfreq;
    endfreq = 2*endfreq;
    count = count+1;
end
Pwr = Pwr(:);
table(freqinterval,Pwr)
ans=7×2 table
    freqinterval        Pwr   
    _____________    _________

     100      200    0.0031417
     200      400    0.0073833
     400      800     0.017421
     800     1600     0.035926
    1600     3200     0.071139
    3200     6400      0.15183
    6400    12800      0.28611

ホワイト ノイズは単位周波数ごとにほぼ等しいパワーをもつため、オクターブ帯域にはパワーが不均一に分布しています。オクターブ帯域幅は周波数の増加に伴って広くなっていくため、オクターブ帯域ごとのパワーはホワイト ノイズでは上昇します。

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) step(obj,x) になります。

長さが 2048 サンプルのピンク ノイズ信号を生成します。サンプリング周波数は 1 Hz です。ウェルチのオーバーラップ セグメント平均を使用してパワー スペクトル密度の推定を取得します。

cn = dsp.ColoredNoise('pink','SamplesPerFrame',2048);
x = cn();
Fs = 1;
[Pxx,F] = pwelch(x,hamming(128),[],[],Fs,'psd');

ピンク ノイズ過程の理論上の PSD を作成します。

PSDPink = 1./F(2:end);

両対数プロットでノイズのウェルチ PSD 推定を理論上の PSD に沿って表示します。周波数軸を基底 2 の対数スケールでプロットすると、オクターブが明確に表示されます。PSD の推定値を dB 単位 (10log10) でプロットします。

plot(log2(F(2:end)),10*log10(Pxx(2:end)))
hold on
plot(log2(F(2:end)),10*log10(PSDPink),'r','linewidth',2)
xlabel('log_2(Hz)')
ylabel('dB')
title('Pink Noise')
grid on
legend('PSD estimate','Theoretical pink noise PSD')
hold off

Figure contains an axes object. The axes object with title Pink Noise contains 2 objects of type line. These objects represent PSD estimate, Theoretical pink noise PSD.

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) step(obj,x) になります。

Color を 'brown'NumChannels を 2 に設定して、2 チャネルのブラウニアン ノイズを生成します。

cn = dsp.ColoredNoise('brown','SamplesPerFrame',2048,...
    'NumChannels',2);
x = cn();
subplot(2,1,1)
plot(x(:,1)); title('Channel 1'); axis tight;
subplot(2,1,2)
plot(x(:,2)); title('Channel 2'); axis tight;

Figure contains 2 axes objects. Axes object 1 with title Channel 1 contains an object of type line. Axes object 2 with title Channel 2 contains an object of type line.

サンプリング周波数は 1 Hz です。両方のチャネルに対してウェルチ PSD 推定を取得します。FFT 点の数である pwelch の 4 番目の引数 NFFT は空です。したがって、NFFT は 256 に設定されます。偶数の NFFT の場合、PSD 推定の計算に使われる FFT 点の数は (NFFT/2+1) であり、129 と等しくなります。

Fs = 1;
Pxx = zeros(129,size(x,2));
for nn = 1:size(x,2)
[Pxx(:,nn),F] = pwelch(x(:,nn),hamming(128),[],[],Fs,'psd');
end

ブラウニアン過程の理論上の PSD を作成します。両対数プロットで理論上の PSD を両信号の実現に沿ってプロットします。基底 2 の対数スケールを周波数軸に使用してパワー スペクトル密度を dB 単位でプロットします。

PSDBrownian = 1./F(2:end).^2;
figure;
plot(log2(F(2:end)),10*log10(PSDBrownian),'k-.','linewidth',2);
hold on;
plot(log2(F(2:end)),10*log10(Pxx(2:end,:)));
xlabel('log_2(Hz)'); ylabel('dB');
grid on;
legend('Theoretical PSD','Channel 1', 'Channel 2');

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Theoretical PSD, Channel 1, Channel 2.

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) step(obj,x) になります。

メモ: audioDeviceWriter System object™ は、MATLAB Online ではサポートされていません。

この例では、オーディオ ファイルをストリーミングして 0 dB S/N 比 (SNR) でピンク ノイズを追加する方法を説明します。例では、オーディオ ファイルを長さが 1024 サンプルのフレームで読み取り、オーディオ フレームの平方根平均二乗 (RMS) 値を測定して、同じ RMS 値をもつピンク ノイズをオーディオ フレームとして追加します。

System object を設定します。ファイル リーダーとカラード ノイズ ジェネレーターの両方の 'SamplesPerFrame' を 1024 に設定します。Color を 'pink' に設定して、ピンク ノイズを 1/|f| のパワー スペクトル密度で生成します。

N = 1024;
afr = dsp.AudioFileReader('Filename','speech_dft.mp3',...
    'SamplesPerFrame',N);
adw = audioDeviceWriter('SampleRate',afr.SampleRate);
cn = dsp.ColoredNoise('pink','SamplesPerFrame',N);

オーディオ ファイルを 1024 サンプルずつストリーミングします。各フレームで信号の RMS 値を測定し、長さが等しいピンク ノイズのフレームを生成して、信号と一致するようにピンク ノイズの RMS 値をスケーリングします。スケーリングされたノイズを信号に追加して出力を再生します。

while ~isDone(afr)
    audio = afr();
    speechRMS = rms(audio);
    noise = cn();
    noiseRMS = rms(noise);
    noise = noise*(speechRMS/noiseRMS);
    sigPlusNoise = audio+noise;
    adw(sigPlusNoise);   
end
release(afr);            
release(adw);

メモ: R2016a 以前のリリースを使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x)step(obj,x) になります。

2 チャネルのピンク ノイズを生成し、パワー密度スペクトルを計算します。

カラード ノイズ ジェネレーターを設定して、2 チャネルのピンク ノイズを 1024 サンプルで生成します。Spectrum Analyzer を設定し、ハミング ウィンドウと 50% のオーバーラップを使用して変更されたピリオドグラムを計算します。

pinkNoise = dsp.ColoredNoise('pink',1024,2);
sa = spectrumAnalyzer('SpectrumType','power-density',...
    'Method','welch',...
    'AveragingMethod','exponential',...
    'ForgettingFactor',0.95,...
    'OverlapPercent',50,'Window','hamming',...
    'PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','log','YLimits',[-50 30]);

シミュレーションを 30 秒間実行します。

tic
while toc < 30
    pink = pinkNoise();
    sa(pink);
end

詳細

すべて展開する

アルゴリズム

次の図に、カラード ノイズを生成する全体的なプロセスを示します。

乱数ストリーム ジェネレーターは、ガウス分布または一様分布に従うホワイト ノイズのストリームを生成します。ホワイト ノイズに適用されるカラー フィルターは、次のようなパワー スペクトル密度 (PSD) 関数に従うカラード ノイズを生成します。

S(f)=L(f)|f|α

α (周波数の逆べき乗) が 0 に等しい場合、カラー フィルターは乱数ストリーム ジェネレーターの出力に適用されません。範囲のオプションが有効になっている場合、出力は振幅が +1 と -1 の間にある一様なホワイト ノイズになります。範囲のオプションが有効になっていない場合、出力はガウス型のホワイト ノイズになり、値は +1 と -1 の間に制限されません。α が他の値に設定されている場合、カラー フィルターが乱数ストリーム ジェネレーターの出力に適用されます。範囲のオプションが有効になっている場合、絶対最大出力が 1 を超えないように、ゲイン g がカラー フィルターの出力に適用されます。

カラード ノイズ過程の詳細と、α の値がカラード ノイズの PSD にどのような影響を与えるかについては、カラード ノイズ過程を参照してください。

周波数の逆べき乗 α が正である場合、カラード ノイズは次数 63 の自己回帰 (AR) モデルを使用して生成されます。AR の係数は、次のようになります。

a0=1,ak=(k1α2)ak1k,k=1,2,,63

ピンク ノイズとブラウン ノイズは特殊なケースであり、それぞれ次数 12 および 10 の特別に調整された SOS フィルターから生成されます。これらのフィルターは、パフォーマンスが向上するように最適化されています。

周波数の逆べき乗 α が負である場合、カラード ノイズは次数 255 の移動平均 (MA) モデルを使用して生成されます。MA の係数は、次のようになります。

b0=1,bk=(k1+α2)bk1k,k=1,2,,255

パープル ノイズは 1 次フィルターから生成され、B = [1 −1] です。

適用されるカラー フィルター (ピンク、ブラウンおよびパープルを除く) の詳細については、[2]の pp. 820 ~ 822 を参照してください。

参照

[1] Beran, J., Y. Feng, S. Ghosh, and R. Kulik, Long-Memory Processes: Probabilistic Properties and Statistical Methods. NewYork: Springer, 2013.

[2] Kasdin, N.J. "Discrete Simulation of Colored Noise and Stochastic Processes and 1/fα Power Law Noise Generation." Proceedings of the IEEE®, Vol. 83, No. 5, 1995, pp. 802–827.

拡張機能

バージョン履歴

R2014a で導入

参考

関数

ブロック