FIR数字滤波器设计与软件实现

更新时间:2023-12-16 15:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验五:FIR数字滤波器设计与软件实现

一、实验目的

(1) 掌握用窗函数法设计FIR数字滤波器的原理和方法。

(2) 掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。 (3) 掌握FIR滤波器的快速卷积实现原理。

(4) 学会调用MATLAB函数设计与实现FIR滤波器。 二、实验内容及步骤

(1) 认真复习第7章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理;

(2) 调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图1所示。

(3) 请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1 dB,将噪声频谱衰减60 dB。观察xt的频谱,确定滤波器指标参数。

(4) 根据滤波器指标选择合适的窗函数,计算窗函数的长度N,调用MATLAB函数fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。 (5) 重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数 remezord和remez设计FIR数字滤波器。比较两种设计方法设计的滤波器阶数。 提示:

① MATLAB函数fir1和fftfilt的功能及其调用格式请查阅本书7.2.3节和3.4.1节; ② 采样频率Fs=1000 Hz,采样周期T=1/Fs;

③ 根据图10.5.1(b)和实验要求,可选择滤波器指标参数: 通带截止频率fp=120 Hz, 阻带截止频率fs=150 Hz,换算成数字频率,通带截止频率ωp=2πfpT=0.24π,通带最大衰为0.1 dB,阻带截至频率ωs=2πfsT=0.3π,阻带最小衰为60 dB。 三、实验程序框图

实验程序框图如图2所示。

四、相关程序

1、信号产生函数xtg清单

function xt=xtg(N) %信号x(t)产生函数,并显示信号的幅频特性曲线 %xt=xtg产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1khz %载波频率fc=Fs/10=100Hz,调制正弦波频率f0=Fc/10=10Hz N=2000;Fs=1000;T=1/Fs;Tp=N*T; t=0:T:(N-1)*T;

fc=Fs/10;f0=fc/10; %载波频率fc=Fs/10,单频调制信号频率为f0=fc/10 mt=cos(2*pi*f0*t); %产生单频正弦波调制信号mt,频率为f0 ct=cos(2*pi*fc*t); %产生载波正弦波信号ct,频率为fc xt=mt.*ct; %相乘产生单频调制信号xt nt=2*rand(1,N)-1; %产生随机噪声nt

%=========设计高通滤波器hn,用于滤除噪声nt中的低频成分,生成高频噪声===== fp=150;fs=200;rp=0.1;rs=70; %滤波器指标

fb=[fp,fs];m=[0,1]; %计算remenzord函数所需参数f,m,dev dev=[10^(-rs/20),(10^(rp/20)-1)/ (10^(rp/20)+1)];

[n,fo,mo,w]=remezord(fb,m,dev,Fs); %确定remenz函数所需参数

hn=remez(n,fo,mo,w); %调用remenz函数进行设计,用于滤除噪声nt中的低频成分 yt=filter(hn,1,10*nt); %滤除随机噪声中低频成分,生成高频噪声yt

%=================================================================== xt=xt+yt; %噪声加信号,注意信号叠加时长度一定要相等 fst=fft(xt,N);k=0:N-1;f=k/Tp; subplot(2,1,1);plot(t,xt);grid; xlabel('t/s');ylabel('x(t)');

axis([0,0.5,min(xt),max(xt)]); title(' (a)信号加噪声波形')

subplot(2,1,2);plot(f,abs(fst)/max(abs(fst)));grid;title(' (b)信号加噪声的频谱') axis([0,Fs/2,0,1.2]);xlabel('f/Hz');ylabel('幅度')

实验结果如图所示:

(a)信号加噪声波形105x(t)0-5-1000.050.10.150.250.30.35t/s (b)信号加噪声的频谱0.20.40.450.51幅度0.50050100150200250f/Hz300350400450500

2、实验程序清单 %实验五程序exp5.m

%FIR数字滤波器设计与软件实现 clear all;close all;

%=====调用xtg产生信号xt,xt长度N=1000,并显示xt及其频谱=========== N=1000;xt=xtg(N);

fp=120;fs=150;rp=0.2;rs=60; %输入给定指标

Fs=1000; T=1/Fs;Tp=N*T; k=0:N-1;f1=k/Tp; %(1)用窗函数法设计滤波器

wc=(fp+fs)/Fs; %理想低通滤波器截止频率(关于pi归一化) B=2*pi*(fs-fp)/Fs; %过渡带宽度指标 Nb=ceil(11*pi/B); %blackman窗的长度N hn=fir1(Nb-1,wc,blackman(Nb));

ywt=fftfilt(hn,xt,N); f=[f1,zeros(1,length(ywt)-1)]; %调用函数fftfilt对xt滤波 t=0:T:[length(ywt)-1]*T;

subplot(2,1,1);plot(t,ywt); grid;title(' (c)用窗函数法滤除噪声后的信号波形') axis([0,0.5,-1,1]);xlabel('t/s');ylabel('yw(t) ')

%=======(2)用等波纹逼近法设计滤波器======================== fb=[fp,fs];m=[1,0]; %确定remenzord函数所需参数f,m,dev

dev=[(10^(rp/20)-1)/(10^(rp/20)+1),10^(-rs/20)];

[Ne,fo,mo,W]=remezord(fb,m,dev,Fs); %确定remenz函数所需参数 hn=remez(Ne,fo,mo,W); %调用remenz函数进行设计 yet=fftfilt(hn,xt,N); %调用函数fftfilt对xt滤波 f=[f1,zeros(1,length(yet)-1)];

subplot(2,1,2);plot(t,yet); grid;title(' (d)用等波纹逼近法滤除噪声后的信号波形') axis([0,0.5,-1,1]);xlabel('t/s');ylabel('ye(t) ')

实验结果如下图所示:

(c)用窗函数法滤除噪声后的信号波形10.5yw(t) 0-0.5-100.050.250.30.350.4t/s (d)用等波纹逼近法滤除噪声后的信号波形0.10.150.20.450.510.5ye(t) 0-0.5-100.050.10.150.20.25t/s0.30.350.40.450.5

五、思考题:

1、分析两种设计方法的系统阶数有何区别?

2、为什么对相同的技术指标,用等波纹最佳逼近法设计的滤波器阶数低? 六、实验报告要求

(1) 对两种设计FIR滤波器的方法(窗函数法和等波纹最佳逼近法)进行分析比较,简述其优缺点。

(2) 附程序清单, 打印实验内容要求绘图显示的曲线图。 (3) 分析总结实验结果。 (4) 简要回答思考题。

本文来源:https://www.bwwdw.com/article/80d5.html

Top