保号怎3 第9章C54x综合应用系统设计 本章将要讲解通信与信号处理中常见的 下列几种具有代表性的算法在C54x芯 片中的具体实现方法: ·卷积 ·有限冲激响应(IR)数字滤波器 ·无限冲激响应仙R)数字滤波器 快速傅立叶变换(FFT) 1
第9章 C54x综合应用系统设计 本章将要讲解通信与信号处理中常见的 下列几种具有代表性的算法在C54x芯 片中的具体实现方法: • 卷积 • 有限冲激响应(FIR)数字滤波器 • 无限冲激响应(IIR)数字滤波器 • 快速傅立叶变换(FFT) 1
保号怎3 第9章C54x综合应用系统设计 目录: >9.1数字信号处理算法的DSP实现 >9.2C54x应用系统设计实例 >9.3DSP系统的调试与抗干扰措施 山东大学生物医学工程刘忠国 2
第9章 C54x综合应用系统设计 目录: ➢9.1 数字信号处理算法的DSP实现 ➢9.2 C54x应用系统设计实例 ➢9.3 DSP系统的调试与抗干扰措施 山东大学生物医学工程刘忠国 2
9.1数字信号处理算法的DSP实现 9.1.1卷积运算的结构 连续时间函数x()与h()的卷积积分: y(t)=x(t)*h(t)=x()h(t-t)dt 离散时间序列x[n与h[m的卷积: y[n]=x[n]*h[n]=>h[k]x[n-k] k=-o∞ 与卷积积分一样,离散卷积也可通过图解法来计算, 分为反折、平移、相乘、求和等过程。 9.1.2.卷积运算在C54x上的实现>三种实现方式 3
9.1 数字信号处理算法的DSP实现 9.1.1卷积运算的结构 连续时间函数x(t)与h(t)的卷积积分: y t x t h t x h t d ( ) ( ) ( ) ( ) ( ) − = = − 3 [ ] [ ] [ ] [ ] [ ] k y n x n h n h k x n k =− = = − 与卷积积分一样,离散卷积也可通过图解法来计算, 分为反折、平移、相乘、求和等过程。 离散时间序列x[n]与h[n]的卷积: 9.1.2. 卷积运算在C54x上的实现 ➢三种实现方式
9.1.2.卷积运算在C54x上的实现 >三种实现方式 1.根据卷积定义直接C语言实现 #define MAX(a,b)((a>b)?(a):(b)) /取最大值宏定义 #define MIN (a,b)((a<b)?(a):(b)) 取最小值宏定义 #define NH 3 卷积核长度 #define NX 5 输入矢量长度 int main(int argc,char argv ∥主函数 {short h[NH]={1,3,5) 卷积核 short x[NX]={2,4,6,8,10}; 输入矢量 short r[NH+NX-1]={0); 输出矢量 int i,j; 临时变量 for(i=0;i<NH+NX;i++) 外层循环 forG=MAX(0,i+1-NX);j<=MIN(i,NH-1);j++)W内层循环 [叮=h]*x[i-j1; ∥卷积计算主体 4
9.1.2. 卷积运算在C54x上的实现 1. 根据卷积定义直接C语言实现 #define MAX(a,b) ((a>b)?(a):(b)) //取最大值宏定义 #define MIN (a,b) ((a<b)?(a):(b)) //取最小值宏定义 #define NH 3 //卷积核长度 #define NX 5 //输入矢量长度 int main( int argc, char * * argv ) //主函数 {short h[NH]={1,3,5} ; //卷积核 short x[NX]={2,4,6,8,10} ; //输入矢量 short r[NH+NX-1]={0} ; //输出矢量 int i, j; //临时变量 for(i=0;i<NH+NX; i++) //外层循环 for(j=MAX(0, i+1-NX); j<=MIN(i, NH-1); j++) //内层循环 i[i]=h[j]*x[i-j]; //卷积计算主体 } 4 ➢三种实现方式
9.1.2.卷积运算在C54x上的实现 2.利用C54x自带的dsplib库函数实现 >T公司提供了以C54x系列芯片为基础的DSPLIB库 函数,在CCS开发系统内包含DSPLIB库函数。 >这些库函数均为经过优化处理的符合C语言标准的 函数。 >其中,convoli函数可进行线性卷积运算。 Optimized DSP Library for C Programmers on the TMS320C54x-SPRA480B.pdf TMS32054X函数库中文用户指南-DSP优化C函数库 5
9.1.2. 卷积运算在C54x上的实现 2.利用C54x自带的dsplib库函数实现 ➢TI公司提供了以C54x系列芯片为基础的DSPLIB库 函数,在CCS开发系统内包含DSPLIB库函数。 ➢这些库函数均为经过优化处理的符合C语言标准的 函数。 ➢其中,convol函数可进行线性卷积运算。 5 Optimized DSP Library for C Programmers on the TMS320C54x -SPRA480B.pdf TMS32054X 函数库中文用户指南--DSP优化C函数库
9.1数字信号处理算法的DSP实现 convoli函数实现线性卷积的算法 在实际应用中,参与卷积运算的两个序列 长度往往差距较大,比如我们要实时地对一长 序列语音信号进行“过滤”处理,可以采用有 限冲激响应序列与该语音信号进行分段卷积的 方法来实现。 比如:重叠保留法 >可用用圆周卷积计算线性卷积 6
9.1 数字信号处理算法的DSP实现 convol函数实现线性卷积的算法 6 在实际应用中,参与卷积运算的两个序列 长度往往差距较大,比如我们要实时地对一长 序列语音信号进行“过滤”处理,可以采用有 限冲激响应序列与该语音信号进行分段卷积的 方法来实现。 比如:重叠保留法 ➢可用用圆周卷积计算线性卷积
Circular Convolution as Linear Convolution with Aliasing is related to overlap-save method x(n] nr+nh-1=8 nr+nh-1 nr =5 h[可 nh 4 nh x3 [n=x n *h n nr+nh-1 nr+2nh-2 (a) N=nr+nh-1 xp[川=x[n]x[n] 圆周卷积有nr个值与线性卷积值相同 nh-1 nr+nh-1 10
10 nr nh 1 + − = 8 Circular Convolution as Linear Convolution with Aliasing is related to overlap-save method nr+nh-1 nh x n h n nh = 4 nr = 5 x n x n h n 3 = nr+2nh-2 nh-1 nr+nh-1 圆周卷积有nr个值与线性卷积值相同 N=nr+nh-1 x n x n 3 1 2 p = N x n nr+nh-1
h overlap-save method P点 input (1)segmentx(n)into sections of length L,overlap P-1 points; (2)fill 0 intoh(n)and some section of x(n),then do L points FFT 1P-1 L=25 points (③)calculate y(n) y(n)=IFFT(H(k)X(k) n=0,,L-1 P-1 vop[n] points P-1 (4)the output for this section is "points L-(P-1)points of y[n] L-(P-1),pQints n=P-1,.L-1 圆周卷积中后L-(P1)个点结果与线性卷积相等!
input 11 overlap-save method (4) the output for this section is L-(P-1) points of y[n] n=P-1,…L-1 (1) segment into sections of length L, overlap P-1 points; x(n) (2) fill 0 into and some section of , then do L points FFT h n( ) x n( ) y n IFFT H k X k ( ) { ( ) ( )} = (3) calculate y(n) n L = − 0,..., 1 L=25 圆周卷积中后L-(P-1)个点结果与线性卷积相等 P-1 points P-1 points P-1 points L L-(P-1) points P点
2.利用C54x自带的dsplib库函数实现卷积 DSPLIB库提供了一个直接进行线性卷积运算的函数, 形式如下:(见TMS320C54xDSP优化C函数库-用户指南) oflag short convol (DATA*x,DATA *h, DATA*r,ushort nr,ushort nh) 其中x,h为输入数组(长度nh),即进行卷积的两序列, r为输出(长度nr)。 nh 算法:r(j)=》h(k)x(j-k) k=0 通常将分段后待滤波数据放于x数组,而将滤波器系 数放于h数组。按圆周卷积,x长度nr+nh-1,h长度nh, 则r长度应为nr+nh-1。r前nh-1个值与线性卷积值不同, 舍弃后,r有效值长度为nr。 12
2. 利用C54x自带的dsplib库函数实现卷积 DSPLIB库提供了一个直接进行线性卷积运算的函数, 形式如下:(汇编文件见安装目录文件夹dsplib下54xdsp.src) oflag = short convol (DATA *x, DATA *h, DATA *r, ushort nr, ushort nh) 其中x, h为输入数组(长度nh), 即进行卷积的两序列, r为输出(长度nr)。 算法: 0 ( ) ( ) ( ) nh k r h x j k j k = = − 12 通常将分段后待滤波数据放于 x 数组,而将滤波器系 数放于h数组。按圆周卷积, x长度nr+nh-1,h长度nh, 则r长度应为nr+nh-1。r前nh-1个值与线性卷积值不同, 舍弃后, r有效值长度为nr 。 (见TMS320C54x DSP优化C函数库--用户指南)
2.利用C54x自带的dsplib库函数实现 convoli函数实现卷积的应用过程 #include“dsplib.h #define NH 3 川卷积核长度 #define NX 7 W输入矢量长度 main()l主函数 { short h[NH]={1000,3000,5000};/卷积核 short x[NX灯={0,0,2000,4000,6000,8000,10000};1∥输入矢量 short r[NR] /输出矢量 convol (x,h,r,NH,NR); /卷积计算 } 13
2.利用C54x自带的dsplib库函数实现 13 convol函数实现卷积的应用过程 #include “dsplib.h” #define NH 3 //卷积核长度 #define NX 7 //输入矢量长度 main( ) //主函数 { short h[NH]={1000,3000,5000} ; //卷积核 short x[NX]={0,0,2000,4000,6000,8000,10000} ; //输入矢量 short r[NR] ; //输出矢量 convol (x, h, r, NH, NR) ; //卷积计算 }