【问题标题】:MATLAB: : Mean square error vs SNR plotMATLAB: : 均方误差与 SNR 图
【发布时间】:2014-10-28 20:56:30
【问题描述】:

我很难理解生成 SNR (db) 与 MSE 图背后的逻辑。通过改变噪声功率产生不同的信噪比 (SNR)。 MSE 的公式是在T 独立运行上平均得出的。

对于每个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

【问题讨论】:

  • 我猜这是因为可以提高多少 SNR 存在实际限制。通常不需要太高阶的滤波器。因此,当信号质量改善得足够慢(每极)时,通常最好停止。通常,您还会引入一个惩罚函数,该函数的幅度会随着滤波器阶数的增加而增加。这增加了 MSE。

标签: matlab plot mean-square-error


【解决方案1】:

正如此处 (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)) )

【讨论】:

  • 感谢您的回复。在我提供的 MSE 公式中,T 与正在评估的信号数量不同;对于每个信号,估计都被发现。分母中的 2 代表表示估计数的数字。当您乘以 TNeval 时,我认为目的是消除额外的循环。但是,这是否意味着 MSE 公式现在包含 T 个信号?如果我的理解有误,请澄清:T = 独立运行的数量是否应该不同于为每个 SNR 生成的信号数量?
  • 如果我理解正确,您的信号有两个噪声分量:随机相移 phi 和 awgn。这些噪声不相关,因此没有必要跟踪每个相移 phi 的 MSE。
  • 我刚刚纠正了我的代码中的一个错字,我认为信号不应该包含随机相移。
  • 感谢您的修订版。在其他情况下,在一些论文中,我看到作者提到为每个 SNR 生成 M 个不同长度的信号,然后平均 MSE。在这种情况下,是否会有第三个循环,然后在第三个循环内我应该计算 MSE(I,snr)?
  • 哦,我现在明白了,你的 N 不同。您需要定义 MSE(I,snr,Ni) 并使用两个平均值对其进行处理。你会在某个区间随机选择 N 个吗?
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多