【问题标题】:Matlab: Mean Square ErrorMatlab:均方误差
【发布时间】:2015-07-11 07:34:11
【问题描述】:

您好,我是 Matlab 新手,我很难理解均方误差背后的逻辑。我得到了一个信号,我能够生成它并计算信号的 SNR,有没有办法找到原始信号和 SNR 信号之间的均方误差?

% Number of Samples.
n = 1:512;

% Given Signal
signal = exp(-5*(n-250).^2/100000).*cos(pi*(n-250)/6);

% Range of SNR
Snr = 30:-5:-10

% Calculate and display MSE between the original signal and noisy signal

??????

【问题讨论】:

  • 看看你的信号:plot(1:length(signal),signal) 噪音在哪里?

标签: matlab signal-processing noise


【解决方案1】:

首先您必须找出原始信号的功率,然后您必须使用给定的信噪比信息计算噪声功率。然后,您必须使用您在上一步中计算的功率信息来构建噪声信号。然后在实际信号中添加噪声信号,然后使用以下代码行。

我尝试执行上面解释过的程序:

下面的代码,我从你的问题中挑选出来的:

n = 1:512;
signal = exp(-5*(n-250).^2/100000).*cos(pi*(n-250)/6);
Snr = 30:-5:-10 ;

根据信号计算功率:

power_signal = (1/length (n))* sum ( signal.^2) ;

使用 snr 信息计算不同的噪声功率:

P_noise = [] ;
for i = 1: length(Snr) 
    p_noise (i) = power_signal/(Snr(i) /10) ;
end

为了简单起见,我选择了对应于第一个 snr 级别的信号和噪声:

noise   = wgn (1, length(n), p_noise (1), 'linear') ;
ModifiedSignal = signal + noise  ;

MSE 计算:

 differ = abs(signal - ModifiedSignal).^2  ; 
 MSE = sum(differ(:) )/ numel(signal ) ;

【讨论】:

    【解决方案2】:
    %MSE Original Signal
    MSE_original_signal = (double(original_signal) - double(noise_signal)) .^ 2;
    MSE_original_signal = sum(sum(MSE_original_signal)) / (length(n)); 
    fprintf('\nMSE Original Signal.....= %3.4f', MSE_original_signal);
    

    均方误差 (MSE) 计算每个信号的均方以进行比较。这 与原始信号的均方相比最接近的值是 最准确的一个。

    1. 将样本数转换为浮点类型,以便 确保没有负面差异。

    2. 按元素减去浮点整数。

    3. 对减法所得矩阵的元素求平方

    4. 对平方信号求和

    5. 除以原矩阵的元素个数

    6. (均方根可选)求平方根得到均方根误差的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2011-08-24
      • 2016-11-13
      • 2011-01-22
      相关资源
      最近更新 更多