dsp实验报告有限脉冲响应滤波器FIR实验.docx
- 文档编号:3931264
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:20
- 大小:623.40KB
dsp实验报告有限脉冲响应滤波器FIR实验.docx
《dsp实验报告有限脉冲响应滤波器FIR实验.docx》由会员分享,可在线阅读,更多相关《dsp实验报告有限脉冲响应滤波器FIR实验.docx(20页珍藏版)》请在冰豆网上搜索。
dsp实验报告有限脉冲响应滤波器FIR实验
实验四.数字信号处理算法实验
实验4.1 :
有限脉冲响应滤波器(FIR)算法实验
一.实验目的
1.掌握窗函数法设计FIR滤波器的Matlab实现,为CCS提供滤波系数。
2.掌握采用C语言在VC5509开发板上实现混频信号的FIR滤波。
二.实验设备
计算机,ICETEK-VC5509-A实验箱及电源。
三.实验原理
1.窗函数法设计FIR滤波器(详细理论请看《数字信号处理》原理书籍)
本实验要求:
设计一个低通滤波器,通带截止频率fp=10kHz,阻带截止频率fs1=22kHz,阻带衰减ap=75dB,采样频率fs=50kHz,计算出滤波系数fHn,并对混频信号(高频+低频正弦波)fIn进行滤波,得输出波形fOut。
解:
过渡带宽度=fs1-fp=12kHz;截止频率:
f1=fp+(过渡带宽度)/2=16kHz
f1对应的数字频率:
Ω1=2πf1/fs=0.64π(rad)
-理想低通滤波器单位脉冲响应:
hd[n]=sin(0.64π(n-a))/(π(n-a)) 其中a=(N-1)/2(n=0~N-1)
-根据阻带衰减要求选择布莱克曼窗,窗函数长度N为:
N=5.98fs/过渡带宽度≈25
则窗函数为:
w[n]=0.42-0.5cos(2πn/24)+0.08cos(4πn/24)
滤波器脉冲响应为:
h[n]=hd[n]w[n] (n=0~N-1) <1>
-根据上面各式计算出h[n]。
2.FIR滤波
FIR滤波器的差分方程为:
<2>
其中,hi----滤波器系数;x(n)---滤波器的输入;y(n)---滤波输出。
根据公式<1><2>,得本例对应FIR滤波器的差分方程为:
y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]
-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]
+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]
+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]
+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]
-0.002x[n-20]-0.002x[n-21]+0.001x[n-22](n=0,1,2,...)
采用线性缓冲区法(原理见备课笔记)解此差分方程,得FIR滤波结果y(n)。
3.程序流程图:
四.实验内容
1.实验准备
2.利用Matlab编程计算滤波系数fHn。
%程序:
FIRditong.m
clear
clc
N=25; %滤波器的阶数
n=[0:
1:
N-1];
wc=0.64*pi; %理想低通滤波器的截止频率
m=n-(N-1)/2+eps;
hd=sin(wc*m)./(pi*m); %理想低通滤波器hd(n)
wn=0.42-0.5*cos(2*pi*n/24)+0.08*cos(4*pi*n/24);
%布拉克曼窗
fHn=hd.*wn %滤波系数fHn
实验要求:
(1)在matlab软件中运行该程序,在命令窗口下显示滤波系数fHn。
则fHn=
Columns 1through6
0.0000 -0.00000.0008 -0.0016 -0.0019 0.0100
Columns7through12
-0.0087-0.0180 0.0492 -0.0204-0.10950.2800
Columns13through18
0.6400 0.2800 -0.1095-0.0204 0.0492-0.0180
Columns 19 through24
-0.0087 0.0100 -0.0019-0.0016 0.0008 -0.0000
Column 25
0.0000
将此fHn与三.2部分的fHn相比,体会FIR滤波器设计原理。
3.打开工程:
C:
\ICETEK\VC5509Ae\VC5509Ae\Lab0501-FIR\Fir.pjt。
//主程序:
FIR.c
#include"myapp.h"
#include"ICETEK-VC5509-EDU.h"
#include"scancode.h"
#include
#defineFIRNUMBER 25 //滤波器阶数
#defineSIGNAL1F1000 //输入信号1的频率
#define SIGNAL2F4500 //输入信号2的频率
#define SAMPLEF10000//采样频率
#define PI3.1415926
floatInputWave(); // 输入信号产生子程序声明
floatFIR(); // FIR滤波子程序声明
floatfHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
-0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
-0.11,-0.02,0.049,-0.018,-0.009,0.01,
-0.002,-0.002,0.001,0.0,0.0};//低通滤波器系数 floatfXn[FIRNUMBER]={0.0 };
floatfInput,fOutput;
float fSignal1,fSignal2;
floatfStepSignal1,fStepSignal2;
float f2PI;
inti;
floatfIn[256],fOut[256];//输入信号fIn和滤波输出信号fOut
intnIn,nOut; //输入和输出信号的下标变量
main()
{
ﻩnIn=0; nOut=0;
ﻩf2PI=2*PI;
ﻩfSignal1=0.0;
fSignal2=PI*0.1;
ﻩfStepSignal1=2*PI/30;
ﻩfStepSignal2=2*PI*1.4;
ﻩwhile (1) //无限循环
{
ﻩfInput=InputWave(); //调入输入信号的1个值,存入fIn[nIn]
ﻩfIn[nIn]=fInput;
nIn++; nIn%=256;//nIn=nIn+1;nIn除256取余
ﻩfOutput=FIR();
ﻩfOut[nOut]=fOutput;
//调用FIR滤波子程序,将本次滤波输出存入fOut[nOut]
nOut++;ﻩ/*breakpoint*/
//nOut=nOut+1
ﻩif(nOut>=256)
ﻩ{
ﻩnOut=0;ﻩ
}
}
}
floatInputWave()
{
for( i=FIRNUMBER-1;i>0;i--)//循环
ﻩfXn[i]=fXn[i-1];// 将上一个采样时间的输入信号向量延迟1个单元,
空出1个单元(以便将新值放入)
fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;//混频正弦信号
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI )ﻩfSignal1-=f2PI;
ﻩfSignal2+=fStepSignal2;
if (fSignal2>=f2PI )fSignal2-=f2PI;
ﻩreturn(fXn[0]); // 返回当前采样时间的输入信号fXn[0]
}
floatFIR() //FIR滤波子程序
{
floatfSum;
fSum=0;
ﻩfor(i=0;i<FIRNUMBER;i++ )
ﻩ
ﻩfSum+=(fXn[i]*fHn[i]);// FIR滤波 ﻩ
}
ﻩreturn(fSum); // 返回当前滤波结果 fSum ﻩ
}
4.下载运行该程序。
设置断点:
在有注释“breakpoint”的语句设置软件断点。
选择“Debug”---“Animate”项,或按Alt+F5键运行该程序。
实验要求:
(1)在空格处填入注释。
(2)观察实验结果。
[1]选择View->Graph->Time/Frequency…,分别进行如下图(a)(b)设置:
(a) (b)
分别显示输入波形fIn及其幅频谱(示例):
[2]将"StartAddress"改为fOut,分别显示输出波形fout的波形及幅频谱:
[3]将"Start Address"改为fHn,分别显示滤波系数fHn的波形及幅频谱(设置如下图):
(a) (b)
[4]通过观察频域和时域图,得知:
输入波形中的低 (低/高)频分量通过了滤波器,而高 (低/高)频部分则大部分被滤除。
六.问题与思考题
修改上述程序,将其改为高通滤波器,滤掉输入中的低频分量,写出matlab设计滤波系数程序、ccs程序中滤波系数fHn并显示高通滤波输出波形fOut。
提示:
高通滤波器h(n)=sin[π(n-a)]/π(n-a)-sin[ωc(n-a)]/π(n-a)
实验4.2:
无限冲激响应滤波器(IIR)算法实验
一.实验目的
1.掌握双线性变换法设计IIR滤波器的Matlab实现,为CCS提供滤波系数。
2.掌握采用C语言在VC5509开发板上实现混频信号的IIR滤波。
二.实验设备
PC兼容机一台,操作系统为WindowsXP,安装CCS3.3软件。
三.实验原理
1.双线性变换法设计IIR滤波器(详细理论看《数字信号处理》书籍)
本实验要求:
采用双线性变换法设计低通巴特沃斯滤波器,通带截止频率fp1=1kHz,阻带截止频率fs1=12kHz,通带波动ap=-3dB,阻带衰减ap=-30dB,采样频率fs=25kHz,计算出滤波系数fAn,fBn,并对混频信号(高频+低频正弦波)fIn进行滤波,得输出波形fOut。
解:
数字频率:
Ωp1=2πfp1/fs=2π1000/25000=0.08π(rad)
Ωs1=2πfs1/fs=2π12000/25000=0.96π(rad)
模拟角频率:
wp1=2fs tan(Ωp1/2)=6316.5(rad/s)=ws1
ws1=2fstan(Ωs1/2)=794727.2(rad/s)
由已给定的阻带衰减as=-20logδs确定阻带边缘增益δs=0.03162
计算所需滤波器的阶数:
一阶模拟巴特沃斯滤波器传输函数为:
H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)
由双线性变换定义s=2fs(z-1)/(z+1)得数字滤波器的传输函数为:
得IIR滤波器差分方程为:
y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1]。
设滤波系数:
fBn={0.0,0.7757};fAn={0.1122,0.1122};
5.程序流程图:
四.实验内容
1.实验准备:
设置软件仿真模式,参看:
第二部分、第一章、四、1。
2.打开工程C:
\ICETEK\VC5509Ae\VC5509Ae\Lab0502-IIR\IIR.pjt。
设置断点:
在有注释“break point”的语句设置软件断点。
选择“Debug”---“Animate”项,或按Alt+F5键运行该程序。
实验要求:
[1]选择View->Graph->Time/Frequency…,分别进行如下图(a)(b)设置:
(a) (b)
分别显示输入波形fIn及其幅频谱:
[2]将"StartAddress"改为fOut,分别显示输出波形fout的波形及幅频谱:
[3]在"Memory"窗口中显示IIR滤波系数fAn和fBn:
实验4.4 :
FIR滤波器的信号滤波
一.实验目的
1.掌握A/D转换的基本过程和程序处理过程。
2.学习通过对AD采样值进行计算产生混频波形。
3.熟悉FIR滤波器参数的调整,并采用CCS中的DSPLIB库进行FIR滤波。
二.实验设备
计算机,ICETEK-VC5509-A实验箱及电源。
三.实验原理
1.AD原理:
参见实验2.5、三、1。
2.混频波形的产生:
将接收到的两路AD采集信号(均取低12位)相加,并对结果幅度进行
限制,从而产生混合后的输出波形。
3.FIR滤波器工作原理及参数计算:
参见实验4.1。
本实验滤波器参数:
采样频率20364.8Hz,带通滤波500Hz-5kHz,增益40dB,阶数64。
4.本实验程序
在主循环中对AD进行连续采样,每次采样首先设置AD转换控制寄
存器(ADCCTL),发送转换通道号和启动命令,然后循环等待转换结果,最后将结果保存。
由于需要进行实时混频,所以交替转换通道0和通道1(ICETEK-VC5509-A实验箱上ADCIN2和ADCIN3),混频波形通过FIR滤波器(采用DSPLIB库中的函数编程实现),得到输出波形。
由于采用了带通滤波,输入频率在500Hz-5kHz之间的才能通过滤波器。
程序流程图:
四.实验内容
1.实验准备:
⑴ 连接实验设备:
参看本书第二部分、第一章、二。
⑵准备信号源进行AD输入。
①取出2根实验箱附带信号线(如下图,两端均为单声道语音插头)。
将信号线1一端插入信号源波形输出A端口,另一端插入试验箱上ADCIN2端口。
将信号线2一端插入信号源波形输出B端口,另一端插入试验箱上ADCIN3端口。
②将波形输出A波形选择调为正弦波,频率调整调至100-1KHz。
将波形输出B波形选择调为正弦波,频率调整调至1K-10KHz。
设置CodeComposerStudio3.3在硬件仿真(Emulator)方式下运行。
2.打开工程文件:
C:
\ICETEK\VC5509Ae\VC5509Ae\Lab0507-MixerFIR\AD.pjt。
此工程中原文件filter.cmd有误,请换成ICETEK-VC5509-A.cmd。
//主程序 main.c中的重要语句:
while
(1)
{
ﻩﻩfor( i=0;i {ADCCTL=0x8000; //启动AD转换,通道0 ﻩﻩdo ﻩﻩ{uWork=ADCDATA; //将AD采样数据存入uWork ﻩ}while(uWork&0x8000); ﻩﻩnADC0[i]=uWork&0x0fff;//将uWork中的低12位存入nADC0 ﻩﻩADCCTL=0x9000;//启动AD转换,通道1 ﻩﻩdo ﻩ{uWork=ADCDATA;//将AD采样数据存入uWork ﻩﻩ}while(uWork&0x8000); ﻩnADC1[i]=uWork&0x0fff; //将uWork中的低12位存入nADC1 uWork=(nADC0[i]+nADC1[i]);ﻩ// 混频 ﻩﻩuWork>>=1;ﻩ//限幅,混频后仍然产生12位数据 ﻩﻩx[i]=uWork; // 把uwork的数据存入x[i] ﻩﻩ} fir2(x,h,r, db, NX,NH); // 调用dsplib库中的FIR滤波程序计算当前输出,滤波系数h在"fir.h"中 //x—输入;h—滤波系数;r—滤波输出;NX—x的长度;NH—h的长度 ﻩ}ﻩﻩﻩ } 3.下载运行该程序。 选择菜单Debug->Go Main,使程序运行到main函数入口位置。 打开源程序main.c,在有注释“在此加软件断点”的行上加软件断点。 实验要求: (1)在空格中填入注释。 (2)将信号源A的“频率选择”旋钮调节到“100Hz-1kHz”档,调节“频率微调”旋钮到最大,信号源A输出保持1kHz频率。 将信号源B的“频率选择”旋钮调节到“10Hz-100Hz”档,调节“频率微调”旋钮到最大,信号源B输出保持100Hz频率。 --选择View->Graph->Time/Frequency(或FFT Magnitude),进行如下设置: (a) (b) 注: 采样频率改为20464.8Hz。 (a)显示AD0波形及幅频谱: (示例) (b)显示AD1波形及幅频谱: --选择菜单View->Graph->Time/Frequency(或FFTMagnitude): 按“F5”键运行到断点 显示混频波形及幅频谱: --选择菜单View->Graph->Time/Frequency(或FFT Magnitude): 显示滤波输出波形及幅频谱: 结论: 输出保留AD0 (AD0/AD1),而滤除AD1 (AD0/AD1)波形。 ---选择菜单View->Graph->Time/Frequency(或FFT Magnitude): 显示滤波器h的波形及幅频谱: (3)调节信号源输出,观察滤波器输出: 选择Debug->Animate,运行程序,同时改变信号源输入的波形、频率参数,观察动态效果。 将信号源B的“频率选择”旋钮调节到“1kHz-10kHz”档,顺时针旋转信号源B的“频率微调”旋钮,当其超过5kHz后,则 AD0 (AD0/AD1)波形被滤除。 (4)选择File->Workspace->Save Workspace As,存为FIR1.wks,将环境设置保存在工程目录中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验 报告 有限 脉冲响应 滤波器 FIR