一、基于先验信噪比的维纳滤波语音降噪算法的基本概念

改进的维纳滤波器为基于先验信噪比的维纳滤波器,其原理框图下图所示。

对于第m帧带噪语音信号ym(n)=sm(n)+nm(n)
式中,sm(n)是第m帧纯净语音信号;nm(n)为第m帧噪声信号。维纳滤波器就是在最小方均误差准则(MSE)下实现对语音信号sm(n)的估计。在sm(n)与nm(n)不相关且均为平稳随机过程条件下,对上式进行离散傅里叶变换,得Y(m,k)=S(m,k)+N(m,k)
谱增益函数为

式中,ζ(m,k)(SNRpo)为先验信噪比;m为帧号;k为频点。

则第m帧增强语音可表示为

采用直接判决(Decision-Directed)法来估计先验信噪比SNRprio,即
SNRprio(m,k)=a・ SNRprio(m-1,k)+(1-a) ・max(SNRpost(m,k) -1,0)

式中,SNRpost表示后验信噪比;Y(m,k)表示估计的第m帧信号的功率谱;(m,k)表示估
计的第m帧噪声功率谱。

二、先验信噪比的维纳滤波语音增强实验

先验信噪比的维纳滤波函数Weina_Im

名称:Weina_Im
功能:基于先验信噪比的维纳滤波算法。
调用格式:
enhanced = Weina_Im(x,wind,inc,NIS,alpha)
说明:输入参数x是输入的含噪语音信号;wlen为窗函数或窗长;inc是帧移;NIS是前导无话段帧数;alpha是信噪比平滑参数。enhanced是降噪后的信号。

函数代码如下:

% 维纳滤波enhancement=Weina_Im(y_fft,framesize,framenum,length);
% MS估计噪声功率谱, D-D法估计先验概率, 不需要估计纯净信号功率
% y_fft:分帧语音的FFT变换,
% framesize:帧长
% framenum:总帧数,
% length:语音长度
% enhancement:增强后的语音
% --------------------------------------------------------------------------------------------------------------function enhancement=Weina_Im(x,wind,inc,NIS,alpha)Length=length(x);nwin=length(wind);           % 取窗长if (nwin == 1)              % 判断窗长是否为1,若为1,即表示没有设窗函数framesize= wind;               % 是,帧长=winwnd=hamming(framesize);                      % 设置窗函数elseframesize = nwin;              % 否,帧长=窗长wnd=wind;endy=enframe(x,wnd,inc)';             % 分帧framenum=size(y,2);                           % 求帧数y_fft = fft(y);                         % FFTy_a = abs(y_fft);                       % 求取幅值y_phase=angle(y_fft);                   % 求取相位角y_fft2=y_a.^2;                            % 求能量noise=mean(y_fft2(:,1:NIS),2);               % 计算噪声段平均能量snr_x_q=0.96;                                    %前一帧先验信噪比,初始值设为0.96for i=1:framenumMag_y=y_a(:,i);                          snr_h=y_fft2(:,i)./noise;%(:,i);                   %计算后验信噪比snr_x=alpha.*snr_x_q+(1-alpha).*max(snr_h-1,0);        %先验信噪比,利用"D-D"法  ,framesize*1Hw=snr_x./(1+snr_x);                             %维纳滤波M=Mag_y.*Hw;                                     %维纳后的幅度值Mn=M.*exp(1i.*y_phase(:,i));                       %插入相位snr_x_q=M.^2./noise;%(:,i);                        %更新估计的前一帧先验信噪比signal(:,i)=real(ifft(Mn));end
enhancement=filpframe(signal',wnd,inc);

信噪比计算函数SNR_Calc

名称:SNR_Calc
功能:计算信噪比。
调用格式:
snr=SNR_Calc(x,xn)

说明:输入信号x是输入的纯净语音信号;xn是输入的含噪信号。输出参数snr是计算的信噪比。

函数程序如下:

function snr=SNR_Calc(I,In)
% 计算带噪语音信号的信噪比
% I 是纯语音信号
% In 是带噪的语音信号
% 信噪比计算公式是
% snr=10*log10(Esignal/Enoise)
I=I(:)';                             % 把数据转为一列
In=In(:)';
Ps=sum((I-mean(I)).^2);              % 信号的能量
Pn=sum((I-In).^2);                      % 噪声的能量
snr=10*log10(Ps/Pn);                 % 信号的能量与噪声的能量之比,再求分贝值

案例、用先验信噪比的维纳滤波算法给语音减噪

程序如下:

clear all; clc; close all;[xx, fs] = wavread('C5_3_y.wav');           % 读入数据文件
xx=xx-mean(xx);                         % 消除直流分量
x=xx/max(abs(xx));                      % 幅值归一化
IS=0.25;                                % 设置前导无话段长度
wlen=200;                               % 设置帧长为25ms
inc=80;                                 % 设置帧移为10ms
SNR=5;                                  % 设置信噪比SNR
NIS=fix((IS*fs-wlen)/inc +1);           % 求前导无话段帧数
alpha=0.95;signal=awgn(x,SNR,'measured','db');               % 叠加噪声
output=Weina_Im(x,wlen,inc,NIS,alpha) ;
output=output/max(abs(output));
len=min(length(output),length(x));
x=x(1:len);
signal=signal(1:len);
output=output(1:len);snr1=SNR_Calc(x,signal);            % 计算初始信噪比
snr2=SNR_Calc(x,output);            % 计算降噪后的信噪比
snr=snr2-snr1;
fprintf('snr1=%5.4f   snr2=%5.4f   snr=%5.4f\n',snr1,snr2,snr);% 作图
time=(0:len-1)/fs;                        % 设置时间
subplot 311; plot(time,x,'k'); grid; axis tight;
title('纯语音波形'); ylabel('幅值')
subplot 312; plot(time,signal,'k'); grid; axis tight;
title(['带噪语音 信噪比=' num2str(SNR) 'dB']); ylabel('幅值')
subplot 313; plot(time,output,'k');grid;%hold on;
title('滤波后波形'); ylabel('幅值'); xlabel('时间/s');

运行结果如下:

实验使用到的语音数据下载链接如下:

传统语音增强——最小方均(LMS)自适应滤波算法-数据集文档类资源-CSDN下载

参考文献:语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著)

