一、课程设计的内容
录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
二、课程设计的要求与数据
1、 学生能够根据设计内容积极主动查找相关资料;
2、 滤波器的性能指标可以根据实际情况作调整;
3、 对设计结果进行独立思考和分析;
4、 设计完成后,要提交相关的文档;
1) 课程设计报告书(纸质和电子版各一份,具体格式参照学校课程设计管理规定),报告内容要涵盖设计过程、频谱图的分析.
2) 可运行的源程序代码(电子版)
5、 在基本要求的基础上,学生可以根据个人对该课程设计的理解,添加一些新的内容;
6、 详细设计要求参照<<数字信号处理>>课程设计指导手册.
三、课程设计应完成的工作
1、 语音信号的采集;
2、 语音信号的频谱分析;
3、 数字滤波器的设计;
4、 对语音信号进行滤波处理;
5、 对滤波前后的语音信号频谱进行对比分析;
四、课程设计进程安排
五、应收集的资料及主要参考文献
1, 数字滤波器设计方法;
2, 《数字信号处理及MATLAB实现》 余成波 杨如民等编著 清华大学出版社出版
3, 《数字信号处理教程》 程佩青 清华大学出版社出版
发出任务书日期: 20## 年 12 月 22 日 指导教师签名:
计划完成日期: 2008 年 12 月 26 日 基层教学单位责任人签章:
主管院长签章:
一、设计题目
应用Matlab对语音信号进行频谱分析及滤波
二、设计目的
为了巩固所学的数字信号处理理论知识,使学生对信号的采集、处理、传输、显示和存储等有一个系统的掌握和理解,安排了以下的课程设计的内容:
三、设计内容
录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后,设计一个信号处理系统界面。
2.1语音信号的采集
要求学生利用Windows下的录音机,录制一段自己的话音,时间在1 s内。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,学生很快理解了采样频率、采样位数等概念。
2.2语音信号的频谱分析
要求学生首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深学生对频谱特性的理解。
2.3设计数字滤波器和画出其频率响应
给出各滤波器的性能指标:
(1)低通滤波器性能指标fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通滤波器性能指标fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)带通滤波器性能指标fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As=100 dB,Ap=1 dB。
要求学生用窗函数法和双线性变换法设计上面要求的3种滤波器。在Matlab中,可以利用函数fir1设计FIR滤波器,可以利用函数butte,cheby1和ellip设计IIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。
2.4用滤波器对信号进行滤波
要求学生用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
2.5比较滤波前后语音信号的波形及频谱
要求学生在一个窗口同时画出滤波前后的波形及频谱。
2.6回放语音信号
在Matlab中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。
2.7设计系统界面
为了使编制的程序操作方便,要求有能力的学生,设计处理系统的用户界面。在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。
四、设计结果分析
代码:
一、语音信号的采集
[y,fs,bits]=wavread('j.wav',[1024 63500]);
sound(y,fs,bits);
二、语音信号的频谱分析
Y=fft(y,4096);
figure(1);
plot(y);title('语音信号的时域波形');
figure(2);
plot(abs(Y));title('语音信号的频谱特性');
IIR数字滤波器
低通
clear;close all;
[y,fs,bits]=wavread('j.wav',[1024 63500]);
Y=fft(y,4096);
fb=1000;fc=1200;As=100;Ap=1;fs=22050;
wc=2*fc/fs; wb=2*fb/fs;
[n,wn]=ellipord(wc,wb,Ap,As);
[b,a]=ellip(n,Ap,As,wn);
figure(1);
freqz(b,a,512,fs);
x=filter(b,a,y);
X=fft(x,4096);
figure(2);
subplot(2,2,1);plot(y);title('滤波前信号波形');
subplot(2,2,2);plot(abs(Y));title('滤波前信号频谱');
Subplot(2, 2 ,3);plot(x);title('滤波后信号波形');
Subplot(2, 2 ,4);plot(abs(X));title('滤波后信号频谱');
sound(x,fs,bits);
IIR 高通
wp=2*pi*4800/18000;wr=2*pi*5000/18000;Ap=1;Ar=15;T=1
[N,wn]=buttord(wp/pi,wr/pi,Ap,Ar);
[b,a]=butter(N,wn,'high');
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(211);plot(w/pi,mag);title('数字巴特沃茨高通滤波器幅度响应|Ha(J\Omega)|');
subplot(212);plot(w/pi,db);title('数字巴特沃茨高通滤波器幅度响应(db)');
[y,Fs,nbite]=wavread('j.wav',[1024 63500]);
Y=fft(y,4096);
x=filter(b,a,y);
X=fft(x,4096);
figure(3)
subplot(211);plot(y);title('原时域波形');
subplot(212);plot(x);title('滤波后信号波形');
figure(4)
subplot(211);plot(abs(Y));title('原频谱频谱');
subplot(212);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);
IIR 带通
wp=[1200*pi*2/9000,3000*2*pi/9000];wr=[1000*2*pi/9000,3200*2*pi/9000];Ap=1;Ar=100;
[N,wn]=buttord(wp/pi,wr/pi,Ap,Ar);
[b,a]=butter(N,wn,'bandpass');
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(211);plot(w/pi,mag);title('数字巴特沃茨带通滤波器幅度响应|Ha(J\Omega)|');
subplot(212);plot(w/pi,db);title('数字巴特沃茨带通滤波器幅度响应(db)');
[y,Fs,nbite]=wavread('j.wav');
Y=fft(y,4096);
x=filter(b,a,y);
X=fft(x,4096);
figure(3)
subplot(211);plot(y);title('原时域波形');
subplot(212);plot(x);title('滤波后信号波形');
figure(4)
subplot(211);plot(abs(Y));title('原频谱频谱');
subplot(212);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);
FIR 数字滤波器
FIR 低通
fsamp=8000;rp=1;rs=100;
fcuts=[1000 1200];
d1=(10^(rp/20)-1)/(10^(rp/20)+1);
d2=10^(-rs/20);
mags=[1 0];
devs=[d1 d2];
[n,wn,beta,ftype]=kaiserord(fcuts,mags,devs,fsamp);
hh=fir1(n,wn,ftype,kaiser(n+1,beta),'noscale');
freqz(hh);
[y,Fs,nbite]=wavread('j.wav');
Y=fft(y,4096);
x=fftfilt(hh,y);
X=fft(x,4096);
figure(2)
subplot(211);plot(y);title('原时域波形');
subplot(212);plot(x);title('滤波后信号波形');
figure(3)
subplot(211);plot(abs(Y));title('原频谱频谱');
subplot(212);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);
FIR 高通
wc=2*pi*4800;wp=5000*2*pi/18000;
f=[0.5333,0.5556]; m=[0,1];rp=1;rs=100;
d1=(10^(rp/20)-1)/(10^(rp/20)+1);d2=10^(-rs/20);
rip=[d2,d1];
[N,fo,mo,w]=remezord(f,m,rip);N=N+2;
hn=remez(N,fo,mo,w);
[hw,w]=freqz(hn,1);
plot(w/pi,20*log10(abs(hw)));
[y,Fs,nbite]=wavread('j.wav');
Y=fft(y,4096);
x=fftfilt(hn,y);
X=fft(x,4096);
figure(2)
subplot(211);plot(y);title('原时域波形');
subplot(212);plot(x);title('滤波后信号波形');
figure(3)
subplot(211);plot(abs(Y));title('原频谱频谱');
subplot(212);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);
FIR 带通
wp1=2*pi*1200/8000;wp2=3000*2*pi/8000;wc1=2*pi*1000/8000;wc2=2*pi*3200*8000;
f=[0.25,0.30,0.75,0.80]
[n,wn,bta,ftype]=kaiserord([0.25,0.30,0.75,0.80],[0 1 0],[0.01 0.1087 0.01]);
h1=fir1(n,wn,ftype,kaiser(n+1,bta),'noscale');
[hh1,w1]=freqz(h1,1,256);
figure(1);
plot(w1/pi,20*log10(abs(hh1)));
grid;
[y,Fs,nbite]=wavread('j.wav');
Y=fft(y,4096);
x=fftfilt(h1,y);
X=fft(x,4096);
figure(2)
subplot(211);plot(y);title('原时域波形');
subplot(212);plot(x);title('滤波后信号波形');
figure(3)
subplot(211);plot(abs(Y));title('原频谱频谱');
subplot(212);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);
设计结果分析
(0)语音分析
(1)IIR 低通
(2) IIR 高通
(3)IIR 带通
(4)FIR 低通
(5)FIR 高通
(6)FIR 带通
五.设计心得体会
这次课程设计,由于自己数字信号处理的理论课程跟不上进度,对数字滤波器的设计缺少认识。而且需要运用matlab软件,所以比较吃力。设计过程,看了一遍数字信号处理课程关于数字滤波器的设计的内容,再通过利用参考文献与网络,完成了用Matlab进行数字信号处理课程设计。通过课程设计,加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并能很好地理解与掌握数字信号处理中的基本概念、基本原理、基本分析方法。同时掌握编程方法和解决实际问题的技巧。 与其他高级语言的程序设计相比,MATLAB环境下可以更方便、快捷地设计出具有严格线性相位的FIR滤波器,节省大量的编程时间,提高编程效率,且参数的修改也十分方便,还可以进一步进行优化设计。相信随着版本的不断提高,MATLAB在数字滤波器技术中必将发挥更大的作用。同时,用MATLAB计算有关数字滤波器的设计参数,如H(z)、h(n)等,对于数字滤波器的硬件实现也提供了一条简单而准确的途径和依据。
六、参考文献
1, 《数字信号处理及MATLAB实现》 余成波 杨如民等编著 清华大学出版社版
2, 《数字信号处理教程》 程佩青 清华大学出版社出版
第二篇:FIR数字滤波器的设计实验报告
学生实验报告
课程名称 数字信号处理与应用 实验日期 2012 年 12 月 26 日
注:学生做每个实验都必须填写实验报告。实验报告可以是纸质的,也可以是电子形式的。凡电子文本形式的实验报告须在学期末刻录进该学期教学资料光盘并存个人教学档案。
实验指导教师签名 年 月 日