搜档网
当前位置:搜档网 › Matlab课程设计郭伟

Matlab课程设计郭伟

目录

摘要 (Ⅰ)

1.设计原理 (1)

1.1设计的目的及要求 (1)

1.2课题的研究意义 (1)

2.设计原理 (2)

2.1采样频率 (2)

2.2采样位数 (2)

2.3采样定理 (2)

2.4时域信号的FFT分析 (2)

2.5数字滤波器设计原理和方法 (3)

2.6各种不同类型滤波器的性能比较 (3)

3.设计内容 (4)

3.1语音信号的采集 (4)

3.2语音信号的频谱分析 (6)

3.3设计数字滤波器 (8)

3.4用滤波器对信号进行滤波处理 (9)

3.5回访语音信号 (11)

总结 (16)

致谢 (17)

参考文献 (17)

附录 (18)

摘要

语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。

Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。

本实验设计用电脑自带的录音机采集了一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。并应用Matlabv平台对语音信号加入了不同的噪声,进一步用窗函数法,椭圆函数法分别设计了一个带阻滤波器和一个高通滤波器,然后对加噪的语音信号进行滤波处理。最后对比滤波前后的语音信号的时域和频域特性,回放加噪语音信号和去噪语音信号。对比研究处理前和处理后的声音的不同。

【关键词】语音信号;频域特性;时域特性;滤波器

1.设计目的和要求

1.1设计目的及要求

本次课程设计要求利用MATLAB对语音信号进行处理和分析,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析,并对速配采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪音,恢复信号。

1.2课题的研究意义

语言是我们人类所特有的功能,它是传承和记载人类几千年文明史,没有语言就没有我们今天人类的文明。语音是语言最基本的表现形式,是相互传递信息最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。

语音信号处理属于信息科学的一个重要分支,大规模集成技术的高度发展和计算机技术的飞速前进,推动了这一技术的发展;它是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科,因此我们进行语言信号处理具有时代的意义。

2.设计原理

2.1采样频率

采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。

2.2采样位数

采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。

采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。

2.3采样定理

在进行模拟/数字信号的转换过程中,当采样频率最大值大于信号中最高频率fmax 的2.56倍时,即:fs.max>=2.56fmax,则采样之后的数字信号完整地保留了原始信号中的信息.

2.4时域信号的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.5数字滤波器的设计原理和方法

数字滤波是数字信号分析中最重要的组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。

数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。

2.6各种滤波器的性能比较

IIR滤波器与FIR滤波器的性能比较

FIR:Finite Impulse response,有限冲击响应

IIR:Infinite Impulse response,无限冲击响应

从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。相反,FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结果,成本较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。

整体来看,IIR滤波器达到同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大

3.设计内容

3.1语音信号的采集

利用wingdows下的录音机,录制一段自己的话音,时间在1s内。然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。理解采样频率、采样位数等概念。

MATLAB函数:wavread功能对语音信号进行采样。

Wavread函数的格式为:Y=wavread(filename.wav,[n1,n2]),返回文件中语音信号从n1到n2之间的样本。

程序录入

y=wavread('123.wav');y=y(:,1);sound(y);

Wp=0.5;Ws=0.8;Rs=100,Rp=1;

[N,Wn]=ellipord(Wp,Ws,Rp,Rs);

[b,a]=ellip(N,Rp,Rs,Wn);

[h,f]=freqz(b,a,256,1000);>>

x=filter(b,a,y);>>x1=fft(x);>>

subplot(121);plot(x)>>

subplot(122);plot(abs(x1))>>

figure;subplot(121);plot(abs(h));>>

subplot(122);plot(f,angle(h));sound(x)

3.2语音信号的频谱分析

在MATLAB软件平台下,利用wavread函数对语音信号进行采样,得到了声音数据变量y,同时把y的采样频率Fs=8000Hz和数据位Nbits=8Bit放进了MATLAB的工作空间。用sound函数对语音信号进行播放,并可对语音信号进行频谱分析,在MATLAB 中可以利用函数FFT对信号进行快速傅里叶变换。

