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的主要内容,如果未能解决你的问题,请参考以下文章