信噪比

1. 信噪比定义

SNR(Signal-Noise Radio),信号与噪声的功率之比。信噪比越高越好。
线性单位:
SNR = \frac{P_s}{P_n} = (\frac{V_s}{V_n})^2

以dB为单位:
SNR (dB) = 10*log_{10}{\frac{P_s}{P_n}} \\ = 20*log_{10}{\frac{V_s}{V_n}}
P_s表示信号的有效功率,P_n表示噪声的有效功率。
V_s表示信号的电压幅值(有效值),V_n表示噪声的电压幅值(有效值)。

2. 分析

SNR(信噪比)在不同的应用领域有不同的定义方法,其对应的估计方法也不同。我们这里的任务是对一段采集到的(含噪)信号进行SNR估计,就是说我们面对着一段采集信号x(k)=s(k)+n(k),k=1,2…,N;其中s是有用信号(以下简称信号)部分,n是噪声部分。我们需要合理地估计x的信噪比。

在上述情况下,SNR定义为信号功率与噪声功率之比的对数,即:
SNR (dB) =10*log_{10} \frac{P_s}{P_n} \ \ \ \ \ (1)
由此可知,想要合理地估计SNR,首先需要用正确的方法估计Ps和Pn。

在对P_sP_n进行估计的时候,

  1. 首先需要明确的是在我们的估计问题中,有用信号s是确定信号还是随机信号。这与我们进行SNR估计的目的有关:

    • 如果我们的目的只是计算采集来的这一段x的信噪比(而不打算用这个信噪比产生任何其他推论,比如我们试图观察并记录不同时间段的信噪比变化情况),那么我们可以将信号s看作是确定信号,因为这时我们是在对这一段已经客观产生的板上钉钉的没有任何随机性的x进行分析,准确地说,我们这个时候是在进行SNR计算或者SNR测量(而不是SNR估计);
    • 如果我们不仅仅要计算这一段x的信噪比,而是要在此基础上推断之后采集的x_1,x_2….的信噪比的情况(比如我们试图对一个系统的SNR性能进行估计),那么这时我们就要把信号s看作是随机信号,因为我们是要从这段x中提取出对我们之后分析x_1,x_2…有用的信息,这时才是名副其实的SNR估计。
  2. 而对于噪声n,需要明确的是,在绝大多数情况下,从采集到的x中分离出sn是不现实的。也就是说我们必须在进行本文涉及的SNR分析之前,先采集一段纯噪声信号,通过对该段纯噪声信号的分析得到关于噪声的先验知识,之后将它们应用到本文涉及的SNR分析中。因此,从这个意义上讲,在绝大多数情况下,我们无法将噪声n看作确定信号,只能将其看作随机信号来处理。

3. P_s,P_n估计方法

3.1 将s看做确定信号

就是说s的所有信息都已确定下来,我们只需要将必要的信息提取出来计算SNR。根据平均功率的定义:
P_s =\frac{1}{N*\sum_{k = 1}^{k = N}{|(s(k)|^2}} \ \ \ \ \ (2)
从理论上说,我们应该从x中减去n,只分析s的部分。但是由于实际情况下很难从x中分离出sn,因此只能将x当作s进行后续计算。这在P_s>>P_n的情况下误差不会很大,即要求x的信噪比不是很低。因此,
P_s = \frac{1}{N*\sum_{k=1}^{k=N}|s(k)|^2}\ \ \ \ \ (3)
根据帕塞瓦尔定理,s的时域能量和频域能量相等(点数问题似乎需要考虑一下),因此将x变换到频域计算\frac{1}{N}*\sum |X(f)|^2的结果应该与(3)式相同。可知,将s看作确定信号时x的SNR计算公式为:
SNR = 10*log_{10}\frac{\sum|x(k)|^2}{N*P_n} \ \ \ \ (4)
这里需要有两点说明。

  • 一是有些地方说P_s可以用\frac{max(|s(k)|)^2}{N}计算,我觉得这种方法只是对(4)式的一种简化;
  • 二是根据x=s+n,可知x^2=(s+n)^2 \neq s^2+n^2,也就是说x、s、n三者不能在能量、功率层面出现任何的加减运算。加减运算只可能出现在幅度层面。而由于噪声n的幅度是不可知的(因为是随机变量所以不可分离),因此在本文所提及的情况中关于加减的想法要坚决摒除。

3.2 将s看作随机信号

在将s看作随机信号的时候,我们需要用某个对随机信号不变的量来估计SNR,因为只有这样才能使估计结果对推断之后的SNR有作用。对于宽平稳随机过程x,其相关函数R_{xx}只与平移量有关,而功率谱S(f)作为R_{xx}的Fourier变换,亦是相对固定的量(是么)。因此我们可以首先对随机信号x同样由于无法分离sn,只能分析x进行功率谱估计,得到S(f),之后对S(f)求均值得到平均功率E[S(f)]。若对x进行的是M点的功率谱估计,那么
P_s = \frac{1}{M} * S_s(f) \ \ \ \ (5)

这里要注意单双边的问题。对于随机信号x,每一个x(k)均是随机变量,x的FFT不存在,因此无法利用求FFT的方法来计算功率谱,只能通过其他方法来估计功率谱。 功率谱估计的方法很多,最基本的方法是求得相关函数R_{xx}后对其进行FFT,另外,ARMA谱估计等现代谱估计方法也是可以的,而且会得到分辨率更高的功率谱。

对于宽平稳随机过程,由于相关函数R_{xx}只与平移量有关,因此二阶矩(相当于平移量是0)也是不变的量,所以P_s也可以通过
P_s =\frac{1}{N}*\sum(|s(k)|^2 \ \ \ \ (6)
求得。综上可知,将s看作随机信号时,
SNR =10*log_{10}\frac{\sum S_s(f)}{M*P_n} =10*log_{10}\frac{\sum |x(k)|^2}{N*P_n} \ \ \ \ (7)

3.3 P_n

对Pn的估计前面已经提到过,n是一定要当作随机变量看待的。因此,根据1(2)中的分析,P_n同样存在两种估计方法:
Pn =1/M*sum(Sn(f)) \ \ \ \ (8) \\ =1/N*sum(abs(n(k))^2) \ \ \ \ (9)

需要注意的是,对P_n的估计方法要和P_s的估计方法对应,比如P_s采用(5)式,那么P_n要相应地采用(8)式;P_s采用(6)式,P_n要相应地采用(9)式。

3.4 综上所述,对含噪信号SNR估计方法如下:

对于确定性信号s
SNR = 10*log_{10} \frac{\sum(|x(k)|^2)}{\sum(|n(k)|^2)} \ \ \ \ (10)
对于随机信号s,
SNR =10*log_{10} \frac{\sum(S_s(f))}{\sum(S_s(f))} = 10*log_{10}\frac {\sum|x(k)|^2}{\sum |n(k)|^2 } \ \ \ \ (11)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。