传统语音增强——基于先验信噪比的维纳滤波语音降噪算法
一、基于先验信噪比的维纳滤波语音降噪算法的基本概念
改进的维纳滤波器为基于先验信噪比的维纳滤波器,其原理框图下图所示。
对于第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下载
参考文献:语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著)
传统语音增强——基于先验信噪比的维纳滤波语音降噪算法相关推荐
- 传统语音增强——基于小波分解的语音降噪算法
一.小波分析的意义 在传统的傅里叶分析中,信号完全是在频域展开的,不包含任何时频的信息.因为丢弃的时域信息对某些应用同样重要,所以出现很多能表征时域和频域信息的信号分析方法,如短时傅里叶变换.Gabo ...
- Matlab神经网络语音增强,基于BP神经网络的语音增强研究
曰髯? 分类号: 论文编号:2丛坦丝旦生丛 密级:公开 贵州大学 2009届硕士研究生学位论文 基于即神经网络的语音增强研究 学科专业:电路与系统 研究方向:模式识别 导师:刘宇红教授 研究生:周元芬 ...
- 基于matlab语音增强,基于MATLAB的语音增强系统的设计
187 2010 年第 05 期,第 43 卷 通 信 技 术 Vol.43,No.05,2010 总第 221 期 Communications Technology No.221,Totally ...
- android 电视语音遥控器,基于遥控器的Android电视语音聊天系统及其方法与流程
本发明涉及,尤其涉及一种基于遥控器的Android电视语音聊天系统及其方法. 背景技术: 随着科技越来越发展,电视机的功能也越来越强大,对于电视机,相对于传统电视机的单纯看电视功能,现有技术中,还支持 ...
- 基于matlab的有噪声语音信号处理,基于matlab的有噪声语音信号处理毕设
基于matlab的有噪声语音信号处理毕设 - I - I 大学本科毕业设计论文 基于MATLAB的有噪声语音信号处理- II - II 摘要 滤波器设计在数字信号处理中占有极其重要的地位,FIR 数字 ...
- 【信号处理】基于小波变换的语音增强matlab源码
一.简介 语音通信是人类传播信息,进行交流时使用最多.最自然.最基本的一种手段.而这种通信中的信息载体-语音信号却是一种时变的.非平稳的信号,只有在很短的一段时间内(通常为10~30ms)才被认为是平 ...
- 基于小波变换的语音增强算法简单综述
前言: 语音通信是人类传播信息,进行交流时使用最多.最自然.最基本的一种手段.而这种通信中的信息载体-语音信号却是一种时变的.非平稳的信号,只有在很短的一段时间内(通常为10~30ms)才被认为是平稳 ...
- 【语音去噪】基于matlab谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】
⛄一.谱减法+维纳滤波+卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单.去噪效果好,被公认为一种经典的去噪算法.语音信号在时域的表示为: yi( t) = si( ...
- ICASSP 2023 | 解密实时通话中基于 AI 的一些语音增强技术
动手点关注 干货不迷路 背景介绍 实时音视频通信 RTC 在成为人们生活和工作中不可或缺的基础设施后,其中所涉及的各类技术也在不断演进以应对处理复杂多场景问题,比如音频场景中,如何在多设备.多人. ...
最新文章
- 为什么要进行数据归一化
- Esfog_UnityShader教程_前言
- Eclipse 下新建MAVEN项目
- 【任务脚本】0616吐槽tb坑爹活动,预测看好jd活动,更新汇总战绩,DIY净水器预告...
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- hdu4096(模拟)
- .net中的socket异步通信实现--客户端代码
- .net core 集成 autofac.
- [蓝桥杯][2013年第四届真题]买不到的数目-模拟,数论
- 【Python】字符串和变量拼接的写法
- ehcache 实现缓存共享
- 反射认识_03_改变成员变量Fields
- Springboot+Vue+EasyExcel实现web页面的excel下载
- linux cfg配置文件,isolinux.cfg配置文件的写法
- 使用 Love2D 开发游戏
- 【生活日记】最近心态不好啊,沉不住气
- 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
- 【gitee】解决gitee本地提交但是无法显示贡献度(绿点)的问题
- 【微信小程序】创建动态组件和引用的方法
- 移动宽带安装说明一(刘欣)
热门文章
- Java程序员工资尤其的高,具体原因是什么呢?
- Hololens2开发 登录设备网页第三方观看忘记密码怎么办
- android edittext禁止输入特殊字符,Android edittext 禁止输入特殊字符/或者表情符的方案...
- 使用原生js写一个简单的注册登录页面
- 计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】
- wpf Route Event Code Snippet
- mysql求分位数_给Mysql加自定义函数计算百分位数(percentile)。
- [BZOJ4199][NOI2015]品酒大会-后缀数组
- 教师备课计算机教师管理制度,计算机学院教学过程管理中教师职责与问责暂行规定--中地大计字[2016]03号...
- 从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面