MATLAB窗函数法实现FIR的高通带通和低通滤波器的程序要点文档格式.docx
《MATLAB窗函数法实现FIR的高通带通和低通滤波器的程序要点文档格式.docx》由会员分享,可在线阅读,更多相关《MATLAB窗函数法实现FIR的高通带通和低通滤波器的程序要点文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
![MATLAB窗函数法实现FIR的高通带通和低通滤波器的程序要点文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/24/69434464-9211-4d95-9247-7288121d7ad4/69434464-9211-4d95-9247-7288121d7ad41.gif)
根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR滤波器的主要特点为:
a.线性相位;
b.非递归运算。
2.FIR滤波器的设计
FIR滤波器的设计方法主要有三种:
a.窗函数设计法;
b.频率抽样发;
c.最小平法抽样法;
这里我主要讨论在MATLAB环境下通过调用信号分析与处理工具箱的几类窗函数来设计滤波器并分析与比较其性能。
窗函数法设计FIR滤波器的一般步骤如下:
a.根据实际问题确定要设计的滤波器类型;
b.根据给定的技术指标,确定期望滤波器的理想频率特性;
c.求期望滤波器的单位脉冲响应;
d.求数字滤波器的单位脉冲响应;
e.应用。
常用的窗函数有
3.窗函数的选择标准
1.较低的旁瓣幅度,尤其是第一旁瓣;
2.旁瓣幅度要下降得快,以利于增加阻带衰减;
3.主瓣宽度要窄,这样滤波器过渡带较窄。
4.常用窗函数的参数
5.FIR滤波器的MATLAB实现方式
在MATLAB信号分析与处理工具箱中提供了大量FIR窗函数的设计函数,本次用到主要有以下几种:
hanning(N)hanning窗函数的调用
hamming(N)hamming窗函数的调用
blackman(N)blackman窗函数的调用
kaiser(n+1,beta)kaiser窗函数的调用
kaiserord计算kaiser窗函数的相关参数
freqz求取频率响应
filter对信号进行滤波的函数
6.实验具体步骤
本次实验分别通过调用hanning,hamming,Blackman,kaiser窗函数,给以相同的技术参数,来设计低通,带通,高通滤波器,用上述窗函数的选择标准来比较各种窗函数的优劣,并给以一个简谐波进行滤波处理,比较滤波前后的效果。
达到综合比较的效果。
二、源代码
1.利用hanninghammingblackmankaiser窗,设计一个低通FIR
functionlowpassfilter
clc;
clearall;
Fs=100;
%采样频率
fp=20;
%通带截止频率
fs=30;
%阻带起始频率
wp=2*pi*fp/Fs;
%将模拟通带截止频率转换为数字滤波器频率
ws=2*pi*fs/Fs;
%将模拟阻带起始频率转换为数字滤波器频率
wn=(wp+ws)/2/pi;
%标准化的截止频率响应
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
%滤波器长度
N=N0+mod(N0+1,2);
window1=hanning(N);
%使用hanning窗函数
window2=hamming(N);
%使用hamming窗函数
window3=blackman(N);
%使用blackman窗函数
[n,Wn,beta,ftype]=kaiserord([2025],[10],[0.010.01],100);
window4=kaiser(n+1,beta);
%使用kaiser窗函数
%设计加窗函数fir1
b1=fir1(N-1,wn,window1);
b2=fir1(N-1,wn,window2);
b3=fir1(N-1,wn,window3);
b4=fir1(n,Wn/pi,window4,'
noscale'
);
%求取频率响应
[H1,W1]=freqz(b1,1,512,2);
[H2,W2]=freqz(b2,1,512,2);
[H3,W3]=freqz(b3,1,512,2);
[H4,W4]=freqz(b4,1,512,2);
figure
(1);
subplot(2,2,1),plot(W1,20*log10(abs(H1)));
%绘制频率响应图形
axis([0,1,-100,100]);
title('
低通hanning窗的频率响应图形'
xlabel('
频率(Hz)'
ylabel('
幅值'
subplot(2,2,2),plot(W2,20*log10(abs(H2)));
低通hamming窗的频率响应图形'
subplot(2,2,3),plot(W3,20*log10(abs(H3)));
低通blackman窗的频率响应图形'
subplot(2,2,4),plot(W4,20*log10(abs(H4)));
低通kaiser窗的频率响应图形'
T=1/Fs;
L=100;
%信号长度
t=(0:
L-1)*T;
%定义时间范围和步长
y=sin(2*pi*5*t)+5*sin(2*pi*15*t)+8*sin(2*pi*40*t);
%滤波前的图形
NFFT=2^nextpow2(L);
%Nextpowerof2fromlengthofy
Y=fft(y,NFFT)/L;
%将时域信号变换到频域
f=Fs/2*linspace(0,1,NFFT/2+1);
%频域采样
figure
(2);
plot(f,2*abs(Y(1:
NFFT/2+1)));
frequency/Hz'
Amuplitude'
);
%滤波前频谱
滤波前的频谱'
%滤波后频谱
%采用hanning窗滤波器
yy1=filter(b1,1,y);
%调用滤波函数
YY1=fft(yy1,NFFT)/L;
%进行傅里叶变换,下同。
f1=Fs/2*linspace(0,1,NFFT/2+1);
figure(3);
subplot(2,2,1),plot(f1,2*abs(YY1(1:
NFFT/2+1)));
hanning窗的滤波效果'
%采用hammning窗滤波器
yy2=filter(b2,1,y);
YY2=fft(yy2,NFFT)/L;
subplot(2,2,2),plot(f1,2*abs(YY2(1:
hamming窗的滤波效果'
%采用blackman窗滤波器
yy3=filter(b3,1,y);
YY3=fft(yy3,NFFT)/L;
subplot(2,2,3),plot(f1,2*abs(YY3(1:
blackman窗的滤波效果'
%采用kaiser窗滤波器
yy4=filter(b4,1,y);
YY4=fft(yy4,NFFT)/L;
subplot(2,2,4),plot(f1,2*abs(YY4(1:
kaiser窗函数滤波效果'
%滤波前后的信号的时域对比
figure(4);
plot(y);
时间/s'
振幅'
滤波前振幅特性'
figure(5);
subplot(2,2,1),plot(yy1);
hanning窗函数滤波振幅特性'
subplot(2,2,2),plot(yy2);
hamming窗函数滤波振幅特性'
subplot(2,2,3),plot(yy3);
blackman窗函数滤波振幅特性'
subplot(2,2,4),plot(yy4);
kaiser窗函数滤波振幅特性'
%滤波前后的信号的相位对比
figure(6);
plot(angle(Y));
相位'
滤波前的相位特性'
figure(7);
subplot(2,2,1),plot(angle(YY1));
hanning窗函数滤波相位特性'
subplot(2,2,2),plot(angle(YY2));
hamming窗函数滤波相位特性'
subplot(2,2,3),plot(angle(YY3));
blackman窗函数滤波相位特性'
subplot(2,2,4),plot(angle(YY4));
kaiser窗函数滤波相位特性'
2.设计一个hanninghammingblackmankaiser窗函数bandpass_FIR
%设计一个hanninghammingblackmankaiser窗函数bandpass_FIR
functionbandpassfilter
fp1=15;
%通带下限截止频率
fp2=20;
%通带上限截止频率
fs1=10;
fs2=25;
wp1=2*pi*fp1/Fs;
%将通带下限截止频率转换为数字滤波器频率
wp2=2*pi*fp2/Fs;
%将通带上限截止频率转换为数字滤波器频率
ws1=2*pi*fs1/Fs;
ws2=2*pi*fs2/Fs;
Bt=wp1-ws1;
wn=[(wp1+ws1)/2/pi,(wp2+ws2)/2/pi];