matlab如何求一副图像的信噪比SNR与均方根误差RMSE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何求一副图像的信噪比SNR与均方根误差RMSE相关的知识,希望对你有一定的参考价值。

我要一个用matlab写的求一副图像的SNR,RMSE的源代码。 这幅图像首先要加入噪声,然后再求。 注意我要求的是SNR,而不是PSNR.

参考技术A 到matlab论坛里的源码交流板块找一找吧。专业问题,O(∩_∩)O~。
http://www.matlabsky.com/?fromuid=4481本回答被提问者采纳

数字信号处理相关函数应用 ( 使用 matlab 计算相关函数 )

文章目录





一、相关函数应用场景



求下面信号的 " 自相关函数 " :

x ( n ) = sin ⁡ ( 2 π f n ) + N ( n ) x(n) = \\sin(2\\pi fn) + N(n) x(n)=sin(2πfn)+N(n)

其中 N ( n ) N(n) N(n)高斯白噪声 ;

高斯白噪声 符合 正态分布 特性 , 其 均值为 0 0 0 , 方差为 1 1 1 , 其功率谱密度是白的 , 在所有的频率上 , 其功率都相同 ;



在上一篇博客 【数字信号处理】相关函数应用 ( 相关函数应用场景 | 噪声中检测信号原理 ) 中 , 使用了公式推导的方法求相关函数 , 本篇博客使用 matlab 求相关函数 ;



下面开始使用 matlab 计算 x ( n ) = sin ⁡ ( 2 π f n ) + N ( n ) x(n) = \\sin(2\\pi fn) + N(n) x(n)=sin(2πfn)+N(n) 的相关函数 ;


1、生成高斯白噪声


生成 高斯白噪声 序列 , 均值 0 , 方差 1 ;

randn(1,200); 

上述代码 生成的 高斯白噪声 序列 是一个 有 200 个元素的行向量 ,

如果是 randn(2, 200) 代码 , 则生成的是一个 2 × 200 2 \\times 200 2×200 的矩阵 ;


2、信噪比 SNR


SNR 是信噪比 , P s P_s Ps 是信号功率 , P N P_N PN 是噪声功率 , 其关系是 :

S N R = 10 log ⁡ 10 P s P N SNR = 10 \\log_10\\cfracP_sP_N SNR=10log10PNPs

在 matlab 中 , 设置信噪比为 7 7 7 ;

% 设置 信噪比 
SNR = 7;

3、根据信噪比 SNR 求信号幅度


信号 A sin ⁡ ω n A \\sin \\omega n Asinωn , 其功率是 P s = A 2 2 P_s = \\cfracA^22 Ps=2A2 , 噪声功率 是 P N = 1 P_N=1 PN=1 , 将其带入到信噪比公式中 :

S N R = 10 log ⁡ 10 P s P N = 10 log ⁡ 10 A 2 2 1 = 10 log ⁡ 10 A 2 2 SNR = 10 \\log_10\\cfracP_sP_N = 10 \\log_10\\cfrac\\cfracA^221 = 10 \\log_10\\cfracA^22 SNR=10log10PNPs=10log1012A2=10log102A2

根据信噪比 计算 幅度 A A A :

S N R 10 = l o g 10 A 2 2 \\cfracSNR10 = log_10\\cfracA^22 10SNR=log102A2

A 2 2 = 1 0 S N R 10 \\cfracA^22 = 10^\\cfracSNR10 2A2=1010SNR

A 2 = 2 × 1 0 S N R 10 A^2 = 2 \\times 10^\\cfracSNR10 A2=2×1010SNR

A = 2 × 1 0 S N R 10 A = \\sqrt2 \\times 10^\\cfracSNR10 A=2×1010SNR

写成 matlab 代码为 :

% 根据 信噪比 计算信号幅度
SignalAmplitude = sqrt( 2 * 10^(SNR/10) );

4、产生单载波信号及最终信号


根据 A sin ⁡ ω n A \\sin \\omega n Asinωn 公式 , 产生 200 个信号 , 其中 A A A 之前已经求出 ;

% 根据 Asinωn 产生 200 个信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

然后将 信号 与 高斯白噪声叠加 :

% 信号 + 高斯白噪声
x = x1 + xn; 

5、求自相关函数及功率


求自相关函数 , 使用 xcorr 函数 ;

% 求 x 的 自相关函数 , 长度为2N-1
y = xcorr(x, x); 

求信号功率 :

% 功率 : 自相关函数 幅度 求平均
% 自相关函数 就是 200 个功率之和
y = y / 200; 

6、matlab 完整代码


matlab 完整代码 :

% 清除之前的变量或内存
clear; 

% 生成 高斯白噪声 序列 , 均值 0 , 方差 1
% 生成的 高斯白噪声 序列 是一个 有 200 个元素的行向量
xn = randn(1,200); 

% 设置 信噪比 
SNR = 7;

% 根据 信噪比 计算信号幅度
A = sqrt( 2 * 10^(SNR/10) );

% 根据 Asinωn 产生 200 个信号 
x1 = A * sin( pi * 0.165 * (0:199) ); 

% 信号 + 高斯白噪声
x = x1 + xn; 

% 求 x 的 自相关函数 , 长度为2N-1
y = xcorr(x, x); 

% 功率 : 自相关函数 幅度 求平均
% 自相关函数 就是 200 个功率之和
y = y / 200; 

%建立幕布
figure;
%绘制 "输出序列" 图像 , 点用上三角表示
plot(y);

% 打开网格
grid on;

执行结果 :

以上是关于matlab如何求一副图像的信噪比SNR与均方根误差RMSE的主要内容,如果未能解决你的问题,请参考以下文章

怎么用matlab给声音加入噪音?

BPSK调制和信噪比:Matlab

信噪比(dB)换算公式

python 写matlab中的加性高斯白噪声AWGN

数字信号处理相关函数应用 ( 使用 matlab 计算相关函数 )

数字信号处理相关函数应用 ( 使用 matlab 计算相关函数 )