第8章数字信号处理典型算法程序设计 其算法为: h r()=∑h(k)x(-k)0<<=mr k=0 通常我们将分段后的待滤波数据放于X数组中,而将 滤波器冲激响应序列放于h数组。按前述方法,x长 度为L+M-1,h长度为M,则nr应为L+M-1。计算得 到结果后,舍弃r的前M-1个值
第8章 数字信号处理典型算法程序设计 其算法为: 0 ( ) ( ) ( ) nh k r j h k x j k = = − 0 <=j <=nr 通常我们将分段后的待滤波数据放于X数组中,而将 滤波器冲激响应序列放于h数组。按前述方法,x长 度为L+M-1,h长度为M,则nr应为L+M-1。计算得 到结果后,舍弃r的前M-1个值
第8章数字信号处理典型算法程序设计 其算法为:()=∑h(k)(-k),0<7=m C程序代码为: k=0 # define frame240∥输入数据长度 # define FilterLength8/滤波器长度 for(i=0; i<(Frame-7);i++) for(j=0;i< FilterLength; j++ ACCO=L mac(AccO, Filterd, spnt[i+j]); spnt= round(Acc0);∥小数16位精度 注:Lmac:AcC0= Filter* Spnt,参见 TMS320C54X-Optimizing C-C++ Compiler User's Guide-spru103g-October 2002 pdf
第8章 数字信号处理典型算法程序设计 其算法为: 0 ( ) ( ) ( ) nh k r j h k x j k = = − ,0 <=j <=nr C程序代码为: #define Frame 240 //输入数据长度 #define FilterLength 8 //滤波器长度 for ( i = 0 ; i < (Frame-7) ; i ++ ) { for ( j = 0 ; j < FilterLength ; j ++ ) Acc0 = L_mac( Acc0, Filter[j], Spnt[i+j] ) ; Spnt[i] = round( Acc0) ; //小数16位精度 } 注: L_mac:Acc0=Filter*Spnt, 参见TMS320C54x-Optimizing C-C++ Compiler User’s Guide-spru103g-October 2002.pdf
第8章数字信号处理典型算法程序设计 2汇编语言设计 C54x指令集内提供了单周期乘累加指令MAC和循环 寻址方式,使每个样值的乘累加计算可以在一个周 期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可 采用RPTZ和MAC指令,结合循环寻址方式去方便 地实现这一运算: RPTZ累加器,N-1 MAc(双访问数据),(双访问数据),累加器
第8章 数字信号处理典型算法程序设计 2.汇编语言设计 C54x指令集内提供了单周期乘累加指令MAC和循环 寻址方式,使每个样值的乘累加计算可以在一个周 期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可 采用RPTZ和MAC指令,结合循环寻址方式去方便 地实现这一运算: RPTZ 累加器,N-1 MAC (双访问数据),(双访问数据),累加器
第8章数字信号处理典型算法程序设计 其中,RPTZ指令将累加器清零初始化,并将 立即数N-1(16位)装入到重复计数器,使下 一条指令重复执行N次。 MAc指令实现将两存储区数据的乘积累加到 累加器,再通过存储区指针以循环寻址的方 式指向下一个存储区
第8章 数字信号处理典型算法程序设计 其中,RPTZ 指令将累加器清零初始化,并将 立即数N-1(16位)装入到重复计数器,使下 一条指令重复执行N次。 MAC指令实现将两存储区数据的乘积累加到 累加器,再通过存储区指针以循环寻址的方 式指向下一个存储区
第8章数字信号处理典型算法程序设计 程序设计的要点简要分析如下: 为了能高效的利用DSP流水线,待卷积的两组 数据都应存放在 DARAM中 如果使用双操作数指令,辅助寄存器只能用 AR2~AR5,在此我们选择AR3和AR4作为双操 作数寻址辅助寄存器 >汇编语言的代码设计要充分考虑到资源的优化 等
第8章 数字信号处理典型算法程序设计 程序设计的要点简要分析如下: ➢为了能高效的利用DSP流水线,待卷积的两组 数据都应存放在DARAM中 ➢如果使用双操作数指令,辅助寄存器只能用 AR2~AR5,在此我们选择AR3和AR4作为双操 作数寻址辅助寄存器 ➢汇编语言的代码设计要充分考虑到资源的优化 等