有限冲击响应滤波器DSP实现
0赞在利用C55系列处理器编程时,应充分利用处理器所提供的各种条件,充分发挥C55X内核双乘法器的作用,并灵活的运用辅助寄存器的各种寻址方式。这样做将提高处理器的工作效率,更好的满足系统的实时性的要求。
程序如下:
N_TAPS .set 4 //滤波器抽头
N_DATA .set 11
.data
COEFFS .int 1,2,3,4
IN_DATA .int 1,2,3,4,5,6,7,8,9,10,11
.bss OUT_DATA,N_DATA+N_TAPS-1,1
..text
BCLK ARAS
.arms_off
bfir:
MOV #COEFFS ,XCDP
AMOV #(IN_DATA +N_TAPS-1),XAR0
AMOV #(IN_DATA +N_TAPS),XAR1
AMOV #OUT_DATA,XAR2
MOV #((IN_DATA-N_TAPS+1)/2-1),BRC0
MOV #(N_TAPS3-3),CSR
MOV #(-(N_TAPS-1)),T0
MOV #(-N_TAPS+1),T1
|| RPTBLOCAL FIREND-1
MPY *AR0-,*CDP+,AC0
RPT CSR
MACM *AR0-,*CDP,AC0
::MACM *AR1-,*CDP+,AC1
MACM *AR0(T1),*CDP(T0),AC0
::MACM *AR1(T1),*CDP(T0),AC1
MOV db1(LO(AC0)),db1(*AR2)
FIREND
N_DATA为输入数据,可在汇编中定义如下
.global _N_DATA然后再C语言重声明extern int N_DATA[],COEFFS 为滤波器系数,可通过上一篇中的matlab生产,这个可以根据需要设置滤波阶数和滤波频率等参数。还要注意的一点是生成的系数一般是小数,要转化成系数在-32768~32768之间的整数
