信号与系统课程设计-滤波器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大作业之滤波器设计
目录
一、实验背景
二、实验目的与要求
三、实验设计与思路
四、实验分析与结果
五、实验发挥
六、实验总结与体会
七、附件
一、实验背景
通过对信号与系统这门课的学习,随着课程学习到了尾声,有必要对这门课进行一次比较彻底的认识,因此完成课程实践的最后一项内容——滤波器的设计。

二、实验目的与要求
设计三个滤波器,实现单独提取单个频率分量的功能,即实现低通、带通和高通,并撰写大作业实验报告。

三、实验设计与思路
滤波器原理:滤波器是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其它频率成分。

由于该功能可以由许多种方式完成,而我设计的是FIR数字滤波器,使用hamming窗实现信号的筛选。

根据已知模拟信号表达式:
x(t)=cos(2*pi*500*t)+cos(2*pi*1000*t)+cos(2*pi*2000*t);从中知道我的实现频率为
f1=500,f2=1000,f3=2000;再根据定义的采样频率fs=500*(5+7)=6000;
根据滤波器的选频作用分类,
⑴低通滤波器
从0~f2频率之间,幅频特性平直,它可以使
信号中低于f2的频率成分几乎不受衰减地通过,而
高于f2的频率成分受到极大地衰减。

但是在实际设
计滤波器时f2处为0.707A处,要使滤波成功,就必
f1.须在通带到过渡带和过渡带到阻带处设两个两个截止频率,是fc=[440,580];根据自己的要求
⑵高通滤波器
与低通滤波相反,从频率f1~∞,其幅频
特性平直。

它使信号中高于f1的频率成分几乎
不受衰减地通过,而低于f1的频率成分将受到极大
地衰减。

同理,在设计时同样要根据自己的要求定
义过渡带的截止频率fn=[1890,1980];
⑶带通滤波器
~f2之间。

它使信号中高于f1而
低于f2的频率成分可以不受衰减地通过,而其
它成分受到衰减。

即fc=[890,910,1090,1130];
注:MATLAB中fir1函数使用说明:fir1是用窗函数法设计线性相位RIRDF的工具箱函数,以实现线性相位FIRDF的标准窗函数法设计。

●hn=fir1(M,wc),返回6dB截止频率为wc的M阶(单位脉冲响应h(n)长度N=M+1)FIR低通(wc为标量)滤波器系数向量hn,默认选用哈明窗。

滤波器单位脉冲响应h(n)与向量hn的关系为h(n)=hn(n+1),n=0,1,2,3,……,M 而且满足线性相位条件:h(n)=h(N-1-n)。

其中wc为对π归一化的数字频率,0=<wc=<1。

当wc=[wcl,wcu]时,得到的是带通滤波器,其中-6dB通带为wcl=<ω=<wcu。

●hn=fir1(M,wc,'ftype‘),可设计高通和带阻FIR滤波器。

当ftype=high时,设计高通FIR滤波器;应当注意,在设计高通和带阻FIR滤波器时,阶数M只能取偶数(h(n)长度N=M+1为奇数)。

不过,当用户将M设置为奇数时,fir1会自动对M加1。

●hn=fir1(M,wc,window),可以指定窗函数向量window。

默认为哈明窗。

例如,hn=fir1(M,wc,bartlett(M+1)),使用Bartlett窗设计。

hn=fir1(M,wc,blackman(M+1)),使用blackman窗设计。

hn=fir1(M,wc,'ftype',window),通过选择wc,ftype和window参数(含义同上),可以设计各种加窗滤波器。

这里我才用的是默认的hanming窗滤波法。

四、实验分析与结果
1、原信号显示
clear;
fs=6000;% 采样频率为6000 Hz
t=(1:128)/fs;%定义时间轴长度
x=cos(2*pi*500*t)+cos(2*pi*1000*t)+cos(2*pi*2000*t);
L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);
运行结果(频谱只表示一半):
2、% 设计低通滤波器进行滤波
fc=[440*2/fs,580*2/fs];% 归一化的截止频率
n=64; %设置短时傅里叶变换的长度,同时也是汉明窗的长度window=hamming(n+1);%设置汉明窗,hamming窗函数调用
b=fir1(n,fc,window);
x_1=filter(b,1,x); % 滤波
x_1(1:ceil(n))=[]; % 群延时n,删除无用信号部分
L=length(x_1); %得到x_1信号的长度
N=2^(nextpow2(L));
%对信号进行快速的Fouriers变换(FFT)
Hw_1=fft(x_1,N);
低通滤波器滤波后的x_1信号及频谱:
2、% 设计带通滤波器进行滤波
fc=[890*2/fs,910*2/fs,1090*2/fs,1130*2/fs];% 归一化的截止频率n=64;%定义阶数
window=hamming(n+1);%hamming窗函数调用
b=fir1(n,fc,window);
x_2=filter(b,1,x);% 滤波
% 群延时n,删除无用信号部分
x_2(1:ceil(n))=[];
L=length(x_2);N=2^(nextpow2(L));
Hw_2=fft(x_2,N);
带通滤波器滤波后的x_1信号及频谱:
3、% 设计高通滤波器进行滤波
fn=[1950*2/fs,1980*2/fs];% 归一化的截止频率
N=64;
window=hamming(N+1);
b=fir1(N,fn,window);% N为滤波器的阶数,对于高通和带阻,N取偶数
% windows为窗函数列向量,其长度为N+1 x_3=filter(b,1,x);% 滤波%x_3=conv(b,x);
% 群延时N,删除无用信号部分
x_3(1:ceil(N))=[];
L=length(x_3);N=2^(nextpow2(L));
Hw_3=fft(x_3,N);
高通滤波器滤波后的x_3信号及频谱:
上图中由于采样点的不足,导致完整的正弦波不能实现。

五、实验发挥
六、实验总结与体会
经过半个月的试验,自己才发现了matlab这个软件的冰山一角,有些惭愧。

不过自己对它的认识随着时间和不断使用,渐渐地有了一些更深的体会。

一些简单的常用函数的认识,再到会调用,一步一步一个脚印,颜色之类的改变,这些小技巧也只有在代码中不断摸索才发现的。

在m文件调试程序,在command window中也可以使用,而且使得程序更加便于检验。

及时发现问题和错误,比如freqz这个函数,还有求出代码中的L,N之类的,都是非常的方便。

设计滤波器,一开始毫无头绪,代码换了很多,但是最后才发现原理都是相近的,也充分明白了理论中得到的知识,时域的卷积就是频域的乘积。

通过对代码的反复练习和使用,一些浮现出来的小问题也不断得到解决,进而不断地完善程序,尽力让得到的答案完美。

作业总有完成的一天,可是自己也认识到,随着专业的深入,需要学习的还有很多,matlab这个工具将来必有大作用。

七、附件。

相关文档
最新文档