资源描述
基于MATLAB的数字滤波器设计及其对语音信号的应用
班级:电信1001
姓名:马维民
学号:1010930110
指导教师:刘丽杰 耿磊
日期:2013-11-28
课程设计的目的:
1).掌握数字信号处理的基本概念、基本理论和基本方法;
2).掌握MATLAB设计FIR和IIR数字滤波器的方法;
3).掌握在Windows环境下语音信号采集以及时域、频域分析;
4).学会MATLAB的使用,掌握MATLAB的程序设计方法;
5).学会用MATLAB对信号进行分析和处理。
1. 课程设计内容:
1).录制一段自己的语音信号,对录制的信号进行采样;
2).画出采样后语音信号的时域波形和频谱图;
3).给定滤波器的性能指标,采MATLAB设计数字滤波器,并画出滤波器的频率响应;
4).然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;
5).回放语音信号。
2. 滤波器设计方法综述:
1).直接设计数字滤波器;
数字滤波器是数字信号处理的一个重要组成部分。数字滤波实际上是一种运算过程,其功能是将一组输入的数字序列通过一定的运算后转变为另一组输出的数字序列。
数字滤波器一般可以用两种方法来实现:一种是根据描述数字滤波器的数学模型或信号流图,用数字硬件装配成一台专门的设备,构成专用的信号处理机;另一种方法就是直接利用通用计算机,将所需要的运算编成程序让计算机来执行,这也是用软件来实现数字滤波器。
数字滤波器是离散时间系统,所处理的信号是离散时间信号。一般时域离散系统或网络可以用差分方程、单位脉冲响应以及系统函数进行描述。如果输入、输出服从N阶差分方程
则其系统函数,即滤波器的传递函数为
4).使用MATLAB下的Filter Designed Tool3。
在Command Window窗口中输入fdatool,出现滤波器设计工具界面
设计思路:首先将数字高通滤波器的技术指标转化为模拟滤波器的技术指标,再采用Buttetworth逼近的方法求得其系统函数H(S),再利用冲激响应不变法将模拟滤波器的系统函数H(s)变为相应的数字滤波器的系统函数H(Z),然后用MATALB进行仿真,然后确定数字滤波器的结构。
3. 具体步骤与任务:
4.1 语音信号的采集
录制一段自己的话音,或利用老师给的语音,在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
4.2语音信号的频谱分析
要求画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。
相应的MATLAB程序:
clear all
[I,Fs,bits]=wavread('1.wav');%读取语音信号1.wav
Y=fft(I); %进行快速傅里叶变换
mag=abs(Y); %求取幅度谱
phase=angle(Y); %求取相位谱
phase=phase*180/pi; %转换为Pi单位
dB=20*log10(abs(Y)+eps); %求取对数幅度谱
t=(0:length(I)-1)/Fs; %设置标度
subplot(221);plot(t,I);
title('波形图');xlabel('时间(s)');ylabel('幅度');%设置标题和横纵坐标
f=(1:length(Y))*Fs/length(Y); %设置标度
subplot(222);plot(f,mag);
title('幅度谱');xlabel('频率(Hz)');ylabel('频谱幅度');%设置标题和横纵坐标
subplot(223);plot(f,phase);
title('相位谱');xlabel('频率(Hz)');ylabel('频谱相位');%设置标题和横纵坐标
subplot(224);plot(f,dB);
title('对数幅度谱');xlabel('频率(Hz)');ylabel('频谱幅度(dB)');%设置标题和横纵坐标
图2 时域波形和信号的频谱特性
4.3设计数字滤波器,画出其频率响应曲线
各滤波器的性能指标:
(1)低通滤波器性能指标 fp=1000Hz, fs=1200Hz, As=40dB, Ap=1dB。
(2)高通滤波器性能指标 fs=4000Hz, fp=4300Hz, As=40dB, Ap=1dB
(3)带通滤波器性能指标 fp1=1200 Hz, fp2=3 000 Hz, fs1=1000 Hz, fs2=3200 Hz, As=40dB, Ap=1dB。
要求:
(1) 频率变换法设计IIR滤波器: 可以利用函数butter、cheby1、cheby2和ellip等设计。
(2) (选做)设计IIR滤波器:用双线性变换法设计上面要求的3种滤波器。Bilinear
(3) (选做)设计FIR滤波器:用窗函数法设计上面要求的3种滤波器。可以利用函数fir1设计FIR滤波器。
(4) 函数freqz画出各滤波器的频率响应。
4.4 用滤波器对信号进行滤波,比较滤波前后语音信号的波形及频谱
要求用自己设计的各滤波器分别对采集的语音信号进行滤波,并在一个窗口同时画出滤波前后的波形及频谱。
(1) IIR滤波器利用函数filter对信号进行滤波;
(2) FIR滤波器利用函数fftfilt对信号进行滤波。
3.5 回放语音信号
在MATLAB中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。原来已给的语音没有噪声,而滤波后出现了失真。
低通滤波器相应的MATLAB程序:
clear all
[I,Fs,bits]=wavread('1.wav');%读取语音信号1.wav
fp=1000; %通带截止频率
fs=1200; %阻带角频率
Ap=1; %通带纹波
As=40; %阻带衰减
[n,fn]= buttord(fp/(Fs/2),fs/(Fs/2),Ap,As); %巴特沃斯滤波器
[n1,fn1]=cheb1ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%切比雪夫I型滤波器
[n2,fn2]=cheb2ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%第二类切比雪夫滤波器
[n3,fn3]=ellipord(fp/(Fs/2),fs/(Fs/2),Ap,As);%最小椭圆滤波器
[b,a]=butter(n,fn); %巴特沃斯IIR滤波器
[b1,a1]=cheby1(n1,Ap,fn); %I型切比雪夫IIR滤波器
[b2,a2]=cheby2(n2,Ap,fn); %第二类切比雪夫滤波器
[b3,a3]=ellip(n3,Ap,As,fn); %椭圆滤波器
[h,w]=freqz(b,a); %滤波器的频率响应
[h1,w1]=freqz(b1,a1); %波器的频率响应
[h2,w2]=freqz(b2,a2); %波器的频率响应
[h3,w3]=freqz(b3,a3); %波器的频率响应
I1=filter(b,a,I); %1维数字滤波器
I3=filter(b1,a1,I); %1维数字滤波器
I5=filter(b2,a2,I); %1维数字滤波器
I7=filter(b3,a3,I); %1维数字滤波器
I2=fftfilt(b,I); %FFT的FIR滤波
I4=fftfilt(b1,I); %FFT的FIR滤波
I6=fftfilt(b2,I); %FFT的FIR滤波
I8=fftfilt(b3,I); %FFT的FIR滤波
subplot(441),plot(I);title('原始语音信号');
subplot(442),plot(I);title('原始语音信号');
subplot(443),plot(I);title('原始语音信号');
subplot(444),plot(I);title('原始语音信号');
subplot(445);plot(w*Fs/(2*pi),abs(h));title('巴特沃斯低通滤波');
subplot(446);plot(w1*Fs/(2*pi),abs(h1));title('切比雪夫1低通滤波');
subplot(447);plot(w2*Fs/(2*pi),abs(h2));title('切比雪夫2低通滤波');
subplot(448);plot(w3*Fs/(2*pi),abs(h3));title('椭圆低通滤波');
subplot(449);plot(I1);title('巴特沃斯IIR滤波后语音信号');
subplot(4,4,13);plot(I2);title('巴特沃斯FIR滤波后语音信号');
subplot(4,4,10);plot(I3);title('切比雪夫1IIR滤波后语音信号');
subplot(4,4,14);plot(I4);title('切比雪夫1FIR滤波后语音信号');
subplot(4,4,11);plot(I5);title('切比雪夫2IIR滤波后语音信号');
subplot(4,4,15);plot(I6);title('切比雪夫2FIR滤波后语音信号');
subplot(4,4,12);plot(I7);title('椭圆IIR滤波后语音信号');
subplot(4,4,16);plot(I8);title('椭圆FIR滤波后语音信号');
图3 低通滤波器波形图
高通滤波器相应的MATLAB程序:
clear all
[I,Fs,bits]=wavread('1.wav');%读取语音信号1.wav
fp=4300; %通带截止频率
fs=4000; %阻带角频率
Ap=1; %通带纹波
As=40; %阻带衰减
[n,fn]= buttord(fp/(Fs/2),fs/(Fs/2),Ap,As); %巴特沃斯滤波器
[n1,fn1]=cheb1ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%切比雪夫I型滤波器
[n2,fn2]=cheb2ord(fp/(Fs/2),fs/(Fs/2),Ap,As);%第二类切比雪夫滤波器
[n3,fn3]=ellipord(fp/(Fs/2),fs/(Fs/2),Ap,As);%最小椭圆滤波器
[b,a]=butter(n,fn,'high'); %巴特沃斯IIR滤波器
[b1,a1]=cheby1(n1,Ap,fn,'high'); %I型切比雪夫IIR滤波器
[b2,a2]=cheby2(n2,Ap,fn,'high'); %第二类切比雪夫滤波器
[b3,a3]=ellip(n3,Ap,As,fn,'high'); %椭圆滤波器
[h,w]=freqz(b,a); %滤波器的频率响应
[h1,w1]=freqz(b1,a1); %波器的频率响应
[h2,w2]=freqz(b2,a2); %波器的频率响应
[h3,w3]=freqz(b3,a3); %波器的频率响应
I1=filter(b,a,I); %1维数字滤波器
I3=filter(b1,a1,I); %1维数字滤波器
I5=filter(b2,a2,I); %1维数字滤波器
I7=filter(b3,a3,I); %1维数字滤波器
I2=fftfilt(b,I); %FFT的FIR滤波
I4=fftfilt(b1,I); %FFT的FIR滤波
I6=fftfilt(b2,I); %FFT的FIR滤波
I8=fftfilt(b3,I); %FFT的FIR滤波
subplot(441),plot(I);title('原始语音信号');
subplot(442),plot(I);title('原始语音信号');
subplot(443),plot(I);title('原始语音信号');
subplot(444),plot(I);title('原始语音信号');
subplot(445);plot(w*Fs/(2*pi),abs(h));title('巴特沃斯高通滤波');
subplot(446);plot(w1*Fs/(2*pi),abs(h1));title('切比雪夫1高通滤波');
subplot(447);plot(w2*Fs/(2*pi),abs(h2));title('切比雪夫2高通滤波');
subplot(448);plot(w3*Fs/(2*pi),abs(h3));title('椭圆高通滤波');
subplot(449);plot(I1);title('巴特沃斯IIR滤波后语音信号');
subplot(4,4,13);plot(I2);title('巴特沃斯FIR滤波后语音信号');
subplot(4,4,10);plot(I3);title('切比雪夫1IIR滤波后语音信号');
subplot(4,4,14);plot(I4);title('切比雪夫1FIR滤波后语音信号');
subplot(4,4,11);plot(I5);title('切比雪夫2IIR滤波后语音信号');
subplot(4,4,15);plot(I6);title('切比雪夫2FIR滤波后语音信号');
subplot(4,4,12);plot(I7);title('椭圆IIR滤波后语音信号');
subplot(4,4,16);plot(I8);title('椭圆FIR滤波后语音信号');
sound(I1,Fs,bits); %重放语音
sound(I3,Fs,bits); %重放语音
sound(I5,Fs,bits); %重放语音
sound(I7,Fs,bits); %重放语音
图4 高通滤波器波形图
4.实验总结:
通过本次的课程设计,加深了我对数字信号处理的基本概念、基本理论和基本方法的理解 ,更加全面的掌握了MATLAB设计FIR和IIR数字滤波器的方法,从而进行语音信号采集以及时域、频域分析,也加深了我对于用MATLAB GUI设计系统界面的理解,为即将到来的毕业设计打下坚实的基础。
感谢刘丽杰老师和耿磊老师对本次课程设计的大力指导,老师严谨的治学态度让学生受益匪浅,今后还要继续努力,不断推陈出新,加深自己对数字图像处理的不断理解。
展开阅读全文