有限冲激响应滤器FIR算法硬件实现Word文档格式.docx
《有限冲激响应滤器FIR算法硬件实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《有限冲激响应滤器FIR算法硬件实现Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
![有限冲激响应滤器FIR算法硬件实现Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/13/0d07c943-ab67-4c49-8293-920ae06c3978/0d07c943-ab67-4c49-8293-920ae06c39781.gif)
设计一维有限冲激响应数字滤波器常用的方法有:
窗函数法、频率采样法和等波纹机助优化设计法。
设计有限冲激响应数字滤波器最直接的方法就是把无限冲激响应序列截短,得到有限长度的冲激响应。
设所要求的理想频率响应为Hd(),其单位冲激响应Hd(n)为Hd()的傅里叶反变换。
Hd(n)是非因果无限长序列。
为使得所设计的数字滤波器的有限冲激响应h(n)逼近hd(n),采用对hd(n)加窗的方法,即令h(n)=hd(n)w(n)
式中w(n)为有限长度窗序列。
由褶积定理可求得所设计的滤波器的频率响应。
根据要求设计低通FIR滤波器
要求:
通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75dB,采样频率50kHz。
设计:
-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz
-采样频率:
f1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz
Ω1=2πf1/fs=0.64π
-理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/π=sin(0.64πn)/n/π
-根据要求,选择布莱克曼窗,窗函数长度为:
N=5.98fs/过渡带宽度=5.98*50/12=24.9
-选择N=25,窗函数为:
w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24)
-滤波器脉冲响应为:
h[n]=h1[n]w[n]|n|≤12
h[n]=0|n|>12
-根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。
-完成的滤波器的差分方程为:
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]
程序流程图
2.模数转换工作过程
-模数转换模块接到启动转换信号后,按照设置进行相应通道的数据采样转换。
-经过一个采样时间的延迟后,将采样结果放入AD数据寄存器中保存。
-等待下一个启动信号。
3.模数转换的程序控制
模数转换相对于计算机来说是一个较为缓慢的过程。
一般采用中断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。
设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。
4.混频波形产生
将接收到的两路AD采集信号进行相加,并对结果的幅度进行限制,从而产生混合后的输出波形。
实验中采用了同相位混频方法,也可修改程序完成异相混频法。
5.FIR滤波器工作原理
在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,使之成为8bit的数字信号,一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。
FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器。
1.程序设计
Fir滤波器工作原理及参数计算:
通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75kHz,采样频率50kHz。
-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz
-采样频率:
F1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz
Ω1=2Πf1/fs=0.64Π
--理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/Π=sin(0.64Πn)/n/Π
--根据要求,选择布莱克曼窗,窗函数长度为:
N=5.98fs/过渡带宽度=5.98*50/12=24.9
--选择N=25,窗函数为:
W[n]=0.42+0.5cos(2лn/24)+0.8cos(4лn/24)
--滤波器脉冲响应为:
h[n]=h1[n]W[n]|n|≤12
h[n]=0|n|>
12
--根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。
--完成滤波器的差分方程为:
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]
6.源程序及注释
本实验程序在AD中断中对AD进行连续采样。
由于需要进行实时混频,所以交替转换通道0和通道1(ICETEK-F2812-EDU实验箱上ADCIN0和ADCIN1)。
汇编语言实现fir滤波器程序清单:
.title“FIR1.ASM”
.mmregs
.defstart
x.usect“x”,8
PA0.set0
PA1.set1
.data
COEF:
.word1*32768/10
.word2*32768/10
.word-4*32768/10
.word3*32768/10
.word1*32768/10
.text
start:
SSBXFRCT
STM#x+7,AR2
STM#6,AR0
LD#x+1,DP
PORTRPA1,@x+1
FIR1:
RPTZA,#6
MACD*AR2-,COEF,A
STHA,*AR2
PORTW*AR2+,PA0
BDFIR1
PORTRPA1,*AR2+0
.end
用循环缓冲区实现FIR滤波器
程序清单:
.title“FIR2.ASM”
.mmregs
.bssy,1
xn.usect“xn”,7
b0.usect“b0”,7
table:
.word4*32768/10
.word5*32768/10
.word6*32768/10
.word7*32768/10
.text
STM#b0,AR1
RPT#6
MVPDtable,*AR1+
STM#xn+6,AR2
STM#b0+6,AR3
STM#7,BK
STM#-1,AR0
LD#xn,DP
PORTRPA1,@xn
FIR2:
MAC*AR2+0%,*AR3+0%,A
STHA,@y
PORTW@y,PA0
BDFIR2
PORTRPA1,*AR2+0%
.end
链接命令文件
FIR2.obj
vectors.obj
-oFIR2.out
-mFIR2.map
-estart
MEMORY
{
PAGE0:
EPROM:
org=0E000h,
len=1000h
VECS:
org=0FF80h,
len=0080h
PAGE1:
SPRAM:
org=0060h,
len=0020h
DARAM:
org=0080h,
len=1380h
}
SECTIONS
.text:
>
EPROMPAGE0
.data:
.bss:
SPRAMPAGE1
xn:
align(8){}>
DARAMPAGE1
b0:
.vections:
VECSPAGE0
五,硬件框图:
六,程序流程图:
七,调试过程及步骤
1,实验准备
(1)连接实验设备。
(2)准备信号源进行AD输入。
①取出试验箱附带的信号线
②用一根信号线连接试验箱左侧信号源的波形输出A端口和“A/D输入”模块的“ADCIN0”插座注意插头要插牢,到底。
这样,信号源波形输出A的输出波形即可送到ICETEK-F2812A板的AD输入通道0。
③用一根信号线连接试验箱左侧信号源的波形输出B端口和“A/D输入”模块的“ADCIN1”插座注意插头要插牢,到底。
这样,信号源波形输出B的输出波形即可送到ICETEK-F2812A板的AD输入通道1。
④设置波形输出A:
-向内侧按波形频率选择按钮,直到标有正弦波的指示灯
点亮。
-上下调节波形频率选择旋钮,直到标有100-1KHz的指示灯亮。
-调节幅值调整旋钮,将波形输出A的幅值调到适当位
置。
⑤设置波形输出B:
-向内侧按波形频率选择按钮,直到标有正弦波的指示灯
点亮。
-上下调节波形频率选择旋钮,直到标有1KHz-10KHz的指示灯亮。
-调节幅值调整旋钮,将波形输出B幅值调到适当位置。
2,设置CodeComputerStudio2.21在硬件(Emulator)方式下行。
3,启动CodeComputerStudio2.21选择菜单Debug>
ResetCPU
4,打开工程文件:
工程目录:
D\dsp\t8\mixerfir