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

一、简介

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

二、源代码

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});
end

if nargout
    [varargout{
     1:nargout}] = gui_mainfcn(gui_State, varargin{
     :});
else
    gui_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);%加入高斯白噪声,信噪比30


axes(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 GUI维纳滤波之语音增强【含Matlab源码 298期】_第3张图片

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【信号处理】基于matlab HMM的睡眠状态检测【含Matlab源码 050期】
【信号处理】基于matlab CDR噪声和混响抑制【含Matlab源码 051期】
【信号处理】基于matlab最小二乘法解决稀疏信号恢复问题【含Matlab源码 052期】
【信号处理】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】
【信号处理】基于matlab ICA算法信号分离【含Matlab源码 054期】
【信号处理】基于matlab GUI界面的脉搏信号之脉率存档【含Matlab源码 237期】
【信号处理】基于matlab GUI界面的虚拟信号发生器(各种波形)【含Matlab源码 271期】
【信号处理】基于matlab GUI界面信号发生器之电子琴【含Matlab源码 272期】
【信号处理】基于matlab的数字电子琴设计与实现【含Matlab源码 273期】
【雷达通信】基于matlab的雷达数字信号处理【含Matlab源码 281期】
【雷达通信】基于matlab线性调频(LFM)脉冲压缩雷达仿真【含Matlab源码 283期】
【雷达通信】基于mtatlab距离多普勒(RD)、CS、RM算法的机载雷达成像【含Matlab源码 284期】
【雷达通信】《现代雷达系统分析与设计》大作业【含Matlab源码 285期】
【信号处理】基于matlab GUI语音信号综合处理平台【含Matlab源码 290期】
【信号处理】基于matlab GUI语音信号采集【含Matlab源码 291期】
【信号处理】基于matlab GUI语音幅度调制【含Matlab源码 292期】
【信号处理】基于matlab GUI语音合成【含Matlab源码 293期】
【信号处理】基于matlab GUI语音基频识别【含Matlab源码 294期】
【信号处理】基于matlab GUI语音信号加密解密【含Matlab源码 295期】
【信号处理】基于matlab小波变换的语音增强【含Matlab源码 296期】
【信号处理】基于matlab GUI语音傅立叶变换降噪混频【含Matlab源码 297期】

你可能感兴趣的:(matlab,信号处理)