webrtc的降噪模块主要分为3个部分:模块初始化、噪声分析(analysis)、噪声抑制。模块初始化是在最开始为降噪模块设置参数以及初始化一些状态的值。噪声分析模块,主要进行噪声估计、speech/noise概率计算等。噪声抑制模块则根据前面计算的语音概率和噪声使用维纳滤波来抑制噪声。下面首先对一些相关公式进行介绍,再对整个算法流程进行分析。
(目前只完成了相关词算法分析,代码流程分析待更新。疏忽错误在所难免,如有劳烦指出)
假设麦克风接收到的信号为 y ( t ) y(t) y(t),语音信号为为 x ( t ) x(t) x(t),噪声信号为 n ( t ) n(t) n(t),则 y ( t ) = x ( t ) + n ( t ) ( 1 − 1 ) y(t)=x(t)+n(t)\ \ \ (1-1) y(t)=x(t)+n(t) (1−1),在频域的表达则是 Y ( ω ) = X ( ω ) + N ( ω ) ( 1 − 2 ) Y(\omega)=X(\omega)+N(\omega)\ \ \ (1-2) Y(ω)=X(ω)+N(ω) (1−2),噪声抑制即希望从 y ( t ) y(t) y(t)中尽可能恢复 x ( t ) x(t) x(t),以提升纯净度和可懂度。整体过程如下:对于接收到的一帧含噪语音,进行初始噪声估计,定义语音概率函数,然后根据噪声计算每一帧的若干特征;根据多个特征(features)计算speech probability,然后对speech probability进行动态加权(利用特征和阈值参数(threshold parameters));根据已经计算出的基于features的speech probability 优化语音概率函数(speech probability function);然后使用优化后的函数来更新每帧的初始噪声估计。
信噪比(SNR)计算
信噪比的计算主要分为先验信噪比(priori SNR)和后验信噪比(posteriori SNR)计算,这两个信噪比会被用与计算似然比(likelihood ratio,LRT)。
后验信噪比:用信号功率与噪声功率之比: σ k ( m ) = ∣ Y k ( m ) ∣ 2 ⟨ ∣ N k ( m ) ∣ 2 ⟩ ( 1 − 3 ) \sigma_k(m)=\displaystyle{\frac{|Y_k(m)|^2}{\langle |N_k(m)|^2\rangle}}\ \ \ (1-3) σk(m)=⟨∣Nk(m)∣2⟩∣Yk(m)∣2 (1−3), k k k是频率的index, m m m为时间的,尖括号指的是求统计平均,从分子可以看出这是一个瞬态量
先验信噪比:语音信号和噪声信号功率之比: ρ k ( m ) = ⟨ ∣ X k ( m ) ∣ 2 ⟩ ⟨ ∣ N k ( m ) ∣ 2 ⟩ ( 1 − 4 ) \rho_k(m)=\displaystyle{\frac{\langle|X_k(m)|^2\rangle}{\langle|N_k(m)|^2\rangle}}\ \ \ (1-4) ρk(m)=⟨∣Nk(m)∣2⟩⟨∣Xk(m)∣2⟩ (1−4)
在webrtc中,为了节约计算量,不使用平方而使用幅度值,前面两个式子变为 σ k ( m ) ≈ ∣ Y k ( m ) ∣ ⟨ ∣ N k ( m ) ∣ ⟩ ( 1 − 5 ) \sigma_k(m)\displaystyle{\approx \frac{|Y_k(m)|}{\langle|N_k(m)|\rangle}}\ \ \ (1-5) σk(m)≈⟨∣Nk(m)∣⟩∣Yk(m)∣ (1−5)和 ρ k ( m ) ≈ ⟨ ∣ X k ( m ) ∣ ⟩ ⟨ ∣ N k ( m ) ∣ ⟩ ( 1 − 6 ) \rho_k(m)\displaystyle{\approx \frac{\langle|X_k(m)|\rangle}{\langle|N_k(m)|\rangle}}\ \ \ (1-6) ρk(m)≈⟨∣Nk(m)∣⟩⟨∣Xk(m)∣⟩ (1−6)
由于纯净语音信号是未知的,所以webrtc中使用过去帧的先验SNR和当前帧的SNR进行平滑来得到先验信噪比: ρ k ( m ) = γ d d H ( k , m − 1 ) ∣ Y k ( m − 1 ) ∣ ⟨ ∣ N k ( m − 1 ) ∣ ⟩ + ( 1 − γ d d ) max ( σ k ( m ) − 1.0 ) ( 1 − 7 ) \displaystyle{\rho_k(m)=\gamma_{dd}H(k,m-1)\frac{|Y_k(m-1)|}{\langle|N_k(m-1)|\rangle}+(1-\gamma_{dd})\max(\sigma_k(m)-1.0)}\ \ \ (1-7) ρk(m)=γddH(k,m−1)⟨∣Nk(m−1)∣⟩∣Yk(m−1)∣+(1−γdd)max(σk(m)−1.0) (1−7)
其中 H ( k , m − 1 ) H(k,m-1) H(k,m−1)是前一帧的维纳滤波器的系数, H H H和 Y Y Y相乘实际上就是噪声抑制,也即 X k ( m − 1 ) ≈ H ( k , m − 1 ) Y ( m − 1 ) X_k(m-1)\approx H(k,m-1)Y(m-1) Xk(m−1)≈H(k,m−1)Y(m−1);而 σ k ( m ) \sigma_k(m) σk(m)是对当前帧后验信噪比的一个粗估计,因为 σ k ( m ) − 1.0 = ∣ X k ( m ) + N k ( m ) ∣ ⟨ ∣ N k ( m ) ∣ ⟩ − 1 ≈ ∣ X k ( m ) ∣ ⟨ ∣ N k ( m ) ∣ ⟩ = ρ k ( m ) \displaystyle{\sigma_k(m)-1.0=\frac{|X_k(m)+N_k(m)|}{\langle|N_k(m)|\rangle}-1\approx\frac{|X_k(m)|}{\langle|N_k(m)|\rangle}=\rho_k(m)} σk(m)−1.0=⟨∣Nk(m)∣⟩∣Xk(m)+Nk(m)∣−1≈⟨∣Nk(m)∣⟩∣Xk(m)∣=ρk(m)。因此 ( 1 − 7 ) (1-7) (1−7)实际上就是前一帧的先验信噪比估计与当前帧的先验信噪比估计的加权求和, γ d d \gamma_{dd} γdd(Decision Directed,DD)是一个平滑因子,其值越大表示平滑力度越大,但是信噪比更新就越慢、延迟越高。在webrtc中,这个值被设置为0.98。
webrtc相关语音特征
webrtc在其代码中主要使用了频谱平坦度(spectral flatness)、似然比均值(LRT mean value)、噪声模板相似度(spectral template difference)作为特征,下对特征进行介绍:
LRT 均值
时间平滑后的似然比的均值时衡量语音、噪声状态的可靠指标,其计算公式为:
F 1 = log ( ∏ k Δ ~ ( m ) 1 / N ) = 1 N ∑ k = 1 N log ( Δ ~ k ( m ) ) ( 1 − 8 ) F_1=\displaystyle{\log{(\prod_k\tilde{\Delta}(m)^{1/N})}=\frac{1}{N}\sum_{k=1}^{N}\log{ (\tilde{\Delta}_k (m))} }\ \ \ (1-8) F1=log(k∏Δ~(m)1/N)=N1k=1∑Nlog(Δ~k(m)) (1−8)
其中 Δ \Delta Δ将在后面speech probability时介绍,在使用LRT均值特征时,通常使用一个tanh相关函数作为映射函数: M ( z ) = 0.5 ∗ ( tanh ( w 1 z 1 ) + 0.5 ) M(z)=0.5*(\tanh {(w_1z_1)}+0.5) M(z)=0.5∗(tanh(w1z1)+0.5),其中 F 1 F_1 F1即为LRT均值特征, w 1 w_1 w1是一个用于控制从0到1映射的平滑性的参数,阈值参数 T 1 T_1 T1需要根据其他参数设定。
频谱平坦度
通常认为语音比噪声有着更多的谐波,其表现就是语音信号在基频和谐波除会有许多能量峰值,而噪声信号的频谱则相对平坦,因此频谱平坦度可以用来区分语音和噪声。计算此特征时,语音被划分为若干个子频带,每个频带的频点数量可以不同。频谱平坦度的计算公式为:
F 2 = F l a t n e s s = ∏ k ∣ Y k ∣ 1 / N 1 N ∑ k ∣ Y k ∣ = ∏ k = 0 N − 1 ∣ Y k ( m ) ∣ N 1 N ∑ k = 0 N − 1 ∣ Y k ( m ) ∣ = e 1 N ∑ k = 0 N − 1 ln Y k ( m ) 1 N ∑ k = 0 N − 1 ∣ Y k ( m ) ∣ ( 1 − 9 ) \displaystyle{F_2=Flatness=\frac{\prod_k|Y_k|^{1/N}}{\frac{1}{N}\sum_k|Y_k|}=\frac{\sqrt[N]{\prod_{k=0}^{N-1}|Y_k(m)|}}{\frac{1}{N}\sum_{k=0}^{N-1}|Y_k(m)|}=\frac{e^{\frac{1}{N}\sum_{k=0}^{N-1}\ln Y_k(m)}}{\frac{1}{N}\sum_{k=0}^{N-1}|Y_k(m)|}}\ \ \ (1-9) F2=Flatness=N1∑k∣Yk∣∏k∣Yk∣1/N=N1∑k=0N−1∣Yk(m)∣N∏k=0N−1∣Yk(m)∣=N1∑k=0N−1∣Yk(m)∣eN1∑k=0N−1lnYk(m) (1−9)
其中 N N N为子带中的频点数量。噪声的 F 2 F_2 F2比较大且变化幅度较小,语音的 F 2 F_2 F2比较小且变化幅度较大
频谱模板相似度(差异)
特征含义:定义一个“噪声模板”,然后求输入频谱与该模板的差异。如果差异较小,说明输入帧接近模板,也说明输入是噪声的概率较大。此特征具有比频谱平坦度更强的泛化性:也即在某些情况下,频谱模板相似度可以简化为对频谱平坦度的测量。
平稳噪声的频谱比语音的频谱更加平坦,因此我们认为噪声谱的包络倾向于保持不变。频谱模板通过频谱中极有可能是噪声或者语音停顿的区间段来确定,并且只在语音概率小于阈值的时候对噪声进行更新。这种模板方法也可以用来解决非平稳噪声(通过产生一些非平稳噪声的模板)。在webrtc中模板相似度定义为:
J = ∑ k ∣ Y k ( m ) − N k ( m ) ∣ 2 = ∑ k ∣ Y k ( m ) − [ α ⋅ a k ( m ) + μ ] ∣ 2 ( 1 − 10 ) J=\displaystyle{\sum_k |Y_k(m)-N_k(m)|^2=\sum_k |Y_k(m)-[\alpha \cdot a_k(m)+\mu]|^2}\ \ \ (1-10) J=k∑∣Yk(m)−Nk(m)∣2=k∑∣Yk(m)−[α⋅ak(m)+μ]∣2 (1−10)
其中 Y Y Y为输入频谱, a k ( m ) a_k(m) ak(m)为噪声模板频谱, α \alpha α和 μ \mu μ是控制振幅和线性偏置的参数,归一化的模板相似度定义如下:
F 3 = J 1 W ∑ m = 0 W ∑ k ∣ Y k ( m ) ∣ 2 = ∑ k ∣ Y k ( m ) − [ α ⋅ a k ( m ) + μ ] ∣ 2 1 W ∑ m = 0 W ∑ k ∣ Y k ( m ) ∣ 2 ( 1 − 11 ) F_3=\displaystyle{\frac{J}{\frac{1}{W} \displaystyle{\sum_{m=0}^W \sum_k}|Y_k(m)|^2 }}=\displaystyle{\frac{\displaystyle{\sum_k |Y_k(m)-[\alpha \cdot a_k(m)+\mu]|^2}}{\frac{1}{W}\displaystyle{\sum_{m=0}^W\sum_k}|Y_k(m)|^2}}\ \ \ (1-11) F3=W1m=0∑Wk∑∣Yk(m)∣2J=W1m=0∑Wk∑∣Yk(m)∣2k∑∣Yk(m)−[α⋅ak(m)+μ]∣2 (1−11)
即对所有频率以及一定时间窗口范围内求平均,也可以给不同频带设置不同的权重:
J = W k ∑ k ∣ Y k ( m ) − [ α ⋅ a k ( m ) + μ ] ∣ 2 ( 1 − 12 ) J=\displaystyle{W_k \sum_k |Y_k(m)-[\alpha \cdot a_k(m)+\mu]|^2}\ \ \ (1-12) J=Wkk∑∣Yk(m)−[α⋅ak(m)+μ]∣2 (1−12)
可以利用上述几个特征定义一个speech/noise概率,也被称为“基于特征的语音概率”:
q m ( H ∣ F 1 , F 2 , F 3 ) = q m = γ q q m − 1 + ( 1 − γ q ) [ τ 1 M 1 ( F 1 − T 1 , w 1 ) + τ 2 M 2 ( F 2 − T 2 , w 2 ) + τ 3 M 3 ( F 3 − T 3 , w 3 ) ] ( 1 − 13 ) q_m(H|F_1,F_2,F_3)=q_m=\gamma_q q_{m-1}+(1-\gamma_q)[\tau_1M_1(F_1-T_1,w_1)+\tau_2M_2(F_2-T_2,w_2)+\tau_3M_3(F_3-T_3,w_3)]\\ (1-13) qm(H∣F1,F2,F3)=qm=γqqm−1+(1−γq)[τ1M1(F1−T1,w1)+τ2M2(F2−T2,w2)+τ3M3(F3−T3,w3)](1−13)
H H H表示speeech/noise状态, F F F是被测特征, T T T为特征阈值, w w w代表映射函数的形状、宽度特征, M M M为映射函数如tanh函数等,其作用是根据测量出的特征以及阈值和宽度参数,将每一帧划分为语音(M接近1)或噪声(M接近0)。其作用是 τ \tau τ为权重以使结果更加稳定。本算法中的映射函数取为 M ( z ) = 0.5 ∗ ( tanh ( w z ) + 0.5 ) M(z)=0.5*(\tanh{(wz)+0.5}) M(z)=0.5∗(tanh(wz)+0.5)
首先定义语音状态为 H k , m = H 1 k , m H^{k,m}=H_1^{k,m} Hk,m=H1k,m,噪声状态为 H k , m = H 0 k , m H^{k,m}=H_0^{k,m} Hk,m=H0k,m,则speech/noise 概率为: P ( H k , m ∣ Y k ( m ) , { F } ) P(H^{k,m}|Y_k(m),\{F\}) P(Hk,m∣Yk(m),{F}),也即概率取决于输入频谱以及前面提到的几个特征。根据贝叶斯准则有以下常见公式:
P ( A ∣ B ) = P ( A , B ) P ( B ) P(A|B)=\displaystyle{\frac{P(A,B)}{P(B)}} P(A∣B)=P(B)P(A,B)以及衍生出的 P ( A ∣ B , C ) = P ( A , B ∣ C ) P ( B ∣ C ) P(A|B,C)=\displaystyle{\frac{P(A,B|C)}{P(B|C)}} P(A∣B,C)=P(B∣C)P(A,B∣C)
P ( B 1 ∣ A ) = P ( A ∣ B 1 ) P ( B 1 ) P ( A ∣ B 1 ) P ( B 1 ) + P ( A ∣ B 2 ) P ( B 2 ) P(B_1|A)=\displaystyle{\frac{P(A|B_1)P(B_1)}{P(A|B_1)P(B_1)+P(A|B_2)P(B_2)}} P(B1∣A)=P(A∣B1)P(B1)+P(A∣B2)P(B2)P(A∣B1)P(B1),其中 B 1 B_1 B1和 B 2 B_2 B2是对立事件,则标准化的语音概率:
P ( H 1 ∣ Y k ( m ) , { F } ) = P ( Y k ( m ) , { F } ∣ H 1 ) P ( H 1 ) P ( Y k ( m ) , { F } ∣ H 1 ) P ( H 1 ) + P ( Y k ( m ) , { F } ∣ H 0 ) P ( H 0 ) P(H_1|Y_k(m),\{F\})=\displaystyle{\frac{P(Y_k(m),\{F\}|H_1)P(H_1)}{P(Y_k(m),\{F\}|H_1)P(H_1)+P(Y_k(m),\{F\}|H_0)P(H_0)}} P(H1∣Yk(m),{F})=P(Yk(m),{F}∣H1)P(H1)+P(Yk(m),{F}∣H0)P(H0)P(Yk(m),{F}∣H1)P(H1)
= P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } ∣ H 1 ) P ( H 1 ) P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } ∣ H 1 ) P ( H 1 ) + P ( Y k ( m ) ∣ { F } , H 0 ) P ( { F } ∣ H 0 ) P ( H 0 ) =\displaystyle{\frac{P(Y_k(m)|\{F\},H_1)P(\{F\}|H_1)P(H_1)}{P(Y_k(m)|\{F\},H_1)P(\{F\}|H_1)P(H_1)+P(Y_k(m)|\{F\},H_0)P(\{F\}|H_0)P(H_0)}} =P(Yk(m)∣{F},H1)P({F}∣H1)P(H1)+P(Yk(m)∣{F},H0)P({F}∣H0)P(H0)P(Yk(m)∣{F},H1)P({F}∣H1)P(H1)
= P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } , H 1 ) P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } , H 1 ) + P ( Y k ( m ) ∣ { F } , H 0 ) P ( { F } , H 0 ) =\displaystyle{\frac{P(Y_k(m)|\{F\},H_1)P(\{F\},H_1)}{P(Y_k(m)|\{F\},H_1)P(\{F\},H_1)+P(Y_k(m)|\{F\},H_0)P(\{F\},H_0)}} =P(Yk(m)∣{F},H1)P({F},H1)+P(Yk(m)∣{F},H0)P({F},H0)P(Yk(m)∣{F},H1)P({F},H1)
= P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } , H 1 ) P ( { F } ) P ( Y k ( m ) ∣ { F } , H 1 ) P ( { F } , H 1 ) P ( { F } ) + P ( Y k ( m ) ∣ { F } , H 0 ) P ( { F } , H 0 ) P ( { F } ) =\displaystyle{\frac{P(Y_k(m)|\{F\},H_1) \frac{P(\{F\},H_1)}{P(\{F\})} }{P(Y_k(m)|\{F\},H_1)\frac{P(\{F\},H_1)}{P(\{F\})}+P(Y_k(m)|\{F\},H_0)\frac{P(\{F\},H_0)}{P(\{F\})}}} =P(Yk(m)∣{F},H1)P({F})P({F},H1)+P(Yk(m)∣{F},H0)P({F})P({F},H0)P(Yk(m)∣{F},H1)P({F})P({F},H1)
= P ( Y k ( m ) ∣ { F } , H 1 ) q k , m ( H 1 ∣ F ) P ( Y k ( m ) ∣ { F } , H 1 ) q k , m ( H 1 ∣ F ) + P ( Y k ( m ) ∣ { F } , H 0 ) q k , m ( H 0 ∣ F ) ( 1 − 14 ) =\displaystyle{\frac{P(Y_k(m)|\{F\},H_1) q_{k,m}(H_1|F) }{P(Y_k(m)|\{F\},H_1)q_{k,m}(H_1|F)+P(Y_k(m)|\{F\},H_0)q_{k,m}(H_0|F)}}\ \ \ (1-14) =P(Yk(m)∣{F},H1)qk,m(H1∣F)+P(Yk(m)∣{F},H0)qk,m(H0∣F)P(Yk(m)∣{F},H1)qk,m(H1∣F) (1−14)
其中 q k , m ( H ∣ F ) = P ( { F } , H ) P ( { F } ) = P ( H ∣ { F } ) q_{k,m}(H|F)=\displaystyle{\frac{P(\{F\},H)}{P(\{F\})}=P(H|\{F\})} qk,m(H∣F)=P({F})P({F},H)=P(H∣{F})为前面提到的"基于特征的语音概率",记 q k , m ( H 1 ∣ F ) = P ( H 1 ∣ { F } ) = q q_{k,m}(H_1|F)=\displaystyle{P(H_1|\{F\})=q} qk,m(H1∣F)=P(H1∣{F})=q以及 q k , m ( H 0 ∣ F ) = P ( H 0 ∣ { F } ) = 1 − q q_{k,m}(H_0|F)=\displaystyle{P(H_0|\{F\})=1-q} qk,m(H0∣F)=P(H0∣{F})=1−q,则式 ( 1 − 14 ) (1-14) (1−14)变为:
P ( H 1 ∣ Y k ( m ) , { F } ) = q Δ k q Δ k + 1 − q ( 1 − 15 ) P(H_1|Y_k(m),\{F\})=\displaystyle{\frac{q\Delta _k}{q\Delta _k+1-q}}\ \ \ (1-15) P(H1∣Yk(m),{F})=qΔk+1−qqΔk (1−15)
其中似然比(LR) Δ k \Delta _k Δk为: Δ k = P ( Y k ( m ) ∣ { F } , H 1 ) P ( Y k ( m ) ∣ { F } , H 0 ) ( 1 − 16 ) \Delta _k=\displaystyle{\frac{P(Y_k(m)|\{F\},H_1)}{P(Y_k(m)|\{F\},H_0)}}\ \ \ \ (1-16) Δk=P(Yk(m)∣{F},H0)P(Yk(m)∣{F},H1) (1−16),此即为在前面LRT均值部分提到的量。 Δ k \Delta_k Δk表达式中的 P ( Y k ( m ) ∣ H 0 , 1 , { F } ) P(Y_k(m)|H_{0,1},\{F\}) P(Yk(m)∣H0,1,{F})是通过线性状态模型和针对语音和噪声频谱系数的高斯概率密度函数(PDF)确定的。语音状态下有 Y k ( m ) = X k ( m ) + N k ( m ) , H = H 1 Y_k(m)=X_k(m)+N_k(m),H=H_1 Yk(m)=Xk(m)+Nk(m),H=H1,噪声状态下有 Y k ( m ) = N k ( m ) , H = H 0 Y_k(m)=N_k(m),H=H_0 Yk(m)=Nk(m),H=H0。若概率密度函数使用复数系数 { X k ( m ) , N k ( m ) } \{X_k(m),N_k(m)\} {Xk(m),Nk(m)},为简便起见省略表示为 { X k , N k } \{X_k,N_k\} {Xk,Nk},则 P ( Y k ( m ) ∣ H , { F } ) P(Y_k(m)|H,\{F\}) P(Yk(m)∣H,{F})表示为:
P ( Y k ( m ) ∣ H 0 , { F } ) = P ( Y k ( m ) ∣ H 0 ) ∝ 1 ⟨ ∣ N k ∣ 2 ⟩ exp ( − ∣ Y k ∣ 2 ⟨ ∣ N k ∣ 2 ⟩ ) ( 1 − 17 ) P(Y_k(m)|H_0,\{F\})=P(Y_k(m)|H_0)\propto \displaystyle{\frac{1}{\langle|N_k|^2\rangle}\exp (-\frac{|Y_k|^2}{\langle|N_k|^2\rangle})}\ \ \ (1-17) P(Yk(m)∣H0,{F})=P(Yk(m)∣H0)∝⟨∣Nk∣2⟩1exp(−⟨∣Nk∣2⟩∣Yk∣2) (1−17)
P ( Y k ( m ) ∣ H 1 , { F } ) = P ( Y k ( m ) ∣ H 1 ) ∝ 1 ⟨ ∣ N k ∣ 2 ⟩ + ⟨ ∣ X k ∣ 2 ⟩ exp ( − ∣ Y k ∣ 2 ⟨ ∣ N k ∣ 2 ⟩ + ⟨ ∣ X k ∣ 2 ⟩ ) ( 1 − 18 ) P(Y_k(m)|H_1,\{F\})=P(Y_k(m)|H_1)\propto \displaystyle{\frac{1}{\langle|N_k|^2\rangle+\langle|X_k|^2\rangle}\exp (-\frac{|Y_k|^2}{\langle|N_k|^2\rangle+\langle|X_k|^2\rangle})}\ \ \ (1-18) P(Yk(m)∣H1,{F})=P(Yk(m)∣H1)∝⟨∣Nk∣2⟩+⟨∣Xk∣2⟩1exp(−⟨∣Nk∣2⟩+⟨∣Xk∣2⟩∣Yk∣2) (1−18)
则似然比为:
Δ k = P ( Y k ( m ) ∣ H 1 ) P ( Y k ( m ) ∣ H 0 ) = ⟨ ∣ N k ∣ 2 ⟩ ⟨ ∣ N k ∣ 2 ⟩ + ⟨ ∣ X k ∣ 2 ⟩ exp ( ∣ Y k ∣ 2 ⟨ ∣ N k ∣ 2 ⟩ − ∣ Y k ∣ 2 ⟨ ∣ N k ∣ 2 ⟩ + ⟨ ∣ X k ∣ 2 ⟩ ) \Delta_k=\displaystyle{\frac{P(Y_k(m)|H_1)}{P(Y_k(m)|H_0)}=\frac{\langle|N_k|^2\rangle}{\langle|N_k|^2\rangle+\langle|X_k|^2\rangle}\exp (\frac{|Y_k|^2}{\langle|N_k|^2\rangle}-\frac{|Y_k|^2}{\langle|N_k|^2\rangle+\langle|X_k|^2\rangle})} Δk=P(Yk(m)∣H0)P(Yk(m)∣H1)=⟨∣Nk∣2⟩+⟨∣Xk∣2⟩⟨∣Nk∣2⟩exp(⟨∣Nk∣2⟩∣Yk∣2−⟨∣Nk∣2⟩+⟨∣Xk∣2⟩∣Yk∣2)
= 1 1 + ρ k ( m ) exp ( σ k ( m ) − σ k ( m ) 1 + ρ k ( m ) ) = 1 1 + ρ k ( m ) exp ( σ k ( m ) ρ k ( m ) 1 + ρ k ( m ) ) ( 1 − 19 ) =\displaystyle{\frac{1}{1+\rho_k(m)}\exp (\sigma_k(m)-\frac{\sigma_k(m)}{1+\rho_k(m)})=\frac{1}{1+\rho_k(m)}\exp (\frac{\sigma_k(m)\rho_k(m)}{1+\rho_k(m)})}\ \ \ (1-19) =1+ρk(m)1exp(σk(m)−1+ρk(m)σk(m))=1+ρk(m)1exp(1+ρk(m)σk(m)ρk(m)) (1−19)
其中 σ k ( m ) \sigma_k(m) σk(m)和 ρ k ( m ) \rho_k(m) ρk(m)即前面提到的后验和先验信噪比。帧与帧之间的频变会使 Δ k \Delta_k Δk有比较大的波动,因而使用时间平滑处理后的似然银子: log ( Δ ~ k ( m ) ) = γ l r t log ( Δ ~ k ( m − 1 ) ) + ( 1 − γ l r t ) log ( Δ k ( m ) ) ( 1 − 20 ) \log {(\tilde{\Delta}_k(m))}=\gamma_{lrt}\log {(\tilde{\Delta}_k(m-1))}+(1-\gamma_{lrt})\log{(\Delta_k(m))}\ \ \ (1-20) log(Δ~k(m))=γlrtlog(Δ~k(m−1))+(1−γlrt)log(Δk(m)) (1−20)
对上式求集合平均即 ( 1 − 8 ) (1-8) (1−8)描述的似然比特征。
一旦speech/noise probability计算出来,就可以根据其对噪声进行平滑更新,更新方式如下:
∣ N ^ k ( m ) ∣ = γ n ∣ N ^ k ( m − 1 ) ∣ + ( 1 − γ n ) [ P ( H 1 ∣ Y k ( m ) ) N ^ k ( m − 1 ) + P ( H 0 ∣ Y k ( m ) ) Y k ( m ) ] ( 1 − 21 ) |\hat{N}_k(m)|=\gamma_n |\hat{N}_k(m-1)|+(1-\gamma_n)[P(H_1|Y_k(m))\hat{N}_k(m-1)+P(H_0|Y_k(m))Y_k(m)]\ \ \ (1-21) ∣N^k(m)∣=γn∣N^k(m−1)∣+(1−γn)[P(H1∣Yk(m))N^k(m−1)+P(H0∣Yk(m))Yk(m)] (1−21)
其中 N ^ k ( m − 1 ) \hat{N}_k(m-1) N^k(m−1)是上一帧的估计噪声, P ( H 0 , 1 ∣ Y k ( m ) ) P(H_{0,1}|Y_k(m)) P(H0,1∣Yk(m))等于 P ( H 0 , 1 ∣ Y k ( m ) , { F } ) P(H_{0,1}|Y_k(m),\{F\}) P(H0,1∣Yk(m),{F}),表达式如 ( 1 − 15 ) (1-15) (1−15)所示
当噪声更新完成后,就可以使用维纳滤波器对噪声进行抑制,常见维纳滤波器的表达式为:
H w ( k , m ) = ⟨ ∣ X k ( m ) ∣ 2 ⟩ ⟨ ∣ Y k ( m ) ∣ 2 ⟩ = 1 − ⟨ ∣ N k ( m ) ∣ 2 ⟩ ⟨ ∣ Y k ( m ) ∣ 2 ⟩ ≈ 1 − ∣ N ^ k ( m ) ∣ 2 ∣ Y k ( m ) ∣ 2 ( 1 − 22 ) H_w(k,m)=\displaystyle{\frac{\langle |X_k(m)|^2\rangle}{\langle|Y_k(m)|^2\rangle}=1-\frac{\langle|N_k(m)|^2\rangle}{\langle|Y_k(m)|^2\rangle}\approx 1-\frac{|\hat{N}_k(m)|^2}{|Y_k(m)|^2}}\ \ \ (1-22) Hw(k,m)=⟨∣Yk(m)∣2⟩⟨∣Xk(m)∣2⟩=1−⟨∣Yk(m)∣2⟩⟨∣Nk(m)∣2⟩≈1−∣Yk(m)∣2∣N^k(m)∣2 (1−22)
若模长代替平方,上式变为:
H w ( k , m ) = 1 − ∣ N ^ k ( m ) ∣ ∣ Y k ( m ) ∣ ( 1 − 23 ) H_w(k,m)=\displaystyle{1-\frac{|\hat{N}_k(m)|}{|Y_k(m)|}}\ \ \ (1-23) Hw(k,m)=1−∣Yk(m)∣∣N^k(m)∣ (1−23)
在本算法中,维纳滤波器用先验SNR表示:
H k ( m ) = ρ k ( m ) 1 + ρ k ( m ) ( 1 − 24 ) H_k(m)=\displaystyle{\frac{\rho_k(m)}{1+\rho_k(m)}}\ \ \ (1-24) Hk(m)=1+ρk(m)ρk(m) (1−24)
ρ k ( m ) \rho_k(m) ρk(m)为前文中定义的先验SNR,根据定义 ρ k ( m ) \rho_k(m) ρk(m)为取平滑后的先验信噪比,所以次维纳滤波器也经过了时间平滑,因此不再另外单独进行平滑。将噪声频谱替换为估计出的噪声频谱则 ( 1 − 6 ) (1-6) (1−6)变为:
ρ k ( m ) = ⟨ ∣ X k ( m ) ∣ ⟩ ∣ N ^ k ( m ) ∣ \rho_k(m)=\displaystyle{\frac{\langle|X_k(m)|\rangle}{|\hat N_k(m)|}} ρk(m)=∣N^k(m)∣⟨∣Xk(m)∣⟩,进而 ( 1 − 7 ) (1-7) (1−7)也发生类似变化。根据判决引导(DD, decision directed)最终取:
H w , d d ( k , m ) = max { H m i n , ρ k ( m ) β + ρ k ( m ) } ( 1 − 25 ) H_{w,dd}(k,m)=\displaystyle{ \max{\{H_{min},\frac{\rho_k(m)}{\beta +\rho_k(m)}\}}} \ \ \ (1-25) Hw,dd(k,m)=max{Hmin,β+ρk(m)ρk(m)} (1−25)
其中 β \beta β是控制降噪程度的参数,最后,对输入频谱应用维纳滤波器得到降噪后的频谱:
X ^ k ( m ) = H w , d d ( k , m ) Y k ( m ) ( 1 − 26 ) \hat{X}_k(m)=H_{w,dd}(k,m)Y_k(m)\ \ \ (1-26) X^k(m)=Hw,dd(k,m)Yk(m) (1−26)
然后进行逆傅里叶变化就可得到降噪后的时域信号。