2

SNR (db) と MSE のプロットを生成するロジックを理解するのが困難です。ノイズ パワーを変化させると、信号対ノイズ比 (SNR) が異なります。TMSE の式は、独立した実行で平均化されます。

ごとSNRに、生成しNEval = 10 time seriesます。SNR が [0:5:50] の範囲にある場合、SNR と MSE のグラフを正しくプロットするにはどうすればよいですか? 以下は疑似コードです。

 N = 100; %Number_data_points
NEval = 10; %Number_of_different_Signals
Snr = [0:5:50];
T = 1000; %Number of independent runs

MSE = [1];
for I = 1:T
 for snr = 1: length(Snr)
   for expt = 1:NEval
    %generate signal
      w0=0.001;  phi=rand(1);
    signal = sin(2*pi*[1:N]*w0+phi); 
    % add zero mean Gaussian noise
    noisy_signal = awgn(signal,Snr(snr),'measured');
    % Call Estimation algorithm
    %Calculate error
    end
  end
end

plot(Snr,MSE); %Where and how do I calculate this MSE
4

1 に答える 1

0

ここ ( http://www.mathworks.nl/help/vision/ref/psnr.html ) または他の同様の情報源で説明されているように、MSE は単に元の信号と破損した信号の間の平均二乗誤差です。あなたの表記では、

w0=0.001;
signal = sin(2*pi*[1:N]*w0);
MSE = zeros(T*Neval,length(Snr));
for snr = 1:length(Snr)
    for I = 1:T*Neval     %%note, T and Neval play the same role in your pseudo code
        noisy_signal = awgn(sin(2*pi*[1:N]*w0+rand(1)),Snr(snr),'measured');
        MSE(I,snr) = mean((noisy_signal - signal).^2);
    end
end
semilogy(Snr, mean(MSE))  %%to express MSE in the log (dB-like) units

長さが異なる信号の場合:

w0=0.001;
Npoints = [250,500,1000];    
MSE = zeros(T,length(Npoints),length(Snr));
for snr = 1:length(Snr)
  for ip = 1:length(Npoints) 
    signal = sin(2*pi*[1:Npoints(ip)]*w0);
    for I = 1:T
        noisy_signal = awgn(sin(2*pi*[1:Npoints(ip)]*w0+rand(1)),Snr(snr),'measured');
        MSE(I,ip,snr) = mean((noisy_signal - signal).^2);
    end
  end
end
semilogy(Snr, squeeze(mean(mean(MSE,1),2)) )
于 2014-10-28T23:26:37.343 に答える