Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

dsp.ColoredNoise

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

説明

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

このオブジェクトでは、既定の 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] 内の任意の値を指定できます。

データ型: char | string

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

  • 1 –– ピンク ノイズ

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

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

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

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

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

依存関係

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フレームあたりのサンプル数のソース。'Property' または 'Input port' として指定します。

データ型: char | string

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

依存関係

このプロパティを有効にするには、SamplesPerFrameSource'Property' に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フレームあたりの最大サンプル数。正の整数で指定します。

MaxSamplesPerFrame プロパティで指定した値は、オブジェクトが生成する各フレームのサンプル数の上限として機能します。MaxSamplesPerFrame よりも大きな値を指定した場合、オブジェクトが生成する各フレームのサンプル数は MaxSamplesPerFrame プロパティの値と等しくなります。

依存関係

このプロパティを有効にするには、SamplesPerFrameSource'Input port' に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

データ型: char | string

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

依存関係

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

データ型: double

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

  • true –– ノイズを生成する内部ランダム ソースがガウス型ではなく一様になり、絶対最大出力が 1 を超えることがないようにゲインが適用されます。

    Color'white' に設定されている場合、ランダム ソースの出力にカラー フィルターは適用されません。出力は、振幅が +1 ~ -1 の一様なノイズになります。フィルターを適用したノイズ (ピンク ノイズなど) の出力分布が準ガウス型になります。

    Color が他のオプションに設定されている場合、カラー フィルターがランダム ソースの出力に適用され、その後、絶対最大出力が 1 を超えないことを確実にするゲインが適用されます。

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

データ型: logical

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

データ型: char | string

使用法

説明

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

noiseOut = cn(L) は、長さ L のカラード ノイズ データの 1 つのフレームを出力します。ここで、L は非負の整数です。

この構文は、SamplesPerFrameSource'Input port' に設定した場合にのみ適用されます。

出力引数

すべて展開する

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

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

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

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

pinkNoise = dsp.ColoredNoise(1,44.1e3,1)
pinkNoise = 
  dsp.ColoredNoise with properties:

                    Color: 'custom'
    InverseFrequencyPower: 1
            BoundedOutput: false
              NumChannels: 1
    SamplesPerFrameSource: 'Property'
          SamplesPerFrame: 44100
           OutputDataType: 'double'
             RandomStream: 'Global stream'

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

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

長さが 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, xlabel log indexOf 2(Hz) baseline, ylabel dB contains 2 objects of type line. These objects represent PSD estimate, Theoretical pink noise PSD.

Color を 'brown'NumChannels を 2 に設定して、2 チャネルのブラウニアン ノイズを生成します。オブジェクト アルゴリズムの実行中に、各フレームのサンプル数を入力として指定します。

cn = dsp.ColoredNoise('brown',SamplesPerFrameSource='Input port',...
    NumChannels=2)
cn = 
  dsp.ColoredNoise with properties:

                    Color: 'brown'
            BoundedOutput: false
              NumChannels: 2
    SamplesPerFrameSource: 'Input port'
       MaxSamplesPerFrame: 192000
           OutputDataType: 'double'
             RandomStream: 'Global stream'

x = cn(2048);
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 with xlabel log indexOf 2(Hz) baseline, ylabel dB contains 3 objects of type line. These objects represent Theoretical PSD, Channel 1, Channel 2.

メモ: 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);

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 で導入

すべて展開する

参考

関数

ブロック