基于Matlab的语音信号分析与处理课程设计论文Word文档格式.docx
《基于Matlab的语音信号分析与处理课程设计论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于Matlab的语音信号分析与处理课程设计论文Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
1.2语音课设的目的与要求
本次课程设计的目的是利用MATLAB对语音信号进行数字信号处理和分析,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析;
并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
要求利用MATLAB来读入(采集)语音信号,将它赋值给某一向量。
再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。
然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。
1.3语音课设的基本步骤
1.理论依据
根据设计要求分析系统功能,掌握设计中所需理论(采样频率、采样位数的概念,采样定理;
时域信号的FFT分析;
数字滤波器设计原理和方法,各种不同类型滤波器的性能比较),阐明设计原理。
2.信号采集
采集语音信号,并对其进行FFT频谱分析,画出信号的时域波形图和频谱图。
3.构造受干扰信号并对其进行FFT频谱分析
对所采集的语音信号加入干扰噪声,对语音信号进行回放,感觉加噪前后声音的变化,分析原因,得出结论。
并对其进行FFT频谱分析,比较加噪前后语音信号的波形及频谱,对所得结果进行分析,阐明原因,得出结论。
4.数字滤波器设计
根据待处理信号特点,设计合适数字滤波器,绘制所设计滤波器的幅频和相频特性。
5.信号处理
用所设计的滤波器对含噪语音信号进行滤波。
对滤波后的语音信号进行FFT频谱分析。
画出处理过程中所得各种波形及频谱图。
对语音信号进行回放,感觉滤波前后声音的变化。
比较滤波前后语音信号的波形及频谱,对所得结果和滤波器性能进行频谱分析,阐明原因,得出结论。
6.设计图形用户界面
设计处理系统的用户界面,在所设计的系统界面上可以选择滤波器的参数,显示滤波器的频率响应,选择信号等。
第二章设计方案论证
2.1设计理论依据
2.1.1采样定理
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中,最高频率fmax的2倍时,即:
fs.max>
=2fmax,则采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;
采样定理又称奈奎斯特定理。
1924年奈奎斯特(Nyquist)就推导出在理想低通信道的最高大码元传输速率的公式:
理想低通信道的最高大码元传输速率=2W*log2N(其中W是理想低通信道的带宽,N是电平强度)
2.1.2采样频率
采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。
采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。
采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。
这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。
2.1.3采样位数与采样频率
采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。
采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。
采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。
无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。
每增加一个采样位数相当于力度范围增加了6dB。
采样位数越多则捕捉到的信号越精确。
对于采样率来说你可以想象它类似于一个照相机,44.1kHz意味着音频流进入计算机时计算机每秒会对其拍照达441000次。
显然采样率越高,计算机摄取的图片越多,对于原始音频的还原也越加精确。
2.2语音信号的分析及处理方法
2.2.1语音的录入与打开
在MATLAB中,[y,fs,bits]=wavread('
Blip'
[N1N2]);
用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
[N1N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)。
sound(x,fs,bits);
用于对声音的回放。
向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
2.2.2时域信号的FFT分析
FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。
函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;
若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。
函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。
函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;
若向量x的长度大于N,则函数截短x使之长度为N;
若x为矩阵,按相同方法对x进行处理。
2.2.3数字滤波器设计原理
数字滤波是数字信号分析中最重要的组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。
在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。
数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。
2.2.4数字滤波器的设计步骤
不论是IIR滤波器还是FIR滤波器的设计都包括三个步骤:
(1)按照实际任务的要求,确定滤波器的性能指标。
(2)用一个因果、稳定的离散线性时不变系统的系统函数去逼近这一性能指标。
根据不同的要求可以用IIR系统函数,也可以用FIR系统函数去逼近。
(3)利用有限精度算法实现系统函数,包括结构选择、字长选择等。
2.2.5IIR滤波器与FIR滤波器的性能比较
FIR:
FiniteImpulseresponse,有限冲击响应
IIR:
InfiniteImpulseresponse,无限冲击响应
从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。
但是这个高效率是以相位的非线性为代价的。
选择性越好,则相位非线性越严重。
相反,FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;
对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结果,成本较高,信号延时也较大;
如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。
整体来看,IIR滤波器达到同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;
FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大
第三章图形用户界面设计
3.1图形用户界面概念
图形用户界面或图形用户接口(GraphicalUserInterface,GUI)是指采用图形方式显示的计算机操作环境用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。
GUIDE是Matlab提供的图形用户界面开发环境,提供了一系列用于创建图形用户界面的工具,从而简化界面布局和编程工作。
3.2图形用户界面设计
1.GUI设计模板
在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板。
MATLAB为GUI设计一共准备了4种模板,分别是BlankGUI(默认)、GUIwithUicontrols(带控件对象的GUI模板)、GUIwithAxesandMenu(带坐标轴与菜单的GUI模板)与ModalQuestionDialog(带模式问话对话框的GUI模板)。
当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。
2.GUI设计窗口
在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI设计窗口。
选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。
GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等部分组成。
GUI设计窗口的菜单栏有File、Edit、View、Layout、Tools和Help6个菜单项,使用其中的命令可以完成图形用户界面的设计操作。
3.GUI设计窗口的基本操作
在GUI设计窗口创建图形对象后,通过双击该对象,就会显示该对象的属性编辑器。
例如,创建一个PushButton对象,并设计该对象的属性值。
3.3图形用户界面模块调试
3.3.1语音信号的读入与打开
下面的一段程序是语音信号在MATLAB中的最简单表现,它实现了语音的读入打开,以及绘出了语音信号的波形频谱图。
[x,fs,bits]=wavread('
ding.wav'
[10245120]);
sound(x,fs,bits);
X=fft(x,4096);
magX=abs(X);
angX=angle(X);
subplot(221);
plot(x);
title('
原始信号波形'
);
subplot(222);
plot(X);
title('
原始信号频谱'
subplot(223);
plot(magX);
原始信号幅值'
subplot(224);
plot(angX);
原始信号相位'
程序运行可以听到声音,得到的结果如图3-1所示:
图3-1语音信号的读入与打开
3.3.2语音信号的定点分析
已知一个语音信号,数据采样频率为100Hz,试分别绘制N=128点DFT的幅频图和N=1024点DFT幅频图。
编程如下:
x=wavread('
sound(x);
fs=100;
N=128;
y=fft(x,N);
magy=abs(y);
f=(0:
length(y)-1)'
*fs/length(y);
plot(f,magy);
xlabel('
频率(Hz)'
ylabel('
幅值'
N=128(a)'
grid
plot(f(1:
N/2),magy(1:
N/2));
N=128(b)'
N=1024;
N=1024(c)'
N=1024(d)'
运行结果如图3-2所示:
图3-2语音信号定点分析
3.3.3N阶高通滤波器
在这里,以5阶为例,其中wc为其3dB边缘频率,程序设计如下:
N=5;
wc=0.3;
[b,a]=butter(N,wc,'
high'
X=fft(x);
subplot(321);
滤波前信号的波形'
subplot(322);
滤波前信号的频谱'
y=filter(b,a,x);
Y=fft(y);
subplot(323);
plot(y);
IIR滤波后信号的波形'
subplot(324);
plot(Y);
IIR滤波后信号的频谱'
z=fftfilt(b,x);
Z=fft(z);
subplot(325);
plot(z);
FIR滤波后信号的波形'
subplot(326);
plot(Z);
FIR滤波后信号的频谱'
得到结果如图3-3所示:
图3-3N阶高通滤波器
3.3.4N阶低通滤波器
在这里,同样以5阶为例,其中wc为其3dB边缘频率,程序设计如下:
[b,a]=butter(N,wc);
得到结果如图3-4所示:
图3-4N阶低通滤波器
3.3.52N阶带通滤波器
2N阶带通滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,wc=[w1,w2],w1wcw2),程序设计如下:
wc=[0.3,0.6];
得到结果如图3-5所示:
图3-5带通滤波器
3.3.62N阶带阻滤波器
2N阶带阻滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,wc=[w1,w2],w1wcw2),程序设计如下:
wc=[0.2,0.7];
stop'
得到结果如图3-6所示:
图3-6带阻滤波器
3.4图形用户界面制作
MATLAB中图形用户界面的制作有两种方法:
M文件和GUIDE,本设计采用GUIDE的方法制作GUI。
1.新建一个空白GUI模板:
进入MATLAB程序界面以后执行File→New→GUI过程,即可进入
2.选择空白模板选项条,单击OK,一个空白GUI模板生成
3.拖拉白色框的右下角调整界面大小,现在就可以开始设计GUI功能界面了。
从左边控件框选择所需要的控件放置在GUI面板中,然后对各个控件进行编辑,包括位置、大小、颜色、名称以及编写回调函数等。
本设计主要用到下拉菜单、坐标系、框架和按钮,现分别介绍。
4.按钮设计:
按钮键又称命令按钮或按钮,是小的长方形屏幕对象,常常在对象本身标有文本。
将鼠标指针移至对象,单击鼠标按钮执行由回调字符串所定义的动作。
单击空间框左侧的PushButton按钮,在图形编辑框中确定其位置后单击鼠标左键即可放置
现在开始编写回调函数,确定按钮功能。
在按钮上单击鼠标右键,选择view
-callbacks→callback即可在M文件中找到该按钮的回调函数位置。
然后编写功能函数,本设计中该按钮的功能是绘制原始波形,那么只需要读取语音信号并画出波形。
5.坐标系设计:
坐标轴对象是许多图形对象的父对象,每一个可视化显示用户数据的图形窗口都包含一个或多个坐标轴对象。
坐标轴对象确定了图形窗口的坐标系统,所有绘图函数都会使用当前坐标轴对象或创建一个新的坐标轴对象,用于确定其绘图数据点在图形中的位置。
单击空间框左侧的Axes按钮,在图形编辑框中确定其位置后单击鼠标左键即可放置
6.框架设计:
框架对象仅是带色彩的矩形区域,框架提供了视觉的分隔性,框架的style属性值是Frame。
在其他对象放入框架之前,框架应事先定义,否则框架可能覆盖控制框使他们不可见。
本次课程设计的最终图形用户界面如图3-7所示
图3-7图形用户界面
第四章总结
本设计圆满的完成了对语音信号的读取与打开,与课题的要求十分相符;
本设计也较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;
在滤波这一块,课题主要是从巴特沃斯滤波器入手来设计滤波器,也从一方面基本实现了滤波;
初略的完成了界面的设计,但也存在相当的不足,只是很勉强的达到了打开语音文件、显示已定滤波前后的波形等图。
语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。
也就是说,课题更多的还是体现了数字信号处理技术。
从课题的中心来看,课题是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音的处理。
作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。
在这里,用到了处理数字信号的强有力工具MATLAB,通过MATLAB里几个命令函数的调用,很轻易的在实际化语音与数字信号的理论之间搭了一座桥。
课题的特色在于它将语音看作了一个向量,于是语音数字化了,则可以完全利用数字信号处理的知识来解决。
我们可以像给一般信号做频谱分析一样,来给语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。
最后,还利用了MATLAB的另一强大功能——gui界面设计。
设计出了一个简易的用户应用界面,可以让人实现界面操作。
更加方便的进行语音的频谱分析与滤波处理。
但由于知识能力有限,当中也存在相当的不足,特别体现在滤波与界面设计这一块。
对滤波的研究,本文只是举出了很小的一个方面,还有许多精髓都未能一一列举。
至于用户界面的设计,由于笔者是初次接触,也未能有特别的掌握,仅就刚学习到的一些加以运用,于是设计的还是很粗燥。
当然,这些问题与不足在今后的进一步学习中,我会一步一步的去进行解决。
特别是对gui界面的设计,还有特别多的地方要学习。
附录
程序源代码:
functionvarargout=my(varargin)
%MYM-fileformy.fig
%MY,byitself,createsanewMYorraisestheexisting
%singleton*.
%
%H=MYreturnstheh