MATLABで帯域制限されたガウスホワイトノイズを生成する方法


16

一部の論文では、加法性ノイズは帯域制限されたガウスホワイトであると読みました。
MATLABを使用してこのタイプのノイズをシミュレートするにはどうすればよいですか?


連続時間システムでは、ガウス分布であるかどうかにかかわらず、帯域制限されたホワイトノイズの概念が明確に定義され、十分に理解されています。離散時間システムの場合、問題はより複雑であり、帯域制限とは何か、ナイキスト周波数と比較する方法を考慮する必要があります。
ディリップサルワテ

2
@DilipSarwate:私にとって、「帯域制限されたホワイトノイズ」は矛盾です!:-)
ピーターK。

@PeterK。帯域制限されたホワイトノイズの概念は、主に、通過帯域外のノイズの特性が無関係ある通過帯域の帯域通過システムで使用されます。この雑音は、正確に通過する周波数帯域は通過帯域です。これはホワイトノイズよりも矛盾した表現ではありません(バンド制限に関する軽pe的なコメントはありません)。また、ジェイソンRの回答(私は同意しません)に続くDRazickのコメント(スポット)を参照してください。
ディリップサルワテ

1
@DilipSarwate:説明ありがとうございます。わかりましたが、まだ用語の選択は非常に悪いと思います。私にとって「バンドパスフィルター処理されたホワイトノイズ」はより正確ですが、最終的には同じ場所にあると考えられます。
ピーターK。

1
@PeterK。残念ながら、「バンドパスフィルター処理されたホワイトノイズ」とは、一般的にJasonRの回答で説明されているプロセスを意味します。ホワイトノイズから始めて、伝達関数フィルターでフィルター処理して、比例するPSDのプロセスを取得します。帯域制限されたホワイトノイズは、が理想的なバンドパスフィルターの伝達関数でなければならないと主張することを除いて同じです。ホワイトノイズの重要な点は、信号が帯域内に留まるように制約されている限り、帯域制限されたホワイトノイズに適用されるノイズa'i'ntに信号を配置できないことです。H(f)|H(f)|2H(f)
ディリップサルワテ

回答:


19

最初にホワイトノイズを生成し、次に希望する帯域幅にフィルタリングすることにより、帯域制限されたガウスノイズを生成します。例として:

% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);

私はいつもこれを疑問に思っていましたが、このようなことが行われた場合、それについてガウスは何ですか?私は、PDFが...この時点ですべてであると思ういけない
スペイシー

8
ガウス確率変数の特別な特徴の1つは、2つの独立したガウスRVの合計もガウス分布であるということです。入力ノイズは白色なので、フィルター出力の各サンプルは、多くの独立したガウス確率変数の合計として見ることができます(各RVの分散は、入力ノイズの分散と対応するフィルタータップの値に依存します)。したがって、フィルター出力のサンプルもガウス分布です。ただし、フィルター出力で連続するサンプル間に相関があるため、ノイズは明らかに白色ではなくなりました。
ジェイソンR

このプロパティの詳細は、Wikipediaで説明されています。入力ノイズに色が付いていても、プロパティは保持されます(「相関ランダム変数」を参照)。
ジェイソンR

1
手のひらを顔に当てます。もちろん。
スペイシー

3
しかし、この方法ではホワイトノイズは生成されません。フィルターを適用する必要はありません。すべての離散サンプリングノイズは、最初から帯域制限されています。
ロイ

9

ただ、ジェイソンの答えに小さな追加として:通常、あなたは、特定の分散とノイズ帯域制限を生成する必要が。Jasonの答えにあるコードにこのコードを追加できます。σ2

var = 3.0;  % just an example  
scale = sqrt(var)/std(nb);
nb = scale*nb;  % nb has variance 'var'

一般に、フィルターはノイズ分散を変更するため、フィルタリング後にスケーリングを行う必要があることに注意してください。


2
いい視点ね。あなたは、このようなフィルタ係数スケーリング場合場合、フィルターはノイズ分散に影響しません。n=0N|h[n]|2=1
ジェイソンR

@Matt Niceの追加!
スペイシー

4

あなたが離散ノイズサンプルを生成するたびに(MATLABの使い方randn/をrand例えば)あなたが実際にノイズ帯域制限を生成します。

必要なのは、離散サンプルの分散を、それらのサンプルが取得されたとされる「連続」ノイズの分散に調整することだけです。

σcn2δ(t)fsfsσcn2

fs/2

完全な説明は、ここで与えられます- 特定の帯域幅の通信システムでAWGN(Additive White Gaussian Noise)をシミュレートする方法



2

この投稿で言及されているアプローチを使用できないのはなぜですか?

目的の周波数で開始し、フィルタリングの代わりに逆方向に信号を構築します。Pythonコードを使用しますが、元のMatlabコードへのリンクも使用します。

その方法で行うことには欠点がありますか?


元のmatlabコードを見ると、nのブロックサイズ(fftの長さ)で機能します。2n個のサンプルが必要な場合は、fftの長さを2倍にすることができます。2つの別々のブロックを実行すると、最初のブロックから2番目のブロックへの不連続な移行が発生します。ウィンドウを使用して遷移をスムーズにすることもできますが、時系列のスカラップを回避するために2ブロック以上行う必要があります。フィルター方式を使用すると、フィルターが定常状態になると、必要なだけランダムな数値を入力できます。フィルターメソッドの処理の増加は、線形にスケーリングします。

0

@Drazickが2013年の回答を修正したため、現在のビューにこの質問が表示されていることに気付きました。

xrand()frand()0x<1

もちろん、「ホワイトノイズ」は、アナログ信号であっても誤った呼び名です。無限に至るまで平坦なスペクトルを持つ「パワー信号」も無限のパワーを持ちます。前述のように生成された仮想ガウスおよび「白色」信号は、有限のパワー(分散であり1)と、片側で表される有限の帯域幅を持ち、ナイキストです。(したがって、「パワースペクトル密度」または単位周波数あたりのパワーは1 /ナイキストです。)スケーリングしてオフセットしてください。

これを後で編集し、Cのような擬似コードを追加して、これを明示的に表示できるようにします。


-1

完全なスペクトルのホワイトノイズを生成してフィルタリングすることは、家の壁を白くペイントしたいので、家全体を白くペイントして、壁以外のすべての家をペイントバックすることにします。ばかです。(しかし、エレクトロニクスには意味があります)。

私は、あらゆる周波数と帯域幅でホワイトノイズを生成できる小さなCプログラムを作成しました(たとえば、16kHzの中心周波数と2kHzの「ワイド」)。フィルタリングは含まれません。

私がしたことは簡単です:メイン(無限)ループ内で、中心周波数+/-半帯域幅と+半帯域幅の間の乱数で正弦波を生成し、任意の数のサンプル(粒度)でその周波数を維持します。結果は次のとおりです。

16kHzの中心周波数で2kHz幅のホワイトノイズ

White noise 2kHz wide at 16kHz center frequency

擬似コード:

while (true)
{

    f = center frequency
    r = random number between -half of bandwidth and + half of bandwidth

<secondary loop (for managing "granularity")>

    for x = 0 to 8 (or 16 or 32....)

    {

        [generate sine Nth value at frequency f+r]

        output = generated Nth value
    }


}

1
STFTはバンド全体で平坦ではありません。あなたのテクニックに利点がある理由を示していません。ところで、ほとんどの塗料は灰色がかった白として在庫され、その後顔料と混合されます。オレンジ色の塗料は、オレンジ色の材料を使用するだけでは作られません。ホワイトノイズの生成に余分な作業はありません。

@StanleyPawlukiewiczエレクトロニクスでは、ノイズジェネレーターとフィルターが2つの非常に単純な「オブジェクト」であるため、リゲです。プログラミングでは、フィルタは、必要なデータを生成するだけでなく、命令の数も複雑です。時間が重要なアプリケーションがある場合、プログラミングが望ましい場合、私のアプローチです。ダウン投票した場合は、もう一度考え直すことをお勧めします。
ジブリ

1
あなたの騒音は好ましくありません。スペクトルは帯域全体で平坦ではありません。その場で超越関数を呼び出すことは、フィルタリングよりも速くありません。あなたの引数は根拠のある

1
実際には、帯域内リップルは設計パラメータです。中心周波数でピークになると言うのも間違っています

1
あなたのテクニックはとても簡単に修正できるので、1つにリンクして、あなたのコードがそれほど複雑ではないと主張して、それをバイカッドと比較するのではなく、独自の正弦波ルーチンを書いてみませんか。あなたがそれを追加している間、固定小数点バージョンはどうですか。また、サンプル数を増やすときにテクニックがどのように拡大するかを考えることもできます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.