函数FFT的调用格式为:

fft(x,n);

其中,x为所要进行快速傅里叶变换的语音信号,n为所要进行的傅里叶变换的点数,在本次的课程设计中我所使用的n的点数为原语音信号的长度,但也可使用1024、512等。

wavread函数的调用格式为:

[y,fs,nbits]=wavread('语音信号文件名');

sound函数的调用格式为:

sound(y,fs,nbits);

求信号的长度的函数为length(),其调用格式为:

length(y);

其中,y为所要求长度的信号。

对原语音信号的采集及回放和时域、频域的波形的程序如下:

[y,fs,nbits]=wavread('你好');%把语音信号加载入Matlab仿真软件平台

sound(y,fs,nbits);%回放语音信号

subplot(2,1,1);plot(y);title('原语音信号的时域波形');

grid on;%加网格

legend('Waveform');

xlabel('Time(s)');%标横坐标

ylabel('Amplitude');%标纵坐标

n=length(y);%求出语音信号的长度

Y=fft(y,n);%傅里叶变换

Y1=fftshift(Y);%对频谱图进行平移

subplot(2,1,2);plot(abs(Y1));title('原语音信号的频谱图');

grid on;%加网格

上述的程序是在MATLAB软件中采集并回放出原语音信号并画出其时域波形及频谱图。在MATLAB软件中运行上述程序可得到原语音信号的时域波形和其频谱图如图2.1所示。

图2.1

由频谱图可看出,原语音信号的频率大约集中在500Hz以内,由采样定理可得f>2f=2×500=1000Hz,故重放语音后仍可较清晰地听出原语音信号,不存在声音混叠s

现象。

3.3设计数字滤波器

要对加入噪声的语音信号进行滤波,需设计合适的滤波器。由图形可看出,用窗函数法设计带阻滤波器可对对加噪语音信号进行滤波。设计带阻滤波器,并绘制滤波器的图形。

程序设计如下:

%设计带阻滤波器

wlp=2850*pi*2/fs;wls=3400*pi*2/fs;

wup=4900*pi*2/fs;wus=4600*pi*2/fs;

B=(wus-wls);

M=ceil(12*pi/B)-1;

wp=[(wls+wlp)/2/pi,(wus+wup)/2/pi];

[bz,az]=fir1(M,wp,'stop',blackman(M+2));

hn=fir1(M,wp,'stop',blackman(M+2));

%带阻滤波器窗函数图像

figure(5)

subplot(1,1,1);

freqz(hn);

grid on;

axis tight;

title('窗函数图像');

xlabel('Hz');

ylabel('幅度');

程序运行结果如下:

3.4对信号进行滤波处理

对加入噪声的语音信号进行滤波。用加窗函数的方法设计了巴带阻滤波器对加噪语音信号进行滤波,并绘制了加噪语音信号滤波后的时域图和频谱图。

程序设计如下:

%画滤波后的图

figure(6)

freqz(bz,az);

grid on;axis tight;

y3=filter(bz,az,x1);

X=fft(y3,20480);

%滤波后时域图

subplot(2,1,1);

plot(y3);

grid on;

ylim([-0.03,0.03]);

title('滤波后信号时域波形');

xlabel('time(s)');

ylabel('幅度');

%滤波后频谱

subplot(2,1,2);

plot(abs(X(1:10240)));

title('滤波后信号频谱');

grid on;

ylim([0,20]);

xlabel('Hz');

ylabel('幅度');

程序运行结果如下;

经过滤波后得出的语音信号相比较,低通滤波后,声音稍微有些发闷,但是很接近原来的声音。

3.5对信号加低频噪音

程序如下:

%加低频噪音

d1=[0.5*cos(2*pi*200*t)]';%加噪

x4=x0+d1;

y4=fft(x4,20480);

%加噪后语音信号的时域图

figure(7)

subplot(1,1,1);

