一部の論文では、加法性ノイズは帯域制限されたガウスホワイトであると読みました。
MATLABを使用してこのタイプのノイズをシミュレートするにはどうすればよいですか?
一部の論文では、加法性ノイズは帯域制限されたガウスホワイトであると読みました。
MATLABを使用してこのタイプのノイズをシミュレートするにはどうすればよいですか?
回答:
最初にホワイトノイズを生成し、次に希望する帯域幅にフィルタリングすることにより、帯域制限されたガウスノイズを生成します。例として:
% 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);
ただ、ジェイソンの答えに小さな追加として:通常、あなたは、特定の分散とノイズ帯域制限を生成する必要が。Jasonの答えにあるコードにこのコードを追加できます。
var = 3.0; % just an example
scale = sqrt(var)/std(nb);
nb = scale*nb; % nb has variance 'var'
一般に、フィルターはノイズ分散を変更するため、フィルタリング後にスケーリングを行う必要があることに注意してください。
あなたが離散ノイズサンプルを生成するたびに(MATLABの使い方randn
/をrand
例えば)あなたが実際にノイズ帯域制限を生成します。
必要なのは、離散サンプルの分散を、それらのサンプルが取得されたとされる「連続」ノイズの分散に調整することだけです。
完全な説明は、ここで与えられます- 特定の帯域幅の通信システムでAWGN(Additive White Gaussian Noise)をシミュレートする方法。
この投稿で言及されているアプローチを使用できないのはなぜですか?
目的の周波数で開始し、フィルタリングの代わりに逆方向に信号を構築します。Pythonコードを使用しますが、元のMatlabコードへのリンクも使用します。
その方法で行うことには欠点がありますか?
@Drazickが2013年の回答を修正したため、現在のビューにこの質問が表示されていることに気付きました。
rand()
frand()
もちろん、「ホワイトノイズ」は、アナログ信号であっても誤った呼び名です。無限に至るまで平坦なスペクトルを持つ「パワー信号」も無限のパワーを持ちます。前述のように生成された仮想ガウスおよび「白色」信号は、有限のパワー(分散であり1)と、片側で表される有限の帯域幅を持ち、ナイキストです。(したがって、「パワースペクトル密度」または単位周波数あたりのパワーは1 /ナイキストです。)スケーリングしてオフセットしてください。
これを後で編集し、Cのような擬似コードを追加して、これを明示的に表示できるようにします。
完全なスペクトルのホワイトノイズを生成してフィルタリングすることは、家の壁を白くペイントしたいので、家全体を白くペイントして、壁以外のすべての家をペイントバックすることにします。ばかです。(しかし、エレクトロニクスには意味があります)。
私は、あらゆる周波数と帯域幅でホワイトノイズを生成できる小さなCプログラムを作成しました(たとえば、16kHzの中心周波数と2kHzの「ワイド」)。フィルタリングは含まれません。
私がしたことは簡単です:メイン(無限)ループ内で、中心周波数+/-半帯域幅と+半帯域幅の間の乱数で正弦波を生成し、任意の数のサンプル(粒度)でその周波数を維持します。結果は次のとおりです。
16kHzの中心周波数で2kHz幅のホワイトノイズ
擬似コード:
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
}
}