📄 fir滤波器设计程序.txt
字号:
设计一个FIR低通滤波器,其设计参数:滤波器阶数问40,截止频率为W=0.35π,W2=0.4π。
其MATLAB函数为:
f=[0 0.35 0.4 1]
m=[1 1 0 0]
b=fir2(39,f,m)
汇编源程序为:
.title "fir.asm"
.mmregs
.bss y,1
K_FIR_BFFR .set 40
PA0 .set 0
PA1 .set 1
FIR_COFF_TABLE .usect "FIR_COFF",40 ;定义数据存储空间
D_DATA_BUFFER .usect "FIR_BFR",40 ; 定义数据存储空间
.data
COFF_FIR_START: .word -7*32768/10000, 3*32768/10000 ;b0,b1
.word 14*32768/10000, 10*32768/10000 ;b2,b3
.word -16*32768/10000, -38*32768/10000 ;b4,b5
.word -8*32768/10000, 64*32768/10000 ;b6,b7
.word 81*32768/10000, -30*32768/10000 ;b8,b9
.word -169*32768/10000, -118*32768/10000 ;b10,b11
.word 162*32768/10000, 323*32768/10000 ;b12,b13
.word 83*32768/10000, 515*32768/10000 ;b14,b15
.word -689*32768/10000, 247*32768/10000 ;b16,b17
.word 2051*32768/10000, 3523*32768/10000 ;b18,b19
.word 3523*32768/10000, 2051*32768/10000 ;b20,b21
.word 247*32768/10000, -689*32768/10000 ;b22,b23
.word -515*32768/10000, 83*32768/10000 ;b24,b25
.word 353*32768/10000, 162*32768/10000 ;b26,b27
.word -118*32768/10000, -169*32768/10000 ;b28,b29
.word -30*32768/10000, 81*32768/10000 ;b30,b31
.word 64*32768/10000, -8*32768/10000 ;b32,b33
.word -38*32768/10000, -16*32768/10000 ;b34,b35
.word 10*32768/10000, 14*32768/10000 ;b36,b37
.word 3*32768/10000, -7*32768/10000 ;b38,b39
.text
.def FIR_INIT
.def FIR_TASK
FIR_INIT: SSBX FRCT ;设置小数乘法
STM #FIR_COFF,ARS ;AR1指向B0单元
RPT #K_FIR_BFFR-1 ;设置传输次数
MVPD #COFF_FIR_START,*AR5+ ;系数BI传输至数据区
STM #D_DATA_BUFFER, AR4 ;D_DATA_BUFFER缓冲区清0
RPTZ A,#K_FIR_BFFR-1
STL A,*AR4+
STM #(D_DATA_BUFFER+K_FIR_BFFR-1),AR4
STM #(FIR_COFF_TABLE+K_FIR_BFFR-1),AR5
STM #-1,AR0 ;设置双操作数减量
LD #D_DATA_BUFFER,DP ;设置页指针
PORTR PA1,@D_DATA_BUFFER ;输入X(N)
FIR_TASK: STM #K_FIR_BFFR,BK
RPTZ A,#K_FIR_BFFR-1 ;重复操作
MAC *AR4+0%,*AR5+0%,A ;双操作数乘法-累加
STH A,@y ;暂存Y(N)
PORTW @y,PA0 ;输出Y(N)
BD FIR_TASK ;循环
PORTR PA1,*AR4+0% ;输入最新样本,并修正AR3
.end
汇编源文件的链接文件:
/*SOLUTION FILE FOR FIR.CMD*/
vectors.obj
fir.obj
-o fir.out
-m fir.map
-e fir_init
MEMORY
{
PAGE0: EPROM: org=0E000H len=1000H
VECS : org=0FF60H len=0080H
PAGE1: SPRAM: org=0060H len=0020H
DARAM: org=0080H len=1380H
}
SECTIONS
{
.text : > EPROM PAGE0
.vcetors : > VECS PAGE0
.data : > EPRAM PAGE0
.bss : > SPRAM PAGE1
FIR_BFR : align(128){}> DARAM PAGE1
FIR_COFF :align(128){} > DARAM PAGE1
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -