一、简介

本章提出了一种语音增强算法,该算法以基于先验信噪比估计的维纳滤波法为基础。通过计算无声段的统计平均得到初始噪声功率谱,并平滑处理初始噪声功率谱和带噪语音功率谱,更新了噪声功率谱;最后,考虑了某频率点处噪声急剧增大的情况,做了相关验证,该算法能有效地抑制变化范围不大或是稳定的噪声,但是对实际中的变化范围很广的噪声效果不是很好。
1、语音增强概述
1.1 语音增强的相关概念
嵌在语音系统中,语音信号不可避免的会受到周围噪声的干扰,从而影响语音的质量与可懂度。
语音增强:其实就是带噪语音中提取尽可能纯净的语音,改善语音质量和可懂度,提高噪声环境下语音通信系统的性能。
噪声都随机产生的,不可能完全消除。语音增强的目标是:减弱噪声、消除背景噪声、改进语音质量、使听着乐于接受,提高语音可懂度。
1.2 语音增强的相关算法
由于噪声来源众多,特性各不相同。语音增强处理系统的应用场合千差万别。
因此,不存在一种可以通用于各种噪声环境的语音增强算法。针对不同的环境,采取不同的语音增强算法。
语音增强算法按处理方式可以分为:基于语音周期性的增强算法,基于全极点模型的增强算法,基于短时谱估计的增强算法,基于信号子空间的增强算法和
基于HMM的增强算法。
从目前的发展来看,基于短时谱估计的方法是最有效的方法。具体包括谱减法、维纳滤波、最小均方误差短时谱幅度估计法(MMSE-STSA)和最小均方误差对数谱幅度估计法(MMSE-LSA)。本文主要讨论使用维纳滤波器实现语音的增强处理。
2 基于先验信噪比估计的维纳滤波语音增强理论
先验信噪比是语音增强算法中非常重要的参数。 通过Ephraim和 Malah提出的“直接判决”估计来计算先验信噪比的方法是最有效的和最容易计算的。

二、源代码

function varargout = adsp_project(varargin)
% ADSP_PROJECT MATLAB code for adsp_project.fig
%      ADSP_PROJECT, by itself, creates a new ADSP_PROJECT or raises the existing
%      singleton*.
%
%      H = ADSP_PROJECT returns the handle to a new ADSP_PROJECT or the handle to
%      the existing singleton*.
%
%      ADSP_PROJECT('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in ADSP_PROJECT.M with the given input arguments.
%
%      ADSP_PROJECT('Property','Value',...) creates a new ADSP_PROJECT or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before adsp_project_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to adsp_project_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help adsp_project% Last Modified by GUIDE v2.5 15-Dec-2014 18:26:21% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @adsp_project_OpeningFcn, ...'gui_OutputFcn',  @adsp_project_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before adsp_project is made visible.
function adsp_project_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to adsp_project (see VARARGIN)% Choose default command line output for adsp_project
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes adsp_project wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = adsp_project_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)global xk;
global fs;global noise_type;noise_type=1;
[FileName,PathName] = uigetfile('*.wav','Select the voice-file');
[x,fs]=wavread(FileName);
ls=length(x);xk=x(1:ls);set(handles.text_fs,'string',num2str(fs));
set(handles.text_ls,'string',num2str(ls));axes(handles.axes_freq);%xaxis1=linspace(0,0.5,250);
plot(abs(fft(xk)));  %xk 音频的句柄 用来做按键响应函数
axis([0,14000,0,300]) ;axes(handles.axes_wave);%xaxis1=linspace(0,0.5,250);
h_xk=plot(xk);  %xk 音频的句柄 用来做按键响应函数
axis([0,30000,-1.5,1.5]) ;set(h_xk,'ButtonDownFcn',@axes_waveCallback);%grid on;
%set(gca,'xtick',(0:0.02:0.5),'ytick',[0:100:500]);
%axis([0.25 0.45 0 500]);% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
global xk;
global SNR;
global fs;
global xs;
global noise_type;noise_type=1;%高斯噪声
SNR_slider=get(handles.slider_SNR,'value');
SNR_slider=floor(SNR_slider);
SNR=num2str(SNR_slider);
set(handles.text_snr,'string',SNR);
xs=awgn(xk,SNR_slider,0);%加入高斯白噪声,信噪比30axes(handles.axes_freq);
plot(abs(fft(xs)));  %xk 音频的句柄 用来做按键响应函数
axis([0,14000,0,300]) ;axes(handles.axes_noise);h_xs=plot(xs);
axis([0,30000,-1.5,1.5]) ;
set(h_xs,'ButtonDownFcn',@axes_noiseCallback);% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton3.% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end% --- Executes on key press with focus on pushbutton1 and none of its controls.
function pushbutton1_KeyPressFcn(hObject, eventdata, handles)% hObject    handle to pushbutton1 (see GCBO)
% eventdata  structure with the following fields (see UICONTROL)
%   Key: name of the key that was pressed, in lower case
%   Character: character interpretation of the key(s) that was pressed
%   Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
% handles    structure with handles and user data (see GUIDATA)% --- If Enable == 'on', executes on mouse press in 5 pixel border.
% --- Otherwise, executes on mouse press in 5 pixel border or over pushbutton1.
function pushbutton1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes on slider movement.
function slider2_Callback(hObject, eventdata, handles)% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider% --- Executes during object creation, after setting all properties.
function slider2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.

