信噪比计算方式(小问题解惑)

1 篇文章 0 订阅

前记

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

函数

通过使用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的含义

  • 10
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值