2016-08-29 6 views
0

信号にノイズを追加するために使用されるmatlab関数awgn()では、分散を指定する方法はありますか?一般的に 特定の分散を使用してノイズを生成する方法

、私は単に noisevec = sqrt(2)*randn(length(X),1);行っているでしょうが、私はAWGN()を適用し、分散のかどうかを確認したいと思い、ノイズの多い観測が

Y = X+noisevec 

あるその後、分散2の雑音ベクトルを作成しますが、ノイズは確かにユーザーが指定したとおりです。どうやってするか?

  % add noise to produce 
     % an SNR of 10dB, use: 
     X = sin(0:pi/8:6*pi); 
     Y = awgn(X,10,'measured'); 

UPDATE:解に基づいてAWGNを使用して、特定の分散とノイズを生成する場合、出力は(同じでなければならない)が設けられて答え/溶液中に与えられ、AWGNなしで使用する場合()。私の理解に間違っていますか?ここに私がチェックした方法があります。

x = rand(1,10); $generating source input 
snr =10; 
variance = 0.1; 
%This procedure is based on the answer 
y1 = awgn(x, snr, 'measured'); 
y1 = x + (y1 - x) * sqrt(variance/var(y1 - x)); 

%This is the traditional way, without using awgn() 

y2 = x+sqrt(variance)*randn(1,10); 

y1がy2と等しくない。なぜだろう?

+1

あなたが何を求めているのかは不明です。あなたはawgn()の分散が本当にそれが何であるかを検証しようとしていますか? –

+0

@OliverCharlesworth:awgn()を使用して特定のノイズ分散を持つノイズの多い信号を生成できるかどうかを知りたい。 – SKM

+0

'var(Y-X)'は使えますか?私はあなたに 'awgn()'が適用されているものの分散を与えると思います。 – chessofnerd

答えて

2

awgnは、特定の分散を持つノイズを生成しません。

function y = AddMyNoise(x, variance) 
    y = awgn(x, 10, 'measured'); 
    y = x + (y - x) * sqrt(variance/var(y - x)); 
end 

UPDATE:あなたは、特定の分散とノイズを発生させるために持っている場合しかし、あなたは、単に上下に所望のレベルにノイズをスケーリングすることができ、独自のノイズ発生器を定義する検討することができるこの方法ことに注意してください出力に特定の分散を持たせるようにしてくださいは危険です: xに要素が少なければ奇妙な出力が出ます。スカラーであるxの制限では、このアプローチはxに固定値の-sqrt(分散)を追加します。もうホワイトノイズはありません。しかし、データポイント数が多ければ、合理的に白いノイズが発生します。

+0

これは非常に奇妙な機能です - ここではsnrは目的を果たしません。レンダリングの縮尺を変えてみませんか? –

+0

あなたは 'snr'、@OliverCharlesworthについて正しいです。私はそれに応じて私の答えを編集しました。しかし、 "randn"の出力と_noiseとして知られている出力の間には大きな違いがあります。信号処理では、ホワイトノイズは一定のパワースペクトル密度を持つランダム信号です。 *ノイズのスペクトルを意味します* [ホワイトノイズの定義]を見てください(https://en.wikipedia.org/wiki/White_noise) – erfan

+0

最新の編集の後、私はこの答えが理にかなっていると思います。 –

関連する問題