您好我是Matlab的新手,我很难理解均方误差背后的逻辑。我得到了一个信号,我能够生成它并计算信号的SNR,有没有办法找到原始信号和SNR信号之间的均方误差?
class newthread extends Thread {
newthread() {
super("demo thread");
System.out.println("child thread:"+this);
start();}
public void run(){
try{
for(int i=5;i>0;i--) {
System.out.println("child thread:"+i);
Thread.sleep(500); }
}
catch(InterruptedException e){
System.out.println("child thread interrupted");}
System.out.println("child thread exiting");
}
}
class exthr{
public static void main(String args[]){
new newthread();
try{
for(int i=5;i>0;i--) {
System.out.println("main thread:"+i);
Thread.sleep(1000); }
}
catch(InterruptedException e){
System.out.println("main thread interrupted "); }
System.out.println("main thread exiting");
}
}
??????
答案 0 :(得分:1)
首先,您必须找出原始信号的功率,然后您必须使用给定的snr信息计算噪声功率。然后,您必须使用您在上一步计算的功率信息构建噪声信号。然后在实际信号中添加噪声信号,然后使用以下代码行。
我试图实施上面解释的程序:
在下面的代码中,我从您的问题中选择了:
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 ) ;
答案 1 :(得分:0)
%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) 计算每个信号的均方,以便进行比较。该 最接近的值与原始信号的均方值相比较 最准确的一个。
将样本数转换为类型浮点数 确保没有负面差异。
在元素的基础上减去浮点整数。
对减法
求平方信号
除以原始矩阵的元素数
(根均方根可选)平方根获得均方根误差的答案