实验 2 有限冲激响应滤波器FIR算法实验1.docx
- 文档编号:23002506
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:9
- 大小:521.88KB
实验 2 有限冲激响应滤波器FIR算法实验1.docx
《实验 2 有限冲激响应滤波器FIR算法实验1.docx》由会员分享,可在线阅读,更多相关《实验 2 有限冲激响应滤波器FIR算法实验1.docx(9页珍藏版)》请在冰豆网上搜索。
实验2有限冲激响应滤波器FIR算法实验1
实验2:
有限冲激响应滤波器(FIR)算法实验
一、实验目的
1.熟悉线性相位FIR数字滤波器特性;
2.了解各种窗函数对滤波器特性的影响;
3.掌握FIR数字滤波器的窗函数法的设计过程;
4.掌握FIR数字滤波器性能测试方法。
二、实验设备
1.PC兼容机
2.WIN7操作系统
3.CodeComposerStudiov5
三、实验容
1.掌握FIR数字滤波器的基础理论;
2.基于MATLAB的FIR数字滤波器参数确定方法;
3.采用C语言编程实现低通FIR滤波器;
4.掌握基于CCS的波形观察方法;观察滤波前后的波形变化。
四.实验原理分析
要求:
用窗函数法,设计通带截止频率fp为10kHz,阻带截止频率fst为22kHz,采样频率fs为50kHz,阻带衰减为72dB的低通滤波器。
解:
(一)、滤波器参数计算
(1)求数字滤波器的参数:
●数字通带截止频率wp为:
2πfp/fs=0.4π
●数字阻带截止频率wst为:
2πfst/fs=0.88π
●过渡带宽为:
wst-wp=0.48π
●过渡带数字中心频率wc为:
(wp+wst)/2=0.64π
(2)求窗函数的类型:
●根据阻带衰减为72dB的设计要求,选择布莱克曼窗
●窗函数长度为:
N>=11π/(wst-wp),N=23
阻带边缘频率-通带边缘频率=12kHz;
(二)、基于MATLAB的滤波器参数求解
(1)blackman窗的计算
利用blackman(N)计算blackman窗,其中N为滤波器的点数
(2)验证理想低通滤波器单位冲激响应
利用ideallp(wc,N)计算(-tao,tao)围的N点的理想低通滤波器的单位冲激响应
functionhd=ideallp(wc,N)
%理想低通滤波器计算
%[hd]=ideallp(wc,N)
%h=0~N-1之间的理想脉冲响应
%N=理想低通滤波器的长度
tao=(N-1)/2;
n=[0:
1:
(N-1)];
m=n-tao+eps;
hd=sin(wc*m)./(m*pi);
end
(3)求解FIR低通数字滤波器的单位冲激响应
hd.*wd’
(三)、基于C语言编程的FIR数字滤波器编程实现
程序流程图
五.实验步骤
1.打开CCS,进入CCS的操作环境。
2.打开工程,浏览程序:
工程目录为C:
\ICETEK\ICETEK-DM6437-A\Lab0401_FIR
3.点击图标
,CCS会自动编译、和下载程序。
4.运行程序。
可以观察收到的数据。
*选择菜单Tools->Graph->DualTime,进行如下设置:
DualTime参数设置
输入、输出的时域波形
其中,输入波形:
一个低频正弦波与一个高频正弦波的叠加;输出波形:
经过低通滤波后的低频正弦波。
*选择菜单Tools->Graph->SingleTime,进行如下设置:
显示FIR低通滤波器的单位冲激响应。
SingleTime参数设置
h(n)的系数
*选择菜单Tools->Graph->FFTMagnitude,新建2个观察窗口,分别进行如下设置:
分别显示输入波形、经低通滤波后输出波形的DFT幅度谱;
FFT幅度谱的参数设置
输入、输出波形的幅度谱
5.设置断点:
在有注释“breakpoint”的语句设置软件断点。
使用菜单的View->Breakpoints打开断点观察窗口,在刚才设置的断点上右键->Breadkpointproperties调出断点的属性设置界面,设置Action为RefreshAllwindows。
则程序每次运行到断点,所有的观察窗口值都会被刷新,观察波形、幅度谱。
6.运行并观察结果:
⑴按F8键运行程序。
⑵观察窗口中时域图形;观察滤波效果。
⑶观察窗口中频域图形;理解滤波效果。
7.退出CCS。
六.实验结果
输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。
通过观察频域和时域图,得知:
输入波形中的低频波形通过了滤波器,而高频部分则大部分被滤除。
七.问题与思考
基本任务:
1.确定程序中的信号频率,试选用设计不同的信号、噪声组合,基于MATLAB设计不同的类型的滤波器,并基于CCS实现,并观察实验的结果。
2.分析实验程序,细化算法流程图。
3.结合CCS的使用,分析实验结果
提高任务:
4.尝试使用信号源生成组合信号,经过A/D采样后,送FIR滤波器实现。
源代码:
#include
#defineFIRNUMBER25/*滤波器的点数*/
#defineSIGNAL1F1000/*正弦信号频率,没用*/
#defineSIGNAL2F4500/*正弦信号频率,没用*/
#defineSAMPLEF10000/*采样频率,没用*/
#definePI3.1415926
floatInputWave();/*输入给FIR滤波器的信号,每次输出一个点*/
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;/*输入点和输出点*/
floatfSignal1,fSignal2;
floatfStepSignal1,fStepSignal2;
floatf2PI;
inti;
floatfIn[256],fOut[256];/*输入波形和输出波形*/
intnIn,nOut;/*输入信号和输出信号的索引*/
main()
{
nIn=0;nOut=0;
f2PI=2*PI;
fSignal1=0.0;/*信号1的初始相位*/
fSignal2=PI*0.1;/*信号2的初始相位*/
fStepSignal1=2*PI/30;/*信号1的相位步长:
f1/fs=1/30*/
fStepSignal2=2*PI*1.4;
/*信号1的相位步长:
f2/fs=1.4,违背了奈奎斯特采样定律*/
while
(1)
{
fInput=InputWave();/*从输入信号中获取一个点*/
fIn[nIn]=fInput;
nIn++;nIn%=256;
fOutput=FIR();/*输出一个经滤波后的点*/
fOut[nOut]=fOutput;
nOut++;/*请在此句上设置软件断点*/
if(nOut>=256)
{
nOut=0;
}
}
}
floatInputWave()
{
for(i=FIRNUMBER-1;i>0;i--)
fXn[i]=fXn[i-1];
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI)fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if(fSignal2>=f2PI)fSignal2-=f2PI;
return(fXn[0]);
}
floatFIR()
{
floatfSum;
fSum=0;
for(i=0;i { fSum+=(fXn[i]*fHn[i]); } return(fSum); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 有限冲激响应滤波器FIR算法实验1 有限 冲激 响应 滤波器 FIR 算法