在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也是对的。
以上是笔者自己的拙见,以期抛砖引玉。
如需装载请注明出处。