目 录
一. 课程设计任务 ........................................................................................... 1
1.1 设计目的 ......................................................................................................................................... 1
1.2 设计要求 ......................................................................................................................................... 1
二. 课程设计原理及设计方案 ......................................................................... 1
2.1语音信号的获取 ............................................................................................ 错误!未定义书签。
2.2语音信号的频谱分析 .................................................................................... 错误!未定义书签。
2.3产生噪声信号 ................................................................................................ 错误!未定义书签。
2.4污染信号的频谱分析 .................................................................................... 错误!未定义书签。
2.5设计数字滤波器 ............................................................................................ 错误!未定义书签。
2.5.1 FIR滤波器 ............................................................................................. 错误!未定义书签。
2.5.2 IIR滤波器 .............................................................................................. 错误!未定义书签。
2.6 对污染信号进行滤波 ................................................................................... 错误!未定义书签。
2.7 回放录音 ....................................................................................................... 错误!未定义书签。
2.8 gui的设置 ........................................................................................................................................ 5
2.8.1控件风格和外观 ...................................................................................................................... 5
2.8.2 对象的常规信息 ..................................................................................................................... 5
2.8.3控件回调函数的执行 .............................................................................................................. 6
2.8.4控件当前状态信息 ................................................................................................................. 6
三. 课程设计的步骤和结果 ............................................................................. 7
3.1音频信号的采集 .............................................................................................................................. 7
3.1.1打开本地文件 .......................................................................................................................... 8
3.2.1录制音频信号 .......................................................................................................................... 8
3.2 滤波器设计 ..................................................................................................................................... 7
3.2.1设计fir滤波器......................................................................................................................... 8
3.2.2 设计iir滤波器 ........................................................................................................................ 8
3.3 滤波器滤波 ................................................................................................................................... 10
3.4 GUI人机界面的制作.................................................................................................................... 10
四. 课程设计总结 ......................................................................................... 12
五. 设计体会 ................................................................................................ 13
六. 参考文献 ................................................................................................ 14
- II -
一. 课程设计任务
1.1 设计目的
本课程设计的目的为:
1、巩固和加深学生对数字信号处理的基本概念、基本原理、基本分析方法的理解;要求学生综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论;
2、培养学生根据设计题目的要求,综合利用数字信号处理技术的能力,提高学生综合运用所学知识,解决实际工程技术问题的能力;要求利用 MATLAB 或LabView作为编程工具进行计算机实现,加深对所学知识的理解,建立概念;
3、通过课程设计,培养学生查阅文献、资料,独立解决实际问题的能力。
4、使学生基本掌握以下内容:
a、学会 MATLAB或LabView 的使用,掌握其程序设计方法。
b、掌握在 Windows 环境下语音信号采集的方法。
c、掌握数字信号处理的基本概念、基本理论和基本方法.
d、学会用 MATLAB或LabView 对信号进行分析和处理。
e、学习使用MATLAB GUI设计工具应用平面。
1.2 设计要求
1) 自己录制一段正常的声音文件,或者通过菜单选择的方式选择一段正常
声音文件
2) 加入50Hz交流干扰信号;
3) 通过播放对比加入干扰前后声音的变化;
4) 显示原始信号与加入干扰后信号的频谱图;
5) 选择适当的方法对干扰进行去除,比较不同处理方法的效果;
6) (提高部分)选择实际受干扰信号,对信号进行频谱分析,确定干扰的频
率;根据干扰的特点采用不同的滤波器对信号进行处理;
7) 编制GUI用户界面。
- 1 -
二. 课程设计原理及设计方案
在现场直播节目的录制过程中,经常会由于现场录制工作人员的操作不当,会使MIC中串入交流干扰,从而造成语音信号的采集过程中的噪声干扰。语音降噪是针对噪声问题的一种有效的处理技术,它的目的就是为了消除噪声的影响,提高语音清晰度、改善语音的质量。上世纪六十年代起人们就对语音降噪处理进行了一系列的研究,数字滤波器、快速傅立叶变换等成为语音信号处理的理论基石。根据傅立叶变换的性质可知,交流(固频)噪声在频域上表现为窄谱且是离散的,因此我们考虑用数字陷波器来滤除噪声。
2.1 语音信号的获取
2.1.1打开本地文件
在matlab平台下,利用wavread进行语音采集, 得到语音的分辨率、采样率以频率特性。
2.1.2录制音频
利用wavrecord录制一段语音,时间为5s左右,通过wavread函数读取波形文件,得到语音的分辨率、采样率以及包含语音数据的一维数组。
2.2 语音信号的频谱分析
画出语音信号的时域波形,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性。
2.3产生噪声信号
利用matlab产生固定频率的交流噪声,并加到语音信号中去,得到被污染的语音信号,并播放语音信号,利用函数fft对噪声进行快速傅里叶变换,得到噪声的频谱特性。
2.4污染信号的频谱分析
播放被噪声污染的语音信号,并画出污染语音信号的时域波形,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性。
- 2 -
2.5设计数字滤波器
数字陷波陷波器是指当带阻滤波器的阻带变得很窄时候的一种特殊滤波器,它能够滤除信号中特定的一个或几个干扰频率成分,而使得有用的频率成分不受影响或衰减损伤最小化。因此在设计陷波滤波器时,陷波频率点应该与干扰频率点接近并保证陷波频率点处的衰减值足够大以实现对干扰频率的干净陷波和对有用频率成分的最大保护。
数字滤波器从功能上分类, 可分为低通、高通、带通、带阻滤波器。根据数字滤波器单脉冲响应的时域特性可将数字滤波器分为两种, 即IIR无限长脉冲响应数字滤波器和FIR有限长脉冲响应数字滤波器,其中FIR具有突出的优点是系统总是稳定的、非递归的、易于实现严格的线性相位、允许设计多通带(或多阻带)滤波器。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。但与IIR DF相比,在满足同样的阻带衰减的情况下需要较高的阶数。滤波器阶数越高将占用更多的计算机运行时间。
2.5.1 FIR滤波器
FIR DF的冲激响应h ( k)是有限长的M 阶F IR DF系统函数可表示为
设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
FIR窗函数法的思想是一般是先给定所要求的滤波器的频率响应Hd ( ejw) , 要求设计一个FIR 滤波器的频率响应H( ejw) 来逼近Hd( ejw) .设计是在时域进行的, 首先由傅立叶变换导出hd( n) , 因此hd( n) 一定是无限长的序列, 而h( n) 是有限长的, 即要用有限长的h( n) 来逼近无限长的hd( n) , 最有效的方法是截断hd ( n) , 或者说用一个有限长的窗口函数w( n) 来截取hd( n) , 即: h( n) = hd( n) w( n) , 因而窗函数的形状及长度的选择就很关键了. 在MATLAB 中常用的窗函数有矩形窗, Hanning 窗, Hamming 窗, Blackman 窗,Kaiser 窗等,。
2.5.2 IIR滤波器
IIR滤波器一般采用递归型的结构,传输函数为:
- 3 -
根据设计理论,在MATLAB环境下设计IIR数字滤波器主要有四种方法:一是典型设计法;二是完全设计法;三是最优设计法;四是工具设计法。
IIR滤波器设计思想是:利用已有的模拟滤波器设计理论,首先根据设计指标设计一个合适的模拟滤波器,然后再通过脉冲响应不变法或双线性变换法,完成从模拟到数字的变换。常用的模拟滤波器有巴特沃斯(Butterworth)滤波器、切比雪夫(Chebyshev) 滤波器、椭圆(Ellipse)滤波器、贝塞尔(Bessel)滤波器等,这些滤波器各有特点,供不同设计要求选用
IIR 数字陷波器具有如下几个特点:
(1)IIR 数字陷波器冲激响应是无限长的。
(2)IIR 数字陷波器的系统函数在有限 Z 平面上存在极点。
(3)IIR 数字陷波器在结构上是递归的,这表示在结构上存在输出到输入反馈。
IIR 数字陷波器相对与 FIR 数字陷波器来说更容易实现,在相同条件下,设计IIR 数字陷波器所需要的参数比设计 FIR 数字陷波器所需要的参数更少。而又由于完全设计法程序简单,我们在这里利用完全设计法设计IIR 数字陷波器。利用 IIR
数字陷波器将带噪信号中的固频噪声成分进行滤波处理,从而达到语音降噪的目的。
- 4 -
2.6对污染信号进行滤波
比较滤波器的性能,然后对语音信号滤波,FIR滤波器利用函数filter对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
2.7回放录音
在matlab中,函数wavplay可以对信号进行回放,并将滤波后的语音进行比较。
2.8 gui的设置
GUI设计面板是GUI设计工具应用的平面,面板上部提供了菜单和常用工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文本框、弹出式菜单等。进行设计时, 首先单击面板左边所需的控件, 然后在右边的图形界面编辑区中再次单击某一恰当位置, 这时将在该位上为图形界面添加相应的控件。一个图形界面的完成, 除了设计其外观外, 还有相当的一部分是通过属性的设来完成的。因此在设置这些属性时, 要注意下面几个常用又很重要的属性设置。
2.8.1控件风格和外观
String属性:控件上的文本,以及列表框和弹出菜单的选项。对于弹出式菜单类型的,应该在string后面的输入栏中加入如:A(回车),B(回车),C(回车)等。
Visible:控件是否可见。
Fontsize:字体的大小,尤其对于静态文本框很有效。
2.8.2 对象的常规信息
Enable属性:表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。对于一些edit text等则在off的状态时是不可以输入的 Style:控件对象类型。即为按钮类型、文本框类型或活动条等。
Tag:控件表示(用户定义)。即是识别该控件的标签,如假设tag为www,则其回调函数是www_callback。
Position:控件对象的尺寸和位置。对于活动条而言,该属性决定了水平放置还是竖直。
- 5 -
2.8.3控件回调函数的执行
CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
2.8.4控件当前状态信息
Value:控件的当前值。(对于popupmenu类型的,value为3就表示第三行的值。对于radio类型的,其值为1就表示已经选中该按钮。
Max和min:对于滑动条而言,设置最大值和最小值,从而设置滑动条的变化范围。
- 6 -
三. 课程设计的步骤和结果
3.1 音频信号的采集
3.1.1 打开本地文件
if get(handles.EN_open,'value')==1
[filename,pathname]=uigetfile('*.wav','选择一个声音文件');
voice=[pathname,filename];
if num==0 %歌曲采样点设定
[x,fs]=wavread(voice);
else
[x,fs]=wavread(voice,num);
end
xfft=abs(fft(x)); %原语音信号的频谱 index = find(xfft == 0); %find函数用于返回所需要元素的所在位置 xfft(index) = 1e-17;
X = 20*log10(xfft); %频域幅度 X_x=180/pi*unwrap(angle(fft(x)));
axes(handles.axes1);
plot(x); grid on;
else
warndlg('请选择语音输入方式','提示');
end
3.1.2 录制音频信号
if get(handles.EN_record,'value')==1 %录音模式
set(handles.record_button,'string','录音中.....');
Fs=str2num(get(handles.t_len,'string'));
duration = str2num(get(handles.T_record,'string'));
data1=wavrecord(duration*Fs,Fs)
mag=20*log10(abs(fft(data1)));
data1_x=180/pi*unwrap(angle(fft(data1)));
- 7 -
setappdata(handles.my_storage,'data1',data1);
setappdata(handles.my_storage,'mag',mag);
setappdata(handles.my_storage,'Fs',Fs);
setappdata(handles.my_storage,'data1_x',data1_x);
axes(handles.axes1);
plot(data1);grid on;
wavwrite(data1,Fs,'录音文件', );
set(handles.record_button,'string','开始录音');
warndlg('录音完毕','提示');
else
warndlg('请选择语音输入方式','提示');
end
3.2 滤波器设计
3.2.1设计fir滤波器的步骤是:
(1)将设计指标归一化处理。
(2)根据归一化频率,和阻带衰减的要求,计算出最小阶数。
(3)确定窗口值。Windows指定窗函数类型,默认为Hamming窗;可选Hanning、Hamming、Blackman、、bartlett等窗,每种窗都可以由Matlab的相应函数生成。本设计选用kaiser窗。
(4)确定传递函数的分母系数。函数fir1的调用格式为B= fir1(n, Wn, 'ftype', Windows),同时选择在此函数中选择要设计的滤波器的类型。其中,n为滤波器阶数,Wc为截止频率ftype决定滤波器类型,ftype= high,设计高通FIR滤波器,ftype= stop,设计带阻FIR滤波器。
3.2.2 设计iir滤波器
(1)将设计指标归一化处理。
(2)根据归一化频率,确定最小阶数N 和频率参数Wn。可供选用的阶数选择函数有:buttord,cheb2ord,ellipord 等。
(3)运用最小阶数N 设计模拟低通滤波器原型。根据最小阶数直接设
- 8 -
计模拟低通滤波器原型,用到的函数有:butter,cheby1, ellip。如[B,A] = butter(N,Wn,'type') 设计'type'型巴特沃斯(Butterworth)滤波器filter。N为滤波器阶数,Wc为截止频率, type决定滤波器类型, type= high,设计高通IIR滤波器,ftype= stop,设计带阻IIR滤波器。
参考程序:
Fn=str2num(get(handles.noise_f,'string'));
Fs=str2num(get(handles.Fs,'string'));
wp=[Fn-5 Fn+55]*2/Fs; %通带边界频率(归一化)
ws=[Fn-2 Fn+2]*2/Fs; %阻带边界频率
wdelta=3*2/Fs;
Rp=1;Rs=30;
shap=get(handles.filter,'value');
switch shap
case 2
[N,Wn]=buttord(wp,ws,Rp,Rs);
[b,a]=buttter(N,Wn,'stop');
case 3
[N,Wn]=cheb1ord(wp,ws,Rp,Rs);
[b,a]=cheby1(N,Rp,Wn,'stop');
case 4
[N,Wn]=ellipord(wp,ws,Rp,Rs);
[b,a]=ellip(N,Rp,Rs,Wn,'stop');
case 5
N=ceil(8*pi/(wdelta*pi));
if mod(N,2)==0
N = N + 1;
end
window_hanning = hanning(N); %????hanning?°?????ò?? Wn=(ws+wp)/2;
b=fir1(N,Wn,'stop',window_hanning);
a=1;
otherwise
warndlg('请选择滤波器类型','提示');
end
- 9 -
3.3 滤波器滤波
x=getappdata(handles.my_storage,'x'); %语音信号
Xn =getappdata(handles.my_storage,'Xn');
Xn_H =getappdata(handles.my_storage,'Xn_H');
fs=getappdata(handles.my_storage,'fs'); %采样频率
[H,f]=freqz(b,a,fs);
f_H=20*log10(abs(H));
f_x=180/pi*unwrap(angle(H));
Y=filter(b,a,Xn); %对信号 s 进行滤波
Y_f=20*log10(abs(fft(Y)));
Y_x=180/pi*unwrap(angle(fft(Y)));
3.4 GUI人机界面的制作
GUI ( GraphicalUser Interface) ,是用户和计算机之间交流的工具。MATLAB 将所有GUl 支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法,具有强大的绘图功能,可以轻松的获得更高质量的曲线图。GUIDE相当于一个控制面板,从中可以调用各种设计工具以辅助完成界面设计任务,例如控件的创建和布局、控件属性的编辑和菜单设计等。 GUI设计步骤:
1. 将所需控件从控件面板拖拽到GUIDE的设计区域;
2. 设置控件的属性。尤其注意tag属性的设置
3. 保存文件。GUIDE默认把GUI程序保存为两个同名文件:.fig文件用来保存窗体布局和所有控件的界面信息;.m文件包含GUIDE自动产生的程序框架和各控件的回调函数。
4. 为每个回调函数添加代码以实现GUI程序的具体功能。这一步与一般函数文件的编辑调试过程相同。
GUI主面板的五个区简介:
1.图形区:用于显示各模块的仿真曲线
- 10 -
2.参数设区:由个静态文本框和个编辑框以及类型选择按纽组成, 实时的进行系统参数的设定和滤波器原型的选定
3.对象模型区:由下拉菜单选定数字滤波器类型, 当用户的输人参数发生变化时, 可通过单击响应的“ Run”按钮, 实现设计结果的实时刷新与显示
4.数据显示区:对应于图形显示结果, 实时显示滤波器阶次和分子分母
GUI 界面图
界面功能简介:
整个界面分为三个部分:音频信号采集区,噪声信号添加区,滤波器滤波区。其中
播放键:播放原始,加噪声及滤波后的音频文件,便于对比。
开始录音键:利用matlab软件录制一段音频
打开键:打开本地声音文件。
加入噪声键:向原始信号中添加噪声
开始滤波键:对噪声信号进行滤除
- 11 -
四. 课程设计总结
本次课程设计要求我们根据设计题目的要求,综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,并通过理论推导得出相应结论;最终达到巩固和加深我们对数字信号处理的基本概念、基本原理、基本分析方法的理解,提高运用所学知识,解决实际工程技术问题的能力的目的。
在本次的课程设计中,我的课题名称是现场录音中语音信号的干扰去除。主要任务可分为三部分:语音采集,噪声干扰和噪声滤除。
语音采集部分采用了两种方法:录制音频(wavrecord)和使用本地文件(wavread):这部分的难点是采样频率的选择和读取,因为这同样关乎到以后程序中的播放问题。
噪声干扰部分本来是考虑出了固频交流噪声,要多加几种噪声,丰富程序内容,噪声程序很简单,但是这直接导致了后来滤波器设计的难度,因为固频交流噪声的滤除需要陷波滤波器,而高斯白噪声则需要带通滤波器,随机噪声又需要具体问题具体分析。所以最后只考虑了最基本的交流信号。
噪声滤除部分是本次课题的重点及难点。滤波器的实现由于matlab的强大的函数功能,并不是很难。其中最令人头疼的是如何恰当的选取滤波器参数,从而实现滤波器的最佳设计。这其中,碰到诸多问题:陷波滤波器的中心频率不等于噪声中心频率,查找后发现采样频率应该大于等于二倍的信号最高频率,而之前程序确实令它们两个相等。还有w和f之间的换算也势必需要注意的。最好是归一化一下,免得在加pi和减pi之间徘徊不定。
- 12 -
五. 设计体会
通过本次课程设计,本人不仅对matlab的使用有了更进一步的了解和掌握,而且对其强大的信号处理功能有了更深的认识。当然,对数字信号处理的设计原理和方法也有了更深刻的体会和认识,巩固了所学知识,加强了对知识的理解。由于课程设计是一个需要理论联系实际,把所学的理论基础借助相关软件实现具体功能的过程,要求我们先构思再动手,且要查阅参考大量的文献资料,这整个过程都要求我们学习的积极性和主动性。
在本次的课程设计中,我的课题名称是现场录音中语音信号的干扰去除。根据设计任务要求,查阅文献、资料,对噪声的去除有了初步的认识,并且了解了各个工作原理,确定设计方向及对设计流程有了整体的认识;编程实现任务,是设计的重点,编程几乎是边设计边发现问题边修改。
整个设计过程就是:思路—查资料—编程—问题—查资料—新思路—编程—新问题的不断重复上映。总是会有“山重水复疑无路,柳暗花明又一村”的感觉。
同时也加强了同学们的团队协作意识,虽然是独立设计任务,但是相关的问题讨论和资源共享也让我们对团队有了新的感触。
总之,通过本次设计,不仅强调了理论学习的重要性,那是一切实践的基础,更强调了理论联系实际的重要性。作为祖国未来的工程师,我们必须确保自己学以致用的能力。
- 13 -
六. 参考文献
1 万永革. 数字信号处理的MATLAB实现.科学出版社,2007 667-718
2 邓利娜 语音降噪技术的研究与实现 电子科技大学 2011-04-01 硕士论
文
3 赵淑清.李绍斌. 信号与系统.哈尔滨工业大学出版社. 2007.9:71-95 4 付丽琴,桂志国.数字信号处理原理及实现.国防工业出版社. 2004:228-
265
- 14 -
课程设计成绩评定表
设计上机验收成绩表
课程设计总评分成绩表
- 15 -