【语音增强】基于matlab GUI维纳滤波语音增强【含Matlab源码 298期】相关推荐

  1. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  2. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  3. 基于SSM的仓库管理系统(含完整源码+论文)

    后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...

  4. 【条形码识别】基于matlab GUI二维条形码识别【含Matlab源码 607期】

    ⛄一.二维条形码识别简介 采用数字图像处理技术对二维条码进行识别, 是二维条形码识别中较常用的方法, 它在处理污损的条形码方面有光电识别方法无法比拟的优势.另外图像式识别方法对识别角度的要求没有光电识 ...

  5. 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】

    ⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...

  6. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  7. 【语音增强】基于matlab人耳掩蔽效应语音增强【含Matlab源码 428期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[语音增强]基于matlab人耳掩蔽效应语音增强[含Matlab源码 428期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  8. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  9. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  10. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

最新文章

  1. win10 spark+scala+eclipse+sbt 安装配置
  2. Weblogic10 + EJB3入门教程(1):编写第一个无状态会话Bean(Stateless Session Bean)...
  3. Python Matplotlib 中文显示参数设置
  4. 炒房客身家过亿 曝炒房心得及地产10大真相
  5. 测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑
  6. sublime 插件(持续更新)
  7. FRR BGP协议分析8 -- BGP 层3隧道 (2)
  8. Hibernate 教程(一)[Hibernate的基本配置]
  9. 上古卷轴5json文件修改_捏脸工具-RaceMenu
  10. 如何查看路由器的MAC地址
  11. Steve Jobs Said
  12. Safari无法验证网站身份
  13. 一张图了解大数据平台架构
  14. 我的蓝色之路有多远?
  15. 【Leetcode】周赛204 罗布乐思
  16. Ae:摄像机设置与摄像机选项
  17. HashMap与红黑树
  18. 备战Noip2018模拟赛3(B组)T1 Apple 韬韬抢苹果
  19. 前端打印方法(单页与批量)
  20. 一个16进制的数占多少字节?(半个字节)

热门文章

  1. wpf ListView圆角
  2. PostgreSQL参数学习:random_page_cost
  3. [转]Flex是什么?flex和flash是什么关系 ?
  4. 拿过3个重点、8个面上的专家:申请国家基金心得与体会
  5. learning opencv3: 四:Mat
  6. 20200714每日一句
  7. 190216每日一句
  8. Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界 1 2. 检查条目 1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验) 1 2.2. 字符黑
  9. Atitit mybatis 配置 redis 集成 attilax总结 艾提拉总结 1.1. setting name=cacheEnabled v 1 1.2. Mapper文件 1 1.
  10. Atitit 关于建立知识库体系的方案