《基于MATLAB的FIR滤波器设计》
课程设计报告
专 业: 通信工程
班 级:
学 号:
姓 名:
指导教师:
20## 年 6 月 30 日
目 录
一、 概述…………………………………………………………3
1、设计目的…………………………………………………3
2、设计要求…………………………………………………3
3、系统功能…………………………………………………3
二、滤波器原理……………………………………………………3
三、软件设计流程…………………………………………………5
1、语音信号的采集…………………………………………5
2、语音信号的频谱分析……………………………………5
3、用滤波器对语音信号进行分析…………………………5
4、回放语音信号……………………………………………6
四、源程序代码及整体波形………………………………………6
五、总结……………………………………………………………8
(要求:给出一级目录,宋体加粗,四号字,1.5倍行距。)
一、概述
1)设计目的
通过对课程设计任务的完成,使我们进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使掌握的基本理论和分析方法方面的知识得到进一步扩展;能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。
2)设计要求
1、认真独立的完成课程设计。
2、通过课程设计,加深对所学知识的理解和认识。
3、仿真调试通过,达到预期效果。
4、写出设计报告。
3)系统功能
因对语音信号加噪后如不进行滤波会产生很大的失真,滤波器的作用会把滤波器工作频率以外的频谱成分滤除掉,可较好的回复原语音信号,滤波器的作用在实际工作中的作用也如此,如要传输的信号通过信道后会叠加上高斯白噪声,在解调之前可先通过BPF滤除BPF以外的噪声。
二、滤波器原理
1)FIR和IIR数字滤波器的选择
数字滤波器根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即无限冲击响应IIR滤波器和有限冲击响应FIR滤波器。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器必须采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性相位滤波器,经常采用FIR滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在极点处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过FIR滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。 FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
本次设计中采用的是IIR滤波器,IIR数字滤波器的幅频特性精度较高,且阶数较FIR低,同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等。本次设计中接住了巴特沃斯滤波器的设计。
2)FIR滤波器的程序设计
由频谱图可以看出信号能量集中在低频部分,为了减少无用的高频分量我设计了以下的FIR低通滤波器将其滤除。
该设计采用窗函数法来完成以下指标的低通滤波器。通带截频fp=3000Hz,阻带截频fs=3500Hz,通带最大衰减0.3dB,阻带最小衰减50dB,采样频率fs为信号源采样频率22050Hz。
源程序如下:
fs=22050;%信号的采样频率
fc1=1500;%基带信号频率
wc1=2*pi*fc1/fs;%相对角频率
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
Window=boxcar(N1+1); %长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(1);
freqz(b1,1,512); %绘制滤波器的幅频响应图
title('低通滤波器的频率响应');
三、软件设计流程
1、语音信号的采集
利用Windows下的录音机, 录制一段自己的话音, 时间在几秒内。然后在Matlab软件平台下, 利用函数wavread对语音信号进行采样, 记住采样频率和采样点数。
[x,fs,bits]=wavread();
2、语音信号的频谱分析
首先画出语音信号的时域波形, 然后对语音信号进行频谱分析。 在Matlab 中, 可以利用函数fft对信号进行快速傅里叶变换, 得到信号的频谱特性。
3、用滤波器对语音信号进行滤波
设计滤波器对采集的信号进行滤波, 比较滤波前后语音信号的波形及频谱。
要求自己确定滤波器的性能指标,用冲激响应不变法、双线性变换法或窗函数法设计低通滤波器。
4、回放语音信号
在Matlab中, 函数sound 可以对声音进行回放,其调用格式:
sound (x, fs, bits);
四、源程序代码及整体波形
1.程序代码:
fs=8000;
fc1=1500;
wc1=2*pi*fc1/fs;
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
Window=boxcar(N1+1); %长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(1);
freqz(b1,1,512);
title('低通滤波器的频率响应');
[x,fs,bits]=wavread('D:/音乐/录音.wav');%信号读取
N= length (x) ; %求出语音信号的长度
%sound(x,fs,nbits); %回放语音信号
X=fft(x,N);
figure(2)%傅里叶变换
subplot(211);
plot(x);title('原始信号波形');
subplot(212);
plot(abs(X));
title('原始信号频谱')
sound(x,fs);
Si=awgn(x,40)
figure(3)
subplot(211);
plot(Si)
title('加噪语音信号的时域波形');
y1=fft(Si);
subplot(212)
plot(abs(y1));
title('加噪信号的频谱');
y=filter(b1,1,Si); %滤波输出
figure(4)
%绘制输入信号
subplot(2,1,1); plot(Si),title('输入信号')
%绘制输出信号
subplot(2,1,2);plot(y)
title('输出信号')
sound(y,fs);
%输入输出频谱
X=fft(Si);
Y=fft(y);
figure(5);
subplot(2,1,1);plot(abs(X));
xlabel('频率');ylabel('幅度');
title('输入信号频谱');grid on;
subplot(2,1,2);plot(abs(Y));
xlabel('频率');ylabel('幅度');
title('输出信号频谱');grid on;
2.图形:
五、设计总结
通过此次课程设计,让我了解到数字滤波是数字信号分析中最重要的组成部分之一,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。同时了解到MATLAB具有许多的优点比如:语言简洁紧凑,使用方便灵活,库函数极其丰富;以及面向对象编程的特性。