我是靠谱客的博主 疯狂花生,最近开发中收集的这篇文章主要介绍信噪比计算方式(小问题解惑),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前记

使用之前学姐的代码,总有些奇怪的感觉,然后一直也不知道信噪比算对了没,然后经过学习终于差不多懂了信噪比如何计算。

函数

通过使用awgn函数添加噪声对SNR进行验证:

  • 本方法使用了计算信号功率来算SNR:
fs=50;                           	 		% 采样率
N=fs*60;                     			    % 采样点数(N):N = fs * t 
t = 0 : 1/fs : (N-1)/fs;     			    % 横坐标t坐标精度
X = 5*sin(2*pi*10*t);                		% 产生正弦信号
Y = awgn(X,10,'measured');                  % 加入信噪比为10db的噪声,加入前预估信号的功率(强度)
sigPower = sum(abs(X).^2)/length(X)         % 求出信号功率
noisePower=sum(abs(Y-X).^2)/length(Y-X)     % 求出噪声功率
SNR=10*log10(sigPower/noisePower)           % 由信噪比定义求出信噪比,单位为db

结果如下所示,SNR较接近于10,与加入的对比相近。
在这里插入图片描述

  • 上述方法的另一种写法为:(结果与上述一致)
 PS= sum(X.*X)/length(X);
 PN=sum((Y-X).*(Y-X))/length(Y);
 SNR2=10*log10(PS/PN)

注:信噪比的计量单位是dB,其计算方法是10LOG(Ps/Pn),其中Ps和Pn分别代表信号和噪声的有效功率,也可以换算成电压幅值的比率关系:20LOG(Vs/Vn),Vs和Vn分别代表信号和噪声电压的“有效值”。

另一种方法是直接将上述式子简化:

 SNR3=10*log10(sum((X.^2))/sum(((Y-X).^2)))

结果如下述所示:三者计算结果一致:
因为一般噪声与原始信号长度相同,且一般是实数,可直接将上述式子简化为SNR3的计算方式。
在这里插入图片描述

问题

学姐的SNR公式如下:

SNR4=10*log10((X.^2)/((Y-X).^2))

结果为:SNR4 = 5.281175664797473

  • 一直感觉好像和上面的没什么不一样的,但是一直有问题(SNR3是看懂这个后改的)。
    • 问题1:感觉像是两个一维向量相除的不知道为啥是个数,一开始才疏学浅以为这个是对的只不过我不会。

    • 问题2:算出来的数不对,相差很多,说明这个方法是有问题的。

  • 通过搜索,两个一维数组直接用’/'相除得到的是什么?→矩阵右除运算,相当于是求方程 x·b = a 的最小二乘解:x = a/b。这个相当于: x = a*pinv(b)。说明SNR4求得的解不是SNR。
  • 矩阵右除的解释(来自官网):x = B/A 是方程 xA = B 的解。矩阵 A 和 B 必须拥有相同的列数。用左除运算符表示的话,B/A = (A’B’)’。
  • 因此原来的想法应该是想让两个功率值相除变成了求解方程的最小二乘解,所以把两个向量通过SUM加成一个数值再进行运算,问题得以解决。

解释“两个一维数组直接用’/'相除得到的是什么?”的参考

两个一维数组直接用’/'相除得到的是什么?
矩阵 B/A的含义

最后

以上就是疯狂花生为你收集整理的信噪比计算方式(小问题解惑)的全部内容,希望文章能够帮你解决信噪比计算方式(小问题解惑)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部