数字信号处理课程设计-语音信号的处理与滤波-精品
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工学院
数字信号处理课程设计
说明书
设计题目语音信号的处理与滤波
系别计算机工程系
专业班级通信061
学生姓名
学号
指导教师
日期日
摘要:本文主要利用MATLAB工具采用双线性法和窗函数法设计IIR滤波器和FIR数字滤波器,并通过所设计的滤波器进行语音信号滤波分析,初步学会信号处理的过程和分析问题的能力。
关键词:MA TLAB 滤波器设计
一.引言
随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。
数字信号处理在通信语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理应用中,数字滤波器十分重要并已获得广泛应用。
二.MATLAB工具简介
1.MA TLAB是矩阵实验室(Matrix Laboratory)之意,现已发展成为适合多学科,多种工作平台的功能强大的大型软件,已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;
2.MA TLAB的语言特点
(1)。
语言简洁紧凑,使用方便灵活,库函数极其丰富。
MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。
由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。
(2)运算符丰富。
由于MA TLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MA TLAB的运算符将使程序变得极为简短。
(3)MA TLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
(4)程序限制不严格,程序设计自由度大。
例如,在MA TLAB里,用户无需对矩阵预定义就可使用。
(5)程序的可移植性很好,基本上不做修改就可在各种型号的计算机和操作系统上运行。
(6)MA TLAB的图形功能强大。
在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。
MA TLAB还具有较强的编辑图形界面的能力。
(7)MA TLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。
由于MA TLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
(8)功能强大的工具箱是MA TLAB的另一特色。
MA TLAB包含两个部分:核心部分和各种可选的工具箱。
核心部分中有数百个核心内部函数。
其工具箱又分为两类:功能性工具箱和学科性工具箱。
功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。
功能性工具箱用于多种学科。
而学科性工具箱是专业性比较强的,如control,toolbox,signl proceessing toolbox,commumnication toolbox等。
(9)源程序的开放性。
开放性也许是MA TLAB最受人们欢迎的特点。
除内部函数以外,所有MA TLAB 的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
三.设计目的
通过对课程设计,对信号的采集,处理,传输,显示,存储和分析等有一个系统的掌握和理解。
巩固和运用在数字信号处理课程中所学的理论知识和实验技能,掌握最基本的数字信号处理的理论和方法,培养发现问题,分析问题和解决问题的能力。
四.设计理论依据
采样频率,采样位数的概念,采样定理;时域信号的DFT,FFT及频谱分析;数字滤波器的设计原理和方法。
五.设计过程(设计步骤)
1.语音信号的采集及频谱分析
用WINDOWS下的录音机,用单声道录制一段音乐或声音,时间在5S内。
然后MATLAB软件平台下,利用函数WAVREAD对语音信号进行采样,记住采样频率和采样点数。
对语音信号进行快速傅立叶变换,在一个窗口同时画出信号的时域波形图和频谱图,分析语音信号的频谱特点。
程序如下:
[y,fs,bits]=wavread('music.wav',[1024 61500]);
sound(y,fs,bits);
Y=fft(y); plot(y);
figure(1); title('语音信号的时域波形');
grid
figure(2);
plot(abs(Y)); title('语音信号的频谱特性');
grid
图形如下:
2:设计数字滤波器
给出个滤波器的性能指标:
(1)低通滤波器性能指标 fb=1000HZ,fc=1200HZ,As=100dB,Ap=1dB
(2) 高通滤波器性能指标 fb=2800HZ,fc=3000HZ,As=100dB,Ap=1dB
(3)带通滤波器性能指标 fb1=1200HZ,fc1=1000HZ, fb2=2800HZ,fc2=3000HZ As=100dB,Ap=1dB
用窗函数法和双线性变换法设计以上要求的3种数字滤波器绘制个滤波器的频率响应。
IIR低通滤波器,程序如下:
Ap=1; As=100; fs=4000;fb=1000;fc=1200;
%频率预畸
wb=(fb/fs)*2*pi;%临界频率采用角频率表示
wc=(fc/fs)*2*pi;%临界频率采用角频率表示
OmegaP=2*fs*tan(wb/2);
OmegaS=2*fs*tan(wc/2);
[n,wn]=buttord(OmegaP,OmegaS,Ap,As,'s');
[b,a]=butter(n,wn,'s');
[bz,az]=bilinear(b,a,fs);%映射为数字的
[H,W]=freqz(bz,az);%绘出频率响应
plot(W*fs/(2*pi),abs(H));
title('IIR低通滤波器');
IIR高通滤波器,程序如下:
fs=22050;Ap=1;As=100;fb=5000;fc=4800;
wb=(fb/fs)*2*pi;%临界频率采用角频率表示
wc=(fc/fs)*2*pi;%临界频率采用角频率表示
OmegaP=2*fs*tan(wb/2);
OmegaS=2*fs*tan(wc/2);
[n,wn]=cheb1ord(OmegaP,OmegaS,Ap,As,'s');
[b,a]=cheby1(n,Ap,wn,'high','s');
[bz,az]=bilinear(b,a,fs);%映射为数字的
[H,W]=freqz(bz,az);%绘出频率响应
f=W/pi*11025;
plot(f,20*log10(abs(H)));
title('IIR高通滤波器');
IIR带通滤波器,程序如下:
fb1=1200;fb2=3000;fc1=1000;fc2=3200;
Ap=1;As=100;fs=8000;
wb1=(fb1/fs)*2*pi; wb2=(fb2/fs)*2*pi;
wc1=(fc1/fs)*2*pi; wc2=(fc2/fs)*2*pi;
OmegaP1=2*fs*tan(wb1/2); OmegaP2=2*fs*tan(wb2/2);
OmegaS1=2*fs*tan(wc1/2); OmegaS2=2*fs*tan(wc2/2);
[n,wn]=cheb1ord([OmegaP1,OmegaP2],[OmegaS1,OmegaS2],Ap,As,'s'); [b,a]=cheby1(n,Ap,wn,'bandpass','s');
[bz,az]=bilinear(b,a,fs);%映射为数字的
[H,W]=freqz(bz,az);%绘出频率响应
f=fs*W/pi/2;
plot(f,20*log10(abs(H)));
title('IIR带通滤波器');
FIR低通滤波器,程序如下:
fb=1000;fc=1200;fs=22050;
beta=10.056;
wb=2*pi*fb/fs;
wc=2*pi*fc/fs;
width=wc-wb;
wn=(wb+wc)/2;
n=ceil(12.8/width*pi);
b=fir1(n,wn/pi,kaiser(n+1,beta));
[H,W]=freqz(b);
f=fs*W/pi/2;
plot(f,20*log10(abs(H)));
grid on;
FIR高通滤波器,程序如下:
fb=5000;fc=4800;fs=22050;
[n,Wn,beta,typ]=kaiserord([fc, fb],[0 1],[0.001 0.001],fs);
b=fir1(n,Wn,typ,kaiser(n+1,beta),'noscale');
[H,W]=freqz(b);
f=fs*W/pi/2;
%f=W/pi*(fs/2);
plot(f,20*log10(abs(H)));
title('FIR高通滤波器');
grid on;
FIR带通滤波器,程序如下:
fs=12000;
fcuts=[1000,1200,3000,3200];
mags=[0,1,0];
devs=[0.01,0.0078,0.01];
[n,wn,beta,ftype]=kaiserord(fcuts,mags,devs,fs); n=n+rem(n,2);
b=fir1(n,wn,ftype,kaiser(n+1,beta),'noscale'); [H,W]=freqz(b,1,1024,fs);
plot(W,abs(H));
title('FIR带通滤波器');
各滤波器的图形如下:
3:用滤波器对信号进行滤波
IIR低通滤波器滤波,程序如下:
Ap=1; As=100; fs=4000;fb=1000;fc=1200; %频率预畸
wb=(fb/fs)*2*pi;%临界频率采用角频率表示wc=(fc/fs)*2*pi;%临界频率采用角频率表示OmegaP=2*fs*tan(wb/2);
OmegaS=2*fs*tan(wc/2);
[n,wn]=buttord(OmegaP,OmegaS,Ap,As,'s'); [b,a]=butter(n,wn,'s');
[bz,az]=bilinear(b,a,fs);%映射为数字的[H,W]=freqz(bz,az);%绘出频率响应
plot(W*fs/(2*pi),abs(H));
title('IIR低通滤波器');
[y,fs,bits]=wavread('music.wav');
x=filter(bz,az,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱');
grid on
IIR高通滤波器滤波,程序如下:
fs=22050;Ap=1;As=100;fb=5000;fc=4800; wb=(fb/fs)*2*pi;%临界频率采用角频率表示
wc=(fc/fs)*2*pi;%临界频率采用角频率表示
OmegaP=2*fs*tan(wb/2);
OmegaS=2*fs*tan(wc/2);
[n,wn]=cheb1ord(OmegaP,OmegaS,Ap,As,'s');
[b,a]=cheby1(n,Ap,wn,'high','s');
[bz,az]=bilinear(b,a,fs);%映射为数字的
[H,W]=freqz(bz,az);%绘出频率响应
f=W/pi*11025;
plot(f,20*log10(abs(H)));
title('IIR高通滤波器');
grid on;
[y,fs,bits]=wavread('music.wav');
x=filter(bz,az,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱');
grid on
IIR带通滤波器滤波,程序如下:
fb1=1200;fb2=3000;fc1=1000;fc2=3200;
Ap=1;As=100;fs=8000;
wb1=(fb1/fs)*2*pi; wb2=(fb2/fs)*2*pi;
wc1=(fc1/fs)*2*pi; wc2=(fc2/fs)*2*pi;
OmegaP1=2*fs*tan(wb1/2); OmegaP2=2*fs*tan(wb2/2);
OmegaS1=2*fs*tan(wc1/2); OmegaS2=2*fs*tan(wc2/2);
[n,wn]=cheb1ord([OmegaP1,OmegaP2],[OmegaS1,OmegaS2],Ap,As,'s'); [b,a]=cheby1(n,Ap,wn,'bandpass','s');
[bz,az]=bilinear(b,a,fs);%映射为数字的
[H,W]=freqz(bz,az);%绘出频率响应
f=fs*W/pi/2;
plot(f,20*log10(abs(H)));
title('IIR带通滤波器');
grid on;
[y,fs,bits]=wavread('music.wav');
x=filter(bz,az,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱'); grid on
FIR低通滤波器滤波,程序如下:fb=1000;fc=1200;fs=22050;
beta=10.056;
wb=2*pi*fb/fs;
wc=2*pi*fc/fs;
width=wc-wb;
wn=(wb+wc)/2;
n=ceil(12.8/width*pi);
b=fir1(n,wn/pi,kaiser(n+1,beta)); [H,W]=freqz(b);
f=fs*W/pi/2;
%f=W/pi*(fs/2);
plot(f,20*log10(abs(H)));
title('FIR低通滤波器');
grid on;
[y,fs,bits]=wavread('music.wav');
x=fftfilt(b,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱'); grid on
FIR高通滤波器滤波,程序如下:
fb=5000;fc=4800;fs=22050;
[n,Wn,beta,typ]=kaiserord([fc, fb],[0 1],[0.001 0.001],fs); b=fir1(n,Wn,typ,kaiser(n+1,beta),'noscale');
[H,W]=freqz(b);
f=fs*W/pi/2;
%f=W/pi*(fs/2);
plot(f,20*log10(abs(H)));
title('FIR高通滤波器');
grid on;
[y,fs,bits]=wavread('music.wav');
x=fftfilt(b,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱');
grid on
FIR带通滤波器滤波,程序如下:
fs=12000;
fcuts=[1000,1200,3000,3200];
mags=[0,1,0];
devs=[0.01,0.0078,0.01];
[n,wn,beta,ftype]=kaiserord(fcuts,mags,devs,fs);
n=n+rem(n,2);
b=fir1(n,wn,ftype,kaiser(n+1,beta),'noscale');
[H,W]=freqz(b,1,1024,fs);
plot(W,abs(H));
title('FIR带通滤波器');
[y,fs,bits]=wavread('music.wav');
x=fftfilt(b,y);
plot(x);title('滤波后的波形');
grid on
X=fft(x);
plot(abs(X));title('滤波后的频谱');
grid on
4:回放语音信号
对语音信号进行回放,感觉滤波前后语音信号的变化。
Sound(x,fs,bits);
五.总结与分析
通过本次课程设计,使我们对信号的采集,处理,传输,显示,存储和分析等有一个系统的掌握和理解。
同时可以看到滤波器在语音处理的重要性,学到了很多滤波器的设计方法,对MATLAB这个软件有了进一步的了解,巩固和运用在数字信号处理课程中所学的理论知识和实验技能,掌握最基本的数字信号处理的理论和方法,提高了自己的发现问题,分析问题和解决问题的能力。
参考文献:
1.张威编. MA TLAB基础与编程入门. 西安:西安电子科技大学出版社,2005
2.邹鲲,袁俊泉,编著. MA TLAB 6.x信号处理. 北京:清华大学出版社,2004
3.楼天顺,李博菡,编著. 基于MA TLAB的系统分析与设计——信号处理. 西安电子科技大学出版社。