WJzhengdong 发表于 2010-11-16 20:06

信噪比求助?

怎么始终不理解这个信噪比是怎么回事,给点帮助吧;
在论坛上看到说信噪比为10log(norm(s)/norm(n));s是干净信号,n为噪声信号;
可是我用下面这个例子来理解信噪比,为什么不对呢。a为干净信号,s是加噪信号,信噪比为10;那么我用上边的公式反求信噪比10log(norm(a)/norm(s-a))结果也应该是10吧,但是为什么是-4.341呢?这是什么原因啊?
f=30;
fs=1000;
number=200;
t=-number/2+1:number/2;
a=(1-2*(pi*f*t/fs).^2).*exp(-(pi*f*t/fs).^2);
s=awgn(a,10);
snr=10*log(norm(a)/norm(s-a))

JG5BVICTOR 发表于 2010-11-17 11:07

个人觉得首先你的程序出现了错误,信噪比的添加应该写成这样s=awgn(a,10,'measured');按照公式计算后的信噪比与10还有一些差别11dB左右,你可以看matlab中信噪比的计算是如何定义的(用which awgn 找到awgn.mat文件),个人认为信噪比只是一个信号与噪声的度量指标,意义不是很大,也就是说信噪比大的不一定说降噪效果就好,还应该看主流形是否与纯净信号的主流形特征相似。附带的程序中计算的信噪比为 更接近10dB。以上均属于个人观点,有不足之处希望各位不吝赐教。

WJzhengdong 发表于 2010-11-19 21:25

非常感谢,只是还是不明白
switch m
case 'rm'; sig1=remmean(sig1); sig2=remmean(sig2);
case 'rv'; sig1=remmean(sig1); sig2=remmean(sig2); sig1=sig1/std(sig1); sig2=sig2/std(sig2);
end

value=20*log10(norm(sig1)/norm(sig1-sig2));
看了看remmean文件,为什么是将信号矩阵减去所求的中值后的新矩阵来运算?newVectors = vectors - meanValue * ones (1,size (vectors, 2));

还有到底是20倍的log还是10倍的?

JG5BVICTOR 发表于 2010-11-20 18:47

回复 3 # WJzhengdong 的帖子

以上所说的问题,我的确还没有弄明白,按照信噪比的定义(有用信号的功率与噪声功率的比),的确不用去均值处理,log前面的也是10倍的关系(这程序是从别人那拷过来的),但是也不能过分拘泥于信噪比的计算,你用同一种方法计算降噪前后的信噪比,如果有信噪比有提高,还是可以说明你的降噪算法有一定的可取之处。

JG5BVICTOR 发表于 2010-11-20 19:03

回复 3 # WJzhengdong 的帖子

我看了一下这篇论文,其中的SNR是这样定义的10*log(纯净信号的方差/噪声信号的方差)。这样就能解释为什么要去均值,为什么要乘以20而不是乘以10了。去均值后的norm()是标准差,这篇文章是《Iterative SVD method for noise reduction of low-dimensional chaotic time series》

WJzhengdong 发表于 2010-11-24 21:20

这下明白了,非常感谢啊。这几天由于别的事情忙碌,未能及时回复。再次表示感谢了
页: [1]
查看完整版本: 信噪比求助?