8.1卷积运算的DSP实现 DSPLIB库提供了一个直接进行线性卷积运算的函数, 形式如下:(见安装目录文件夹dsplib下54xdsp.src文件) oflag short convol (DATA*x,DATA*h, DATA *r,ushort nh,ushort nr) 其中x,h为输入数组(长度nh),即进行卷积的两序列, r为输出(长度nr)。 nh 算法:r()=∑h(k)x(j-k) k=0 通常将分段后待滤波数据放于x数组,而将滤波器系 数放于h数组。按前述方法,x长度L+M-1, h长度M,则 nr应为L+M-1。计算得结果后,舍弃r前M-1个值。 15
8.1 卷积运算的DSP实现 DSPLIB库提供了一个直接进行线性卷积运算的函数, 形式如下:(见安装目录文件夹dsplib下54xdsp.src文件) oflag = short convol (DATA *x, DATA *h, DATA *r, ushort nh, ushort nr) 其中x, h为输入数组(长度nh), 即进行卷积的两序列, r为输出(长度nr)。 算法: 0 ( ) ( ) ( ) nh k r h x j k j k = = − 15 通常将分段后待滤波数据放于 x 数组,而将滤波器系 数放于h数组。按前述方法, x长度L+M-1,h长度M,则 nr应为L+M-1。计算得结果后,舍弃r前M-1个值
8.1卷积运算的DSP实现 2.汇编语言设计 C54x指令集内提供了单周期乘累加指令MAC和循环 寻址方式,使每个采样值的乘累加计算可以在一个 周期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可 采用RPTZ和MAC指令,结合循环寻址方式去方便 地实现这一运算: RPTZ累加器,N-1 MAC(双访问数据),(双访问数据),累加器 MAC *AR4 +0%,*AR3+,A 山东大学生物医学工程刘忠国 18
8.1 卷积运算的DSP实现 2.汇编语言设计 C54x指令集内提供了单周期乘累加指令MAC和循环 寻址方式,使每个采样值的乘累加计算可以在一个 周期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可 采用RPTZ和MAC指令,结合循环寻址方式去方便 地实现这一运算: RPTZ 累加器,N-1 MAC (双访问数据),(双访问数据),累加器 MAC *AR4 +0%, *AR3+, A 山东大学生物医学工程刘忠国 18
8.1卷积运算的DSP实现 程序设计的要点简要分析如下: >为了能高效的利用DSP流水线,待卷积的两组 数据都应存放在DARAM中 >如果使用双操作数指令,辅助寄存器只能用 AR2~AR5,在此我们选择AR3和AR4作为双操 作数寻址辅助寄存器 汇编语言的代码设计要充分考虑到资源的优化 等 山东大学生物医学工程刘忠国 20
8.1 卷积运算的DSP实现 程序设计的要点简要分析如下: ➢为了能高效的利用DSP流水线,待卷积的两组 数据都应存放在DARAM中 ➢如果使用双操作数指令,辅助寄存器只能用 AR2~AR5,在此我们选择AR3和AR4作为双操 作数寻址辅助寄存器 ➢汇编语言的代码设计要充分考虑到资源的优化 等 山东大学生物医学工程刘忠国 20
8.1卷积运算的DSP实现 输入数据 冲激响应系数 输出数据 初始起始地址。 x(0) e h(7) AR4 y(0) AR5 第二次秉累加起始地址→ x1) h(6) y1) 低地址老数据 x2) h(5) y(2) x(3) h(4) y3) x4) h(3) y4) x5) h(2) y5) X6) h(1) y6) x(7) h(0) P=8 高地址新数据 y232) x(237) L=233 x238) x239) L+P.1=240 图8-6重叠保留法卷积数据存放 山东大学生物医学工程刘忠国 21
8.1 卷积运算的DSP实现 L+P-1=240 图8-6 重叠保留法卷积数据存放 L=233 P=8 山东大学生物医学工程刘忠国 21 AR1
重叠保留法卷积运算算法程序 在此经常使用一种零长度循环缓冲区(BK=0),循环体 对应的汇编程序如下:(修改书中对应的红色部分) .bss x,240 .bss y,233 输入数据 冲激响应系数 X AR1 x0) AR3 h h(7) .bss h,8 ←AR4 x1) h(6) BEGIN:STM #232,BRC x2) h(5) STM #x,AR1 x3) h(4) STM #x,AR3 x4) h(3) X5) h(2) STM h,AR4 x6) h(1) STM #y,AR5 x7) h(0) ←AR4 STM #-7,AR0 loop starts AR4 +ARO RPTB next-1 22 山东大学生物医学工程刘忠国
.bss x,240 .bss y,233 .bss h,8 BEGIN: STM # 232, BRC ; 块重复次数(输出数据) STM # x, AR1 ; 输入数据起始地址 STM # x, AR3 ; 输入数据起始地址 STM # h, AR4 ; 滤波器系数起始地址(倒序) STM # y, AR5 ; 输出数据起始地址 STM # -7, AR0 ;滤波系数缓冲区循环偏移值 ; loop starts RPTB next-1 重叠保留法卷积运算算法程序 在此经常使用一种零长度循环缓冲区(BK=0),循环体 对应的汇编程序如下: (修改书中对应的红色部分) 山东大学生物医学工程刘忠国 22 AR1 X h AR4 +AR0 ←AR4