锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

微弱语音信号提取

时间:2023-02-11 09:30:00 re70电阻功率

前言

如果收音机收到的声音不清楚,一般人会采取移动到室外等信号好位置的方法,用更好的天线等措施来提高信号质量。

信息传输过程 信息源->调制->放大射频功率->发射天线->空中传输->接收天线->放大射频滤波->解调->音频功放->扬声器

我们无法改变左边的部分。我们不能使广播电台增加发射功率,也不能使用更好的调制方法。

为了改善空气传输环节,必须移动接收器的位置,使接收器靠近电台或移除中间的障碍物,这有点不现实;改善接收天线将难以携带;改进射频滤波放大受电阻热噪声的限制。目前,商用收音机的改进空间很小;音频功率放大器和扬声器环节的改进几乎毫无意义,输出信噪比低的声音无法显著提高。语音增强算法只能在音频功放前改进解调链接或插入。而且要求回声较弱,否则会影响提取。

频率追踪

滤波

滤波示意图
S N R = S N = S B W ? 噪 声 功 率 谱 密 度 SNR=\frac{S}{N}=\frac{S}{BW*噪声功率谱密度} SNR=NS=BW?S

动态滤波器只能通过当前瞬时频率(红色)附近的频带(黄色)而不是整个带宽(蓝色)来设置。当噪声的功率谱密度接近常数时,通过降低带宽来降低噪声功率,从而提高信噪声比。

通过足够长的傅里叶变换,可以提取一个比噪音小的正弦信号。

改进傅里叶变换

但语音信号的瞬时频率在不断变化,不能长期使用FFT进行提取峰值(没有解调的调频信号频率实在变化太快了,这种方法行不通)
$ F ( ω ) = F [ f ( t ) ] = ∫ ? ∞ ∞ f ( t ) e ? j ω t d t F(\omega)=\mathcal{F}[f(t) = \int_{-\infty}^{\infty}f(t)e^{-j\omega t}dt F(ω)=F[f(t)]=f(t)ejωtdt
F ( ω , ω ′ , . . . , ω ( n ) ) = ∫ − ∞ ∞ f ( t ) e − j [ 1 2 ω ′ t 2 + . . . + 1 ( n + 1 ) ! ω ( n ) t n + 1 ] e − j w t d t F(\omega, \omega',..., \omega^{(n)}) = \int_{-\infty}^{\infty}f(t)e^{-j[\frac{1}{2}\omega't^2+...+\frac{1}{(n+1)!}\omega^{(n)}t^{n+1}]}e^{-jwt}dt F(ω,ω,...,ω(n))=f(t)ej[21ωt2+...+(n+1)!1ω(n)tn+1]ejwtdt

使用频率变化检测,把指数上的t的高次项先乘到数据里去,可以使用FFT来加速计算。另外我还看到了WVD(Wigner-Ville Distibution)变换,加上Hough变换应该也可以实现相似效果,但我没有深入测试。

跟踪频率变化要用到卡尔曼滤波,这里不介绍了。

信号检测

当没有跟踪信号时,需要检测新信号,但这些信号通常很微弱,如何来描述疑似信号为真实信号的可能性。假设只有噪声而没有信号下,出现的这种情况的概率来描述疑似信号的可能性,概率(称为p值)越小该信号为真实信号的可能性越高,概率小到一定程度(临界值称为α值),误报发生频率足够低了(每分钟只有几次)就可以判定真实信号,影响较小。类似于假设检验。

H0:无信号
H1:有信号
拒绝域: P ( S N R ≥ x ∣ 无 信 号 ) < α P(SNR\geq x|无信号) < \alpha P(SNRx)<α
接受域: P ( S N R ≥ x ∣ 无 信 号 ) ≥ α P(SNR\geq x|无信号) \geq \alpha P(SNRx)α

推导噪声分布

我们都知道高斯白噪声的每一时刻的值都服从高斯分布,两个不同时刻是不相关的,功率谱密度为常数。但是在实际计算时都为离散且有限,这里推导出这种情况下的幅度谱的每个分量实部和虚部都服从高斯分布,功率谱服从n=2的卡方分布。
x [ n ] ∼ N ( 0 , σ 2 ) x[n] \sim N(0, \sigma^2) x[n]N(0,σ2)
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − 2 π j k n / N = ∑ n = 0 N − 1 x [ n ] c o s ( 2 π k n / N ) − j ∑ n = 0 N − 1 x [ n ] s i n ( 2 π k n / N ) X[k]=\sum_{n=0}^{N-1}{x[n]e^{-2\pi jkn/N}} = \sum_{n=0}^{N-1}{x[n]cos(2\pi kn/N)}-j\sum_{n=0}^{N-1}{x[n]sin(2\pi kn/N)} X[k]=n=0N1x[n]e2πjkn/N=n=0N1x[n]cos(2πkn/N)jn=0N1x[n]sin(2πkn/N)
∼ N ( 0 , σ 2 ∑ n = 0 N − 1 c o s 2 ( 2 π k n / N ) ) − j N ( 0 , σ 2 ∑ n = 0 N − 1 s i n 2 ( 2 π k n / N ) ) \sim N(0, \sigma^2\sum_{n=0}^{N-1}{cos^2(2\pi kn/N)}) - jN(0, \sigma^2\sum_{n=0}^{N-1}{sin^2(2\pi kn/N)}) N(0,σ2n=0N1cos2(2πkn/N))jN(0,σ2n=0N1sin2(2πkn/N))
= N ( 0 , N 2 σ 2 ) − j N ( 0 , N 2 σ 2 ) = N(0, \frac{N}{2}\sigma^2) - jN(0, \frac{N}{2}\sigma^2) =N(0,2Nσ2)jN(0,2Nσ2)
最后一步,假设N是偶数,sin项也可以按照相同步骤计算。
∑ n = 0 N − 1 c o s 2 ( 2 π k n / N ) = ∑ n = 0 N / 2 − 1 c o s 2 ( 2 π k n / N ) + s i n 2 ( 2 π k n / N ) = N 2 \sum_{n=0}^{N-1}cos^2(2\pi kn/N)=\sum_{n=0}^{N/2-1}{cos^2(2\pi kn/N)+sin^2(2\pi kn/N)}=\frac{N}{2} n=0N1cos2(2πkn/N)=n=0N/21cos2(2πkn/N)+sin2(2πkn/N)=2N
功率谱密度 P [ k ] = ∣ X [ k ] ∣ 2 ∼ X R e 2 + X I m 2 = N 2 σ χ 2 ( 2 ) P[k]=\left| X[k] \right|^{2} \sim X_{Re}^2+X_{Im}^2=\sqrt{\frac{N}{2}}\sigma\chi^2(2) P[k]=X[k]2XRe2+XIm2=2N σχ2(2),注意:还没有判断实部和虚部是否相关,结论不可靠。
虽然没有判断每个变量是否相关,还假设了N是偶数,但这些结论已经够用了。
P(SNR\geq x|无信号)可以使用卡方分布的生存函数(python里用scipy.stats.chi2.sf)来计算

检测方法

数据进行频域变换后,提取较强的峰值,以及该峰值的同族谐波。p值足够小了就能列入正式追踪。不同次谐波的信号联合起来计算p值,能保持误报率不变条件下提高检测灵敏度。目前还没有实践过,做好了再来说吧。
Copyright © 2022 徐瑞骏,本文使用知识共享 署名-相同方式共享 4.0 国际(CC BY-SA 4.0)协议授权

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章