plot(t,x4)

grid on;

axis tight;

title('加噪后的信号时域'); xlabel('time(s)');

ylabel('幅度');

%加噪后语音信号的频域图figure(8)

subplot(1,1,1);

plot(f,abs(y4(1:10240))); grid on;

axis([0,8000,0,20]);

title('加噪语音信号频谱'); xlabel('Hz');

ylabel('幅度');

运行结果:

总结

本文对语音信号处理系统的设计作了详细的介绍,采用一系列图像分析和处理技术,实现了语音信号的基本处理的功能,经过测试运行,基本达到预期目的。完成了对语音信号的读取与打开;较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;在滤波这一块,基本实现了滤波,完成了各种滤波器的滤波效果比较,与课题的要求十分相符。

本实验设计采用了高效快捷的开发工具——MATLAB,实现了语音信号的采集,对语音信号加噪声及设计滤波器滤除噪声的一系列工作。论文初步完成了设计任务,由于本人能力有限,还存在许多不足的地方,比如滤波器的设计种类还比较单一,没有做更多的滤波效果比较等。在以后的工作和学习中会更加努力来完善设计任务。

本设计圆满的完成了对语音信号的读取与打开,与课题的要求十分相符;本设

计也较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;也从一方面基本实现了滤波,得到与原信号相差不是很大的信号。

语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。也就是说,课题更多的还是体现了数字信号处理技术。

从课题的中心来看,课题是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音的处理。作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。

在这里,用到了处理数字信号的强有力工具MATLAB,通过MATLAB里几个命令函数的调用,很轻易的在实际化语音与数字信号的理论之间搭了一座桥。

课题的特色在于它将语音看作了一个向量,于是语音数字化了,则可以完全利用数字信号处理的知识来解决。我们可以像给一般信号做频谱分析一样,来给语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。

但由于知识能力有限,当中也存在相当的不足,特别体现在滤波与界面设计这一块。对滤波的研究,本文只是举出了很小的一个方面,还有许多精髓都未能一一列举。当然,这些问题与不足在今后的进一步学习中,我会一步一步的去进行解决。

致谢

经过努力和完善,系统终于可以正常的运行。在这里首先感谢老师,在这段时间认真负责的监督我们的进度,耐心的指导我们使我们能够按时的完成任务。还有感谢学校为我们提供的良好实验环境以及充足的实验设备,为我们的设计和调试提供了很大的方便。还要感谢在实验过程中帮助我的同学,感谢他们热心的帮助,耐心的讲解和示范。在这段时间学到了很多,虽然由于自身的不足没有能够为系统提出更好的解决方案。但这对我来说绝对是一个非常宝贵的历练。从中我切身体会到了理论和现实的差距,只有真正动手去做才能发现问题。最后,感谢所有对我提供过帮助的人。谢谢。

参考文献

[1]高西全、丁玉美编著,数字信号处理。西安:西安电子科技大学出版社,2008.

[2]丁玉美、高西全编著,数字信号处理学习指导。西安:西安电子科技大学出版社,2001.

[3]郑君里等编,信号与系统。北京:高等教育出版社,2000.

[4]刘树棠译,数字信号处理——使用MATLAB。西安:西安交通大学出版社,2002.

[5]导向科技编著,MATLAB程序设计与实例应用。北京:中国铁道出版社,2001.

[6]罗军辉等编著,MATLAB7.0在数字信号处理中的应用。北京:机械工程出版社,2005.

[7]陈怀琛等编著,MATLAB及在电子信息课中的应用。北京:电子工业出版社,2002.

[8]胡广书编组,数字信号处理——理论、算法与实现。北京:清华大学出版社,2002.

[9]梁虹等编,信号与线性系统分析——机遇MATLAB的方法与实现。北京:高等教育出版社,2006.

[10]刘卫国主编,MATLAB程序设计与应用(第二版)。北京:高等教育出版社,2006.

附录:实验所有程序:

fs=16000;

