电子科技大学。
实验报告。一、实验室名称:数字信号处理实验室。
二、实验项目名称:数字滤波器的设计及实现。
三、实验原理:
一. 数字滤波器设计:
1. 数字滤波器设计步骤:
1) 根据给定的滤波器设计要求,得到参数化描述,即通带,阻带截止频率和,通带阻带纹波和等数据。
2) 找一个数字系统函数g(z),使其频率响应逼近设计要求。
3) 择合适的滤波器结构对满足要求的传递函数g(z)进行实现。
2. 数字滤波器设计中的注意事项:
1) 设计要求的参数化:图1给出了一个典型的数字低通滤波器的幅频特性说明。理解每个参数的物理含义。
2) 滤波器类型选择:在数字滤波器实现中可选择iir滤波器和fir滤波器两种。在实现相同幅频特性时,iir滤波器的阶数会相对fir滤波器的更低;而在实现中,对相同阶数的两种滤波器来看,对每个采样值所做的乘法数量,iir约为fir的两倍;另外,fir还可以方便地设计成线性相位滤波器。
总的来说,iir滤波器除不能实现线性相位这一点外,由于阶数的原因,从计算复杂度上较fir滤波器有很大的优势。根据以上这些区别,结合实际的设计要求,就可以选择一款合适的滤波器。
3) 波器设计的方法:由于iir滤波器和fir滤波器各自的结构特点,所以它们的设计方法也不一样。在iir滤波器的设计中,常用的方法是:
先根据设计要求寻找一个合适的模拟原型滤波器,然后根据一定的准则将此模拟原型滤波器转换为数字滤波器,即为我们需要设计的数字滤波器。在fir滤波器设计中,一般使用比较直接的方法:根据设计的要求在时域对理想的冲击响应序列进行加窗逼近,或从频域对需要实现的频率响应特性进行采样逼近然后进行反fft。
4) 波器阶数估计:iir滤波器的阶数就等于所选的模拟原型滤波器的阶数,所以其阶数确定主要是在模拟原型滤波器设计中进行的。fir滤波器阶数估计可以根据很多工程中的经验公式,这些公式可以直接从设计的参数要求中估计滤波器阶数。
例如,对fir低通滤波器,已知通带截止频率,阻带截止频率,最大通带纹波和最大最带纹波,则可以使用下面的公式估计其阶数:
3. 数字滤波器的设计方法:
1) iir滤波器设计方法:
a) 冲击响应不变法:
a. 满足设计要求的模拟原型滤波器进行部分分式展开为:
b. 由于可以得到:
b) 双线性变换法:
a. 设计要求中给出的边界频率进行预畸处理,然后用得到的频率进行模拟滤波器设计,得到模拟原型滤波器。
b. 用双线性变换法求出数字滤波器:。
2) fir滤波器设计方法:
a) 窗函数法:
a. 根据设计的要求选择合适的窗函数,然后根据此窗计算阶数等参数n。
b. 写出冲击响应序列的表达式:,其中,为理想的冲击响应序列,一般为无限长的,为长度为n的窗函数。
c. 计算所得冲击响应序列的dtft,然后验证其是否满足设计要求。
b) 频率采样法:
a. 根据设计要求估算滤波器阶数n。
b. 对要求的频率响应特性进行采样,获得n个离散样点值h(k)。
c. 对h(k)求n点ifft,得到所需要的滤波器冲击响应序列h(n)。
d. 计算所得冲击响应序列的dtft,然后验证其是否满足设计要求。
4. 滤波器的实现结构。
a) fir滤波器:
直接型实现结构。
级联结构。并联结构。
多相实现结构。
线性相位型结构。
b) iir滤波器:
直接型实现结构:i型和ii型。
级联结构。并联结构。
具体结构形式参见教材第六章内容。
二. 在滤波器设计中使用到的matlab命令:
1. iir滤波器设计函数:butter, buttord, chebwin, cheb1ord, cheb2ord, cheby1, cheby2, ellip, ellipord。
例如:用下面的matlab命令可估算一个butterworth滤波器的阶数:
n, wn] =buttord(wp, ws, rp, rs)
2. fir滤波器设计函数:fir1, fir2, remez, remezord, kaiser, kaiserord, hanning, hamming, blackman。
例如:用下面的matlab命令可根据式(7.18)估算一个fir滤波器阶数:[n, fpts,mag,wt] =remezord(fedge,mval,dev)
3. matlab中提供的滤波器设计辅助设计软件(在命令窗口中键入“fdatool”即可启动),界面如下图1所示。在本界面中填写需要设计的滤波器参数,即可设计出需要的滤波器。
还可以通过本工具提供的幅度,相位观察窗口观察设计出来的滤波器的幅度,相位特性等,并可以将设计好的滤波器冲激响应系数导出进行实现。
图1 matlab中滤波器辅助设计软件界面。
四、实验目的:
从理论上讲,任何的线性时不变(lti)离散时间系统都可以看做一个数字滤波器,因此设计数字滤波器实际就是设计离散时间系统。
本实验通过使用matlab函数和滤波器辅助设计软件对数字滤波器进行设计和实现,加深学生对数字滤波器的常用指标、设计过程及实现的理解。
五、实验内容:
对给定的输入信号(基带二进制码元为500hz,两个载频分别为2khz和4khz的fsk调制信号)进行滤波。利用matlab编程设计一个数字低通滤波器,指标要求如下:通带截止频率:
;阻带截止频率:;采样频率;通带峰值起伏:;最小阻带衰减:。
要求分别用matlab中的iir和fir设计命令进行滤波器设计,得出需要的滤波器系数。再将得到的滤波器系数在matlab中编程进行实现(选择直接型实现结果),对输入信号进行滤波,观察滤波结果。
在提供的dsp实验板上编程对本滤波器过程进行实现,观察实际的滤波结果,并与理论结果对比。
六、实验器材(设备、元器件):
安装matlab软件的pc机一台,dsp实验演示系统一套。
七、实验步骤:
1) 给定输入信号:fsk信号(输入的二进制待调信号为随机信号,码元频率为500hz,两个载频分别为2khz和4khz,采样频率为20khz,)。利用matlab编程产生本信号,画出其时域和频域的图像。
2) 利用matlab编程设计一个数字低通滤波器,指标要求如下:
通带截止频率:;阻带截止频率:;采样频率;通带峰值起伏:;最小阻带衰减:。
3) 分别用matlab中的iir和fir设计命令进行滤波器设计,得出需要的滤波器系数。
4) (拓展要求)用matlab滤波器辅助设计软件对上述滤波器进行设计,并将得到的滤波器系数对输入信号进行滤波,观察滤波实现。
5) 将得到的滤波器系数在matlab中编程进行实现(选择直接型实现结果进行实现),对(1)中的输入信号进行滤波(分别用fir和iir滤波器进行),观察滤波结果,画出时域和频域图像。
6) (拓展要求)修改需要设计的滤波器的指标要求,比如:将通带截止频率修改为2khz,或者将最小阻带衰减改为,这时再重复(3)和(5)的步骤,观察所得到的滤波器效果,并对这一结果进行解释。
7) (拓展要求)在提供的dsp实验板上编程对滤波器滤波过程进行实现,观察实际的滤波结果,并与理论结果对比。
八、实验数据及结果分析:
程序:(1)产生输入fsk信号的程序。
clear all;
x=randn(10,1)>0;
fl=2000;fh=4000;fs=20000;
ts=1/500;%码元速率。
tt=(0:1/fs:ts);
t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];
y=zeros(10,length(tt));
i=1; 对输入的信号进行fsk调制。
while i<=10
y(i,:)x(i)*sin(2*pi*fh*t(i,:)x(i)*sin(2*pi*fl*t(i,:)
i=i+1;
end t=reshape(t',length(tt)*10,1);
y=reshape(y',length(tt)*10,1);
subplot(211);plot(t,y);
title('fsk信号的时域图形');
n=length(y);
r=fft(y)/n;r=fftshift(r);
f=linspace(-fs/2,fs/2,n);
subplot(212);
plot(f,abs(r));
set(gca,'xtick',-fs/2:5000:fs/2);
title('fsk信号的频谱图');
2) fir滤波器设计程序。
因为阻带的最小衰减为40db ,所以可以选汉宁窗。
close all
fp=2200;fs=3500;rp=1;rs=40;
fp=20000;
wp=fp*2*pi/fp;
ws=fs*2*pi/fp;
wc=(wp+ws)/2;
dw=ws-wp;
m=ceil(3.11*pi/dw);
n=2*mb=fir1(n,wc/pi,hann(n+1));
h,omega] =freqz(b,1,512);
subplot(2,1,1),plot (omega/pi,20*log10(abs(h)))grid;
title('magnitude of h(e^j\omega)')
xlabel('\omega/\pi');ylabel('magnitude')
subplot(2,1,2),plot(omega/pi,angle(h));grid;
title('phase of the h(e^j\omega)')
xlabel('\omega/\pi');ylabel('gain, db');
运行结果:n=48
3) iir滤波器设计程序。
我选择用butterworth滤波器设计该低通滤波器:
close all
fp=2200;fs=3500;rp=1;rs=40;
fp=20000;
wp=fp*2/fp;
ws=fs*2/fp;
n,wn] =buttord(wp,ws,rp,rs)
num,den] =butter(n,wn);
[h,omega] =freqz(num,den,512);
subplot(2,1,1),plot (omega/pi,20*log10(abs(h)))grid;
title('magnitude of h(e^j\omega)')
学习徐前凯先进事迹心得体会 平民英雄徐前凯
学习徐前凯先进事迹心得体会 平民英雄徐前凯。近日,重庆市荣昌区一名党员感动了全中国人。为救下一位正在横穿铁轨的老人,身为火车站值班员的徐前凯不顾自身安全跳下列车,救下了老人,而自己却因躲避不及,被火车碾压,永远失去了右腿。徐前凯的英雄事迹在短短几日内传遍了络,成为了大家学习的楷模。学习徐前凯就是要学...
机械原理实验徐馨
实验报告。实验课程 机械原理。学院 机电工程学院。学生姓名 徐馨。学号 5901115192 专业班级 机制157 时间 2017年5月18日周四上午9 00 1 目的 1 掌握用范成法制造渐开线齿轮的基本原理 2 了解渐开线齿轮产生根切现象的原因和避免根切的方法 3 分析比较标准齿轮和变位齿轮的异...
学习徐前凯先进事迹心得体会
7月6日下午,成都铁路局重庆车务段荣昌火车站的值班员徐前凯,不顾个人安危从急刹滑行的车列跳下,救下一位横穿铁路的老人,而自己却永远失去右腿。从徐前凯跳下车,到他将老人推开,整个过程仅仅5秒钟时间。生死攸关之际,徐前凯本来有机会跳出铁道保护自己,但他却并没有那样做,而是与死神赛跑,救出了老人。也许有人...