传统语音增强——基于先验信噪比的维纳滤波语音降噪算法相关推荐

  1. 传统语音增强——基于小波分解的语音降噪算法

    一.小波分析的意义 在传统的傅里叶分析中,信号完全是在频域展开的,不包含任何时频的信息.因为丢弃的时域信息对某些应用同样重要,所以出现很多能表征时域和频域信息的信号分析方法,如短时傅里叶变换.Gabo ...

  2. Matlab神经网络语音增强,基于BP神经网络的语音增强研究

    曰髯? 分类号: 论文编号:2丛坦丝旦生丛 密级:公开 贵州大学 2009届硕士研究生学位论文 基于即神经网络的语音增强研究 学科专业:电路与系统 研究方向:模式识别 导师:刘宇红教授 研究生:周元芬 ...

  3. 基于matlab语音增强,基于MATLAB的语音增强系统的设计

    187 2010 年第 05 期,第 43 卷 通 信 技 术 Vol.43,No.05,2010 总第 221 期 Communications Technology No.221,Totally ...

  4. android 电视语音遥控器,基于遥控器的Android电视语音聊天系统及其方法与流程

    本发明涉及,尤其涉及一种基于遥控器的Android电视语音聊天系统及其方法. 背景技术: 随着科技越来越发展,电视机的功能也越来越强大,对于电视机,相对于传统电视机的单纯看电视功能,现有技术中,还支持 ...

  5. 基于matlab的有噪声语音信号处理,基于matlab的有噪声语音信号处理毕设

    基于matlab的有噪声语音信号处理毕设 - I - I 大学本科毕业设计论文 基于MATLAB的有噪声语音信号处理- II - II 摘要 滤波器设计在数字信号处理中占有极其重要的地位,FIR 数字 ...

  6. 【信号处理】基于小波变换的语音增强matlab源码

    一.简介 语音通信是人类传播信息,进行交流时使用最多.最自然.最基本的一种手段.而这种通信中的信息载体-语音信号却是一种时变的.非平稳的信号,只有在很短的一段时间内(通常为10~30ms)才被认为是平 ...

  7. 基于小波变换的语音增强算法简单综述

    前言: 语音通信是人类传播信息,进行交流时使用最多.最自然.最基本的一种手段.而这种通信中的信息载体-语音信号却是一种时变的.非平稳的信号,只有在很短的一段时间内(通常为10~30ms)才被认为是平稳 ...

  8. 【语音去噪】基于matlab谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

    ⛄一.谱减法+维纳滤波+卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单.去噪效果好,被公认为一种经典的去噪算法.语音信号在时域的表示为: yi( t) = si( ...

  9. ICASSP 2023 | 解密实时通话中基于 AI 的一些语音增强技术

    ‍ 动手点关注 干货不迷路 背景介绍 实时音视频通信 RTC 在成为人们生活和工作中不可或缺的基础设施后,其中所涉及的各类技术也在不断演进以应对处理复杂多场景问题,比如音频场景中,如何在多设备.多人. ...

最新文章

  1. 为什么要进行数据归一化
  2. Esfog_UnityShader教程_前言
  3. Eclipse 下新建MAVEN项目
  4. 【任务脚本】0616吐槽tb坑爹活动,预测看好jd活动,更新汇总战绩,DIY净水器预告...
  5. 数据结构实验之二叉树八:(中序后序)求二叉树的深度
  6. hdu4096(模拟)
  7. .net中的socket异步通信实现--客户端代码
  8. .net core 集成 autofac.
  9. [蓝桥杯][2013年第四届真题]买不到的数目-模拟,数论
  10. 【Python】字符串和变量拼接的写法
  11. ehcache 实现缓存共享
  12. 反射认识_03_改变成员变量Fields
  13. Springboot+Vue+EasyExcel实现web页面的excel下载
  14. linux cfg配置文件,isolinux.cfg配置文件的写法
  15. 使用 Love2D 开发游戏
  16. 【生活日记】最近心态不好啊,沉不住气
  17. 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
  18. 【gitee】解决gitee本地提交但是无法显示贡献度(绿点)的问题
  19. 【微信小程序】创建动态组件和引用的方法
  20. 移动宽带安装说明一(刘欣)

热门文章

  1. Java程序员工资尤其的高,具体原因是什么呢?
  2. Hololens2开发 登录设备网页第三方观看忘记密码怎么办
  3. android edittext禁止输入特殊字符,Android edittext 禁止输入特殊字符/或者表情符的方案...
  4. 使用原生js写一个简单的注册登录页面
  5. 计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】
  6. wpf Route Event Code Snippet
  7. mysql求分位数_给Mysql加自定义函数计算百分位数(percentile)。
  8. [BZOJ4199][NOI2015]品酒大会-后缀数组
  9. 教师备课计算机教师管理制度,计算机学院教学过程管理中教师职责与问责暂行规定--中地大计字[2016]03号...
  10. 从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面