zyh_126

有限冲击响应滤波器DSP实现

0
阅读(2631)

在利用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之间的整数