x0=wavread('E:\xinhao1'); t=(0:length(x0)-1)/16000; f=fs*(0:10239)/20480;

y1=fft(x0,20480);

%画语音信号时域图figure(1)

subplot(1,1,1);

plot(t,x0)

grid on;

axis tight;

title('原始语音信号时域'); xlabel('time(s)');

ylabel('幅度');%画语音信号频域图

figure(2)

subplot(1,1,1);

plot(f,abs(y1(1:10240)));

grid on;

axis([0,8000,0,20]);

title('原始语音信号频谱'); xlabel('Hz');

ylabel('幅度');

%加噪后语音信号变化

d=[0.15*cos(2*pi*4000*t)]';%加噪x1=x0+d;

y2=fft(x1,20480);

%加噪后语音信号的时域图

figure(3)

subplot(1,1,1);

plot(t,x0)

grid on;

ylim([-0.03,0.03]);

axis tight;

title('加噪后的信号时域');

xlabel('time(s)');

ylabel('幅度');

%加噪后语音信号的频域图

figure(4)

subplot(1,1,1);

plot(f,abs(y2(1:10240)));

grid on;

axis([0,8000,0,20]);

title('加噪语音信号频谱');

xlabel('Hz');

ylabel('幅度');

%设计带阻滤波器

wlp=2850*pi*2/fs;wls=3400*pi*2/fs; wup=4900*pi*2/fs;wus=4600*pi*2/fs;

B=(wus-wls);

M=ceil(12*pi/B)-1;

wp=[(wls+wlp)/2/pi,(wus+wup)/2/pi]; [bz,az]=fir1(M,wp,'stop',blackman(M+2)); hn=fir1(M,wp,'stop',blackman(M+2));

%带阻滤波器窗函数图像

figure(5)

subplot(1,1,1);

freqz(hn);

grid on;

axis tight;

title('窗函数图像');

xlabel('Hz');

ylabel('幅度');

%画滤波后的图

figure(6)

freqz(bz,az);

grid on;axis tight;

y3=filter(bz,az,x1);

X=fft(y3,20480);

%滤波后时域图subplot(2,1,1);

plot(y3);

grid on;

ylim([-0.03,0.03]);

title('滤波后信号时域波形');

xlabel('time(s)');

ylabel('幅度');

%滤波后频谱

subplot(2,1,2);

plot(abs(X(1:10240)));

title('滤波后信号频谱');

grid on;

ylim([0,20]);

xlabel('Hz');

ylabel('幅度');

d1=[0.5*cos(2*pi*200*t)]';%加噪

x4=x0+d1;

y4=fft(x4,20480);

%加噪后语音信号的时域图

figure(7)

subplot(1,1,1);

plot(t,x4)

grid on;

axis tight;

title('加噪后的信号时域');

xlabel('time(s)');

ylabel('幅度');

%加噪后语音信号的频域图

figure(8)

subplot(1,1,1);

plot(f,abs(y4(1:10240)));

grid on;

axis([0,8000,0,20]);

title('加噪语音信号频谱');

xlabel('Hz');

ylabel('幅度');

%加高通滤波

wp1=100*pi*2/fs;

ws1=60*pi*2/fs;

Rp1=1;

As1=100;

[N1,wso]=ellipord(wp1,ws1,Rp1,As1); [B1,A1]=ellip(N1,Rp1,As1,wso,'high');

figure(9)

freqz(B1,A1); grid on;

ylim([0,1]);

y4=filter(B1,A1,x4); X1=fft(y4,20480); %滤波后时域图subplot(2,1,1); plot(y4);

grid on;

%axis tight;

ylim([-0.03,0.03]);title('滤波后信号时域波形'); xlabel('time(s)');

ylabel('幅度');

%滤波后频谱

subplot(2,1,2);

plot(abs(X1(1:10240))); title('滤波后信号频谱'); grid on;

%ylim([0,20]);

axis tight;

xlabel('Hz');

ylabel('幅度');

相关主题