目录
摘要 1
一、设计内容 2
二、设计原理 3
三、设计过程 7
1、语音信号的采集 7
2、语音信号的频谱分析 8
3.设计数字滤波器并画出其频率响应 9
4、对自己录制的声音进行滤波以及滤波后的频谱图 12
5、回放语音信号 14
6、男女声语音信号频谱特点分析 15
7、 背景噪声滤除 17
8、设计系统界面 17
四、心得体会 21
五、参考文献 22
一、设计内容
1.语音信号的采集
熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数,在MATLAB环境中,使用声音相关函数录制3秒左右自己的声音。(考虑如何解决一个实际问题:录制刚开始时,常会出现实际发出声音落后录制动作半拍的现象,如何排除对这些无效点的采样?)
2.语音信号的频谱分析
要求首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。
3.设计数字滤波器并画出其频率响应
给出各滤波器的性能指标:
(1)低通滤波器性能指标:fb=1000 Hz,fc=1200 Hz,As=100dB,Ap=1dB。
(2)高通滤波器性能指标:fc=4800 Hz,fb=5000 Hz As=100dB,Ap=1dB。
(3)带通滤波器性能指标:fp1=1200 Hz,fp2=3000 Hz,fsc1=1000 Hz,fsc2=3200Hz,As=100dB,Ap=1dB。
要求用窗函数法和双线性变换法设计上面要求的3种滤波器。在Matlab中,使用函数butter,cheby1等函数设计IIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。
4.用滤波器对信号进行滤波
要求用自己设计的各种滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
5.比较滤波前后语音信号的波形及频谱
要求在一个窗口同时画出滤波前后的波形及频谱。
6.回放语音信号
在Matlab中,使用相关声音函数对声音进行回放。辨别滤波前后的声音有何变化。
7.男女声语音信号频谱特点分析
换一个与你性别相异的人录制同样一段语音内容,分析两段内容相同的语音信号频谱之间有什么特点。
8. 背景噪声滤除
再录制一段同样长时间的背景噪声(频谱能量集中在某个小范围内)叠加到你的语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把该噪声滤除。
9.设计系统界面(用MATLAB中GUIDE工具,要求自学)
为了使编制的程序操作方便,要求有能力的同学,设计处理系统的用户界面。在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。

用户登录界面如下所示:
function varargout = cover(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @cover_OpeningFcn, ...
                   'gui_OutputFcn',  @cover_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
function cover_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% 
ha=axes('units','normalized','position',[0 0 1 1]);
uistack(ha,'down');
II=imread('cover.jpg');
image(II)
colormap gray
set(ha,'handlevisibility','off','visible','off');
A = imread('title.jpg');
set(handles.title,'CData',A);
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = cover_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;
function name_Callback(hObject, eventdata, handles)
function name_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function number_Callback(hObject, eventdata, handles)
function number_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function ok_Callback(hObject, eventdata, handles)
name = get(handles.name,'String');
number = get(handles.number,'String');
if strcmp(name,'陈宗耀') && strcmp(number,'201400402045')
    delete(gcf);
    cover1;
else
    errordlg('请输入正确的姓名与学号','提示')
end
function cancel_Callback(hObject, eventdata, handles)
delete(gcf);
function cover_ButtonDownFcn(hObject, eventdata, handles)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