2014-10-28 256 views
1

我很难理解生成SNR(db)与MSE的关系曲线。不同的信噪比(SNR)是通过改变噪声功率来创建的。 MSE的公式平均为T独立运行。对于每个SNR,我生成NEval = 10 time series。当SNR在范围= [0:5:50]时,如何正确绘制SNR与MSE的关系图?下面是伪代码。MATLAB::均方误差与SNR图

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 
+0

我猜这是因为有多少SNR可以提高实际的限制。通常,过高的过滤器是不必要的。因此,当信号质量改善得足够慢时(每极),通常会停下来。通常情况下,您还会引入一个惩罚函数,其中每个滤波器的次数都会增加。这增加了MSE。 – patrik 2014-10-29 16:34:31

回答

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))) 
+0

谢谢你的回复。在我提供的MSE公式中,T与正在评估的信号数量不同;对于每个信号的估计值被发现。分母中的2代表数字,表示估计的数量。当你乘以T * Neval时,我认为目的是消除一个额外的循环。但是,这是否不意味着MSE公式现在包含T *个信号?请澄清,如果我的理解是错误的:不应该T =独立运行的数量不同于为每个SNR生成的信号数量? – SKM 2014-10-29 07:02:01

+0

如果我理解正确,你的信号有两个噪声分量:随机相移phi和awgn。这些噪声是不相关的,因此没有必要跟踪每个相移phi的MSE。 – Kostya 2014-10-29 09:30:38

+0

我刚纠正了我的代码中的一个错字,我假设该信号不应该包含随机相移。 – Kostya 2014-10-29 09:34:51