MATLAB中wnoise函数信噪比的问题

在MATLAB中wnoise的解释如下:

WNOISE Generate noisy wavelet test data.

    X = WNOISE(FUN,N) returns values of the test function 

    given by FUN, on a 2^N sample of [0,1].

    [X,XN] = WNOISE(FUN,N,SQRT_SNR) returns the previous vector X

    rescaled such that std(x) = SQRT_SNR. The returned vector XN

    contains the same test vector X corrupted by an

    additive Gaussian white noise N(0,1). Then XN has a

    signal-to-noise ratio of (SQRT_SNR^2).

    [X,XN] = WNOISE(FUN,N,SQRT_SNR,INIT) returns previous

    vectors X and XN, but the generator seed is set to INIT

    value. 

   

对于[x,xn]=wnoise(FUN,N,SQRT_SNR)​的形式,MATLAB中解释xn的信噪比为SQRT_SNR^2。现在我来产生一个信号看看是不是这样的。

clc;

clc ;

clear all;

[x,sx]=wnoise(4,10,3,231434);

利用以下公式求出信噪比:

SNR=10*log10(sum(x.^2)/sum((sx-x).^2))​;                              (1)

MATLB运行结果是:SNR=​9.8628

可以看出SNR!=!=SQRT_SNR^2​=9结果并不一样,这是为什么?下面进行分析

已知x是纯净信号,(sx-x)是噪声信号,由式(1)计算出的​SNR肯定是没有问题的。

但是和​SQRT_SNR^2的结果不一样,笔者认为是两者关于信噪比的计算公式不同

MATLAB中信噪比使用(为区分式1这里使用snr表示):

snr=纯净信号的方差/噪声信号的方差                                 (2)

理论分析​为:

wnoise()产生的是均值为0标准差为1的高斯白噪声​

所以纯净噪声的方差为=3^2=9​​;噪声方差=1^2=1

理论得到​的snr=9

但是在实际种通过计算得到

std(x)=3;

std(sx-x)= 0.9769​并不等于1

实际得到的snr=9.2125

这主要是因为噪声的标准差并不等于1造成的,原因是wnoise从“均值为0,标准差为1的高斯分布中抽样出来的数据”。但有限长度的wnoise本身并不满足均值为0,标准差为1,即对任意分布的随机变量,都不可能通过有限长度的样值来提取改随机变量的的全部特征。

​所以通过式1计算出来的SNR也是对的。

以上是笔者自己的拙见,以期抛砖引玉。

如需装载请注明出处。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值