基于MATLAB的语音信号分析及滤波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CHANGZHOU INSTITUTE OF TECHNOLOGY
课程报告
题目:基于MATLAB的语音信号分析及
滤波
二级学院:计算机信息工程学院
专业:通信工程班级:12通信一
学生姓名:赵红梅学号:12030735
指导教师:何松职称:讲师
评阅教师:何松职称:讲师
2015 年7 月
计算机信息工程学院课程实习说明书
基于MATLAB的语音信号分析及滤波
摘要
本课题用微软录音机采集了一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。
应用MATLAB平台对语音信号加入了噪声,按给定滤波器的性能指标,采用窗函数或双线性变换设计滤波器,设计数字滤波器并用窗函数法,画出滤波器的频率响应,然后用自己设计的滤波器对采集语音信号进行滤波处理,画出滤波后信号的时域波形和频谱。
然后对比滤波前后的语音信号的时域和频域特性,回放加噪语音信号和去噪语音信号,分析信号的变化,回放语音信号;最后,用MATLAB设计一信号处理系统界面。
本次课程设计的目的是更好地了解信号滤波的过程。
关键词:语音信号;频域特性; 时域特性; 滤波器
Abstract
VOICE SIGNAL ANALYSIS AND FILTERING BASED ON THE
MATLAB
Abstract
This topic use Microsoft recorder collect a voice signal,do analysis on the time domain and frequency spectrum, analyze the characteristics of voice ing MATLAB platform to add the noise into the voice signal。
Following a given performance index of the filter and using window function or bilinear transformation to design filter,design the Digital filter .Take advantage of window function method to draw the Frequency response of the filter,then use the filter designed by our own to cope with the voice signal and draw the time domain waveform and spectrum of filtered signal.The time and frequency domain characteristics of the original voice signal and later voice signal are compared.Playing back of noisy voice signal and noise signal, analyzing the signal changes,then play back voice signal.At last,design a signal processing system interface with MATLAB platform.The purpose of this topic is to learn the process of signal filtering.
Keywords:voice signal;frequency domain characteristics;time domain characteristics;filter
目录
第1章绪论 (1)
第2章课程设计内容和要求 (2)
2.1 设计内容 (2)
2.2 设计要求 (2)
第3章课程设计的具体实现 (2)
3.1 语音信号的采集 (2)
3.2 语音信号的时频分析与频谱分析 (2)
3.3 语音信号加噪 (4)
3.4 设计FIR数字滤波器 (6)
3.5 用滤波器对加噪语音信号进行滤波 (7)
3.6 比较滤波前后语音信号的波形及频谱 (9)
3.7回放语音信号 (10)
3.8设计系统界面 (11)
3.8.1 系统界面设计工具——GUI概述 (11)
3.8.2 界面设计及使用说明 (11)
小结 (12)
参考文献 (14)
第1章绪论
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。
它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。
具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
数字滤波器, 是数字信号处理中及其重要的一部分。
随着信息时代和数字技术的发展,受到人们越来越多的重视。
数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。
数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。
FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。
FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。
FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。
IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。
同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。
随着MATLAB 软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。
它可以快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化。
第2章课程设计内容和要求
2.1 设计内容
录制一段自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数或双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集语音信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,用MATLAB设计一信号处理系统界面。
2.2 设计要求
1.完成语音信号的采集,利用windows自带的录音机或其他软件,录制一段语音,时间在1s以内(建议用自己的姓名,如“我叫****”);
2.进行语音信号的频谱分析;
3.进行数字滤波器的设计,滤波器的性能指标可以根据实际情况作调整, 要求用窗函数法数字滤波器;
4.对语音信号进行滤波处理;
5.对滤波前后的语音信号频谱进行对比,并对设计结果进行独立思考和分析;
6.在基本要求的基础上,可以根据个人对该课程设计的理解,添加一些新的内容,如设计系统人机对话界面等。
第3章课程设计的具体实现
3.1 语音信号的采集
利用PC机进行数字信号的采集。
将话筒输入计算机的语音输入插口上,启动录音机。
按下录音按钮,接着对话筒说话“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。
点击放音按钮,可以实现所录音的重现。
将语音信号保存入计算机中。
可以看到,文件存储器的后缀默认为. wav ,这是WINDOWS 操作系统规定的声音文件存的标准。
3.2 语音信号的时频分析与频谱分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。
再对其进行采样,记住采样频率和采样点数。
程序如下:
[y,Fs,Nbits]=wavread('C:\Users\idea-pad\Desktop\REC004.wav'); sound(y,Fs)
n=length(y)
y_p=fft(y,n);
f=Fs*(0:n/2-1)/n;
figure(1)
subplot(2,1,1);
plot(y);
title('原始语音信号时域波形');
xlabel('时间轴(s)')
ylabel('幅度(A)')
subplot(2,1,2);
plot(f,abs(y_p(1:n/2)));
axis([0 20000 0 150]);
title('原始语音信号频谱图');
xlabel('频率HZ');
ylabel('频率幅度');
如图3-1:
图3-1 原始语音信号时域波形和频谱图
3.3 语音信号加噪
在本次课程设计中,我们是利用MATLAB中的函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。
在这里,我们选用正弦函数。
语音信号添加噪声及其频谱分析的主要程序如下:
[y,Fs,Nbits]=wavread('C:\Users\idea-pad\Desktop\REC004.wav');
n=1000
t=(0:n-1)/100000;
f=Fs*(0:n/2-1)/n;
y1=10*sin(2*pi*2000*t);
y2=fft(y1,n);
subplot(2,1,1);
plot(y1); %噪声信号的时域波形图
title('噪声信号时域波形图');
xlabel('时间轴(s)');
ylabel('幅度(A)');
subplot(2,1,2);
plot(f,abs(y2(1:n/2)));
title('噪声信号频谱图');
xlabel('频率(HZ)');
ylabel('频率幅度');
设计语音信号加噪后的时域波形和频谱图的程序如下:
y=wavread('C:\Users\idea-pad\Desktop\REC004.wav');
L=length(y);
t=(0:L-1)/8000;
A=10;
f=4000;
d=[A*sin(f*pi*t)]';
y_z=y+d;
sound(y_z,Fs);
n=length(y);
y_zp=fft(y_z,n);
f=Fs*(0:n/2-1)/n;
figure(2);
Subplot(2,1,1);
plot(y_z);
axis([0 130 -15 15]);
title ('加噪语音信号的时域波形');
xlabel('时间轴');
ylabel('幅度(A)');
subplot(2,1,2);
plot(f,abs(y_zp(1:n/2)));
axis([0 20000 0 2000]);
title('加噪语音信号频谱图');
xlabel('频率(HZ)');
ylabel('频率幅度');
结果如图3-2和3-3:
图3-2 噪声信号的时域波形和频谱图
图3-3 加躁语音信号时域波形和频谱图
3.4 设计FIR数字滤波器
IIR滤波器和FIR滤波器的设计方法完全不同。
IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。
其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。
FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
对于线性相位滤波器,经常采用FIR滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。
可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。
具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标。
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)设计模拟低通滤波器。
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波
器的频响偏离模拟滤波器的频响特性。
为了克服之一缺点,可以采用双线性变换法。
下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。
(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。
如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。
下面我们着重介绍用窗函数法设计FIR滤波器的步骤。
如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。
先按照阻带衰减选择窗函数类型。
原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望逼近的频率响应函数。
(3)计算h(n).。
(4)加窗得到设计结果。
接下来,我们根据语音信号的特点给出有关滤波器的技术指标:
①低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=100db ,Ap=1dB
②高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;
③带通滤波器的性能指标:
fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB 在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1
和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。
hn=fir1(M,wc,window),可以指定窗函数向量window。
如果缺省window 参数,则fir1默认为哈明窗。
其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。
3.5 用滤波器对加噪语音信号进行滤波
用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR 滤波器利用函数fftfilt对信号进行滤波,函数fftfilt用的是重叠相加法实现线性卷积的计算。
调用格式为:y=fftfilter(h,x,M)。
其中,h是系统单位冲击响应向量;x 是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段
长度,缺省时,默认的输入向量的重长度M=512。
函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn 的滤波。
其中xn是输入信号向量,yn输出信号向量。
滤波器的频率响应程序如下:
fp=1000;fc=1200;As=50;Ap=1;fs=16000
wc=2*pi*fc/fs;
wp=2*pi*fp/fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn=kaiser(N+1,beta);
ws=(wp+wc)/2/pi;
b=fir1(N,ws,wn);
figure(3);freqz(b,1);
title('低通滤波器的频率响应');
低通滤波器的频率响应如图3-4:
图3-4 低通滤波器的频率响应
3.6 比较滤波前后语音信号的波形及频谱
滤波器对加噪信号滤波前后的波形图和频谱图对比程序:fp=1000;fc=1200;As=50;Ap=1;fs=16000
wc=2*pi*fc/fs;
wp=2*pi*fp/fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn=kaiser(N+1,beta);
ws=(wp+wc)/2/pi;
b=fir1(N,ws,wn);
figure(3);freqz(b,1);
title('低通滤波器的频率响应');
x=fftfilt(b,y_z);
X=fft(x,n);
figure(4);
subplot(2,2,1);
plot(f,abs(y_zp(1:n/2)));
axis([0 2000 0 200]);
title('滤波前信号的频谱');
subplot(2,2,2);
plot(f,abs(X(1:n/2)));
axis([0 2000 0 200]);
title('滤波后信号的频谱');
subplot(2,2,3);
plot(y_z);
title('滤波前信号的波形');
axis([0 80 -20 20]);
subplot(2,2,4);
plot(x);
axis([0 20000 -0.5 0.5]);
title('滤波后信号的波形');
得到的结果如图3-5:
图3-5 滤波前后波形及其频谱对比图
3.7回放语音信号
经过以上的加噪声处理后,可在Matlab中用函数sound对声音进行回放。
其调用格式:sound(y,Fs),sound(y)和sound(y,Fs,bits)。
可以察觉滤波前后的声音有明显的变化。
执行程序回放语音并显示语音信号波形图:
[y,Fs,Nbits]=wavread('C:\Users\idea-pad\Desktop\REC004.wav');
soundview(y,Fs);
结果如图3-6:
图3-6 回放语音信号的波形图
3.8设计系统界面
3.8.1 系统界面设计工具——GUI概述
图形用户界面(graphical user interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI 开发提供一个方便高效的集成开发环境GUIDE。
GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。
GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。
FIG文件:包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。
它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。
M 文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。
GUI创建包括界面设计和控件编程两部分,主要步骤如下。
第一步:通过设置GUIDE应用程序的选项来运行GUIDE;第二步:使用界面设计编辑器进行面设计;第三步:编写控件行为响应控制(即回调函数)代码。
3.8.2 界面设计及使用说明
首先我们新建一个GUI文件:File/New/GUI 如图3-7所示:
图3-7 新建GUI文件界面
选择Blank GUI(Default)。
其次,进入GUI开发环境,布置好各控件以后,可以来为这些控件编写程序来实现其功能了。
最后,使用说明。
单击相应的按钮,便跳出对应的界面,如按下按钮“原始
语音信号波形及其频谱”,就得到如图3-8所示结果。
图3-8 原始信号波形及其频谱
心得体会
本设计圆满的完成了对加噪声语音信号的读取与打开,与课题的要求十分相符;也较好的完成了对原始语音信号和加噪声后的语音信号的频谱分析,通过fft 变换,得出了语音信号的频谱图;在滤波这一部分,课题主要是从巴特沃斯滤波器入手来设计滤波器等入手,实现了预期的滤波效果;完成了界面的设计,但也存在许多的不足,只是很勉强的达到了打开语音文件、显示已定滤波前后的波形图,界面没有用到其它的一些控件,如列表框、下拉菜单等等,GUI的界面设计功能没能得到充分的发挥。
通过这次的课程设计我们可以学的到很多的东西,不仅可以巩固以前所学过的知识,还可以学到很多在书本上所没有学到过的知识。
进一步加深了对数字信号处理的了解,让我对它有了更加浓厚的兴趣。
因为以前学过信号与系统和数字信号处理两门课,但这只是理论知识,通过实验我们才能真正理解其意义。
语音信号处理在以前的学习中并没有怎么接触,但是通过网上查找资料,我很快的理解了其基本原理。
在设计的过程中我还是遇到不少的问题的,比如刚开始,要处理的是WAV格式的语音信号,可是我发现并不是所有的WAV文件都可以用WAVREAD函数读取的,这才了解到WAV文件之间也是有区别的,并且如果格式不对的话,我们要把格式转换成WAV格式。
刚开始由于对滤波器的滤波原理并不是很了解,于是我又翻出学过的数字信号处理课本,认真研究起各种滤波器了,这才使我明白了大多数滤波器是如何工作地,不再单单只是懂理论,理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论。
总的来说,通过这次的课程设计我对语音信号有了全面的认识,对数字信号处理的知识又有了深刻的理解,让我感受到只有在充分理解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。
这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。
同时我相信,进一步加强对MATLAB 的学习与研究对我今后的学习将会起到很大的帮助!
参考文献
1高西全,丁玉美.数字信号处理.第3版.北京:西安电子科技大学出版社,2008
2 刘泉,阙大顺.数字信号处理原理与实现.北京:电子工业出版社,2005
3 张磊,毕靖,郭莲英.MATLAB实用教程.北京:人民邮电出版社,2008
4 张威.MATLAB基础与编程入门.西安:西安电子科技大学出版社,2006
5 周利清,苏菲.数字信号处理基础.北京:北京邮电大学出版社,2005。