DSP教程7.应用程序设计.pdf
- 文档编号:14648904
- 上传时间:2023-06-25
- 格式:PDF
- 页数:38
- 大小:525.18KB
DSP教程7.应用程序设计.pdf
《DSP教程7.应用程序设计.pdf》由会员分享,可在线阅读,更多相关《DSP教程7.应用程序设计.pdf(38页珍藏版)》请在冰点文库上搜索。
1嵌入式嵌入式DSP软件开发软件开发2第七章:
应用程序设计第七章:
应用程序设计目标目标:
本章旨在向学员介绍本章旨在向学员介绍TMS320C55x典型应用程序的设典型应用程序的设计方法,具体内容如下:
计方法,具体内容如下:
1)数据的定标与溢出的处理方法数据的定标与溢出的处理方法2)FIR、IIR滤波器和滤波器和FFT的程序设的程序设计计时间:
时间:
4学时学时教学方法:
讲授教学方法:
讲授PPT+练习练习37.17.1定标与溢出处理定标与溢出处理7.1.1数的定标数的定标小数定标的概念小数定标的概念设定一个设定一个16位数的小数点处于该数中的哪一位位数的小数点处于该数中的哪一位可以表示不同大小和不同精度的小数可以表示不同大小和不同精度的小数Q表示法表示法表表7-1列出了一个列出了一个16位数的位数的16种种Q表示及它们所能表示的表示及它们所能表示的十进制数值范围十进制数值范围47.1.17.1.1数的数的定标定标表表71Q表示及数值范围表示及数值范围Q表示表示十进制数十进制数X表示范围表示范围Q表示表示十进制数十进制数X表示范围表示范围Q15-1X0.9999695Q7-256X255.9921875Q14-2X1.9999390Q6-512X511.9804375Q13-4X3.9998779Q5-1024X1023.96875Q12-8X7.9997559Q4-2048X2047.9375Q11-16X15.9995117Q3-4096X4095.875Q10-32X31.9990234Q2-8192X8191.75Q9-64X63.9980469Q1-16384X16383.5Q8-128X127.9960938Q0-32768X3276757.1.17.1.1数的定标数的定标不同的不同的Q所表示的数不仅范围不同,而且精度也不相同所表示的数不仅范围不同,而且精度也不相同Q越大,数值范围越小,但精度越高越大,数值范围越小,但精度越高Q越小,数值范围越大,但精度就越低越小,数值范围越大,但精度就越低例如,例如,Q0的数值范围是的数值范围是-32768到到+32767,其精度为,其精度为1;Q15的数值范围为的数值范围为-1到到0.9999695,精度为,精度为1/32768=0.0000305167.1.17.1.1数的定标数的定标在在C55x中,中,16位整数采用补码形式表示。
每个采用位整数采用补码形式表示。
每个采用Qi定标的定标的16位数用位数用1个符号位、个符号位、i个小数位和个小数位和15-i个整数位来表示。
个整数位来表示。
b14b13b12b1b011/21/41/82-142-15MSB(最高位)LSB(最低位)Q15格式小数位权值b15b14b13b12b1b0211/21/42-132-14MSB(最高位)LSB(最低位)Q14格式小数位权值b15b14b13b12b1b02152142132122120MSB(最高位)LSB(最低位)Q0格式各位权值b15图图71Q15、Q14及及Q0格式数据的各位权值格式数据的各位权值77.1.17.1.1数的定标数的定标同样一个同样一个1616位数,若小数点设定的位置不同,它所表示的数位数,若小数点设定的位置不同,它所表示的数也就不同。
也就不同。
表表7-2同样的数在不同定标方式下所表示的具体数值同样的数在不同定标方式下所表示的具体数值Q格式格式十六进制数十六进制数二进制数二进制数十进制数十进制数Q02000H0010000000000000b8192Q142000H0010000000000000b0.5Q152000H0010000000000000b0.25Q0E000H1110000000000000b8192Q14E000H1110000000000000b0.5Q15E000H1110000000000000b0.2587.1.27.1.2溢出的处理方法溢出的处理方法1.溢出溢出如果算术运算结果超出寄存器所能表示的最大数就会出现溢如果算术运算结果超出寄存器所能表示的最大数就会出现溢出出因为因为16位定点位定点DSP的动态范围有限,所以在使用时必须注的动态范围有限,所以在使用时必须注意动态范围以防溢出意动态范围以防溢出溢出还与输入信号的特性和运算法则有关溢出还与输入信号的特性和运算法则有关97.1.27.1.2溢出的处理方法溢出的处理方法2.C55x的溢出处理机制的溢出处理机制C55x有以下几种硬件特性可以处理溢出:
有以下几种硬件特性可以处理溢出:
保护位保护位C55x的每个累加器都有的每个累加器都有8个保护位(个保护位(3932位),允位),允许连续许连续256次乘加操作而累加器不溢出次乘加操作而累加器不溢出溢出标志位溢出标志位C55x的每个累加器都有相关的溢出标志位,当累加器的每个累加器都有相关的溢出标志位,当累加器操作结果出现溢出时,这个标志位就会置位操作结果出现溢出时,这个标志位就会置位107.1.27.1.2溢出的处理方法溢出的处理方法饱和方式位饱和方式位SATD和和SATASATD控制控制D单元的操作,单元的操作,SATA控制控制A单元的操作。
单元的操作。
如果如果SATD=1,当,当D单元发生溢出时,对单元发生溢出时,对D单元的结果进单元的结果进行饱和处理。
不管饱和方式位的值是什么,当累加器发生行饱和处理。
不管饱和方式位的值是什么,当累加器发生溢出时,相应的溢出标志位都会被置位溢出时,相应的溢出标志位都会被置位A单元没有溢出标志位,但如果单元没有溢出标志位,但如果SATA=1,发生溢出时,发生溢出时,结果也会进行饱和处理结果也会进行饱和处理117.2FIR7.2FIR滤波器滤波器数字滤波器是数字滤波器是DSP的基本应用,有的基本应用,有2种基本类型:
种基本类型:
有限冲激响应滤波器有限冲激响应滤波器FIR无限冲激响应滤波器无限冲激响应滤波器IIR127.2.1FIR7.2.1FIR滤波器的基本结构滤波器的基本结构一个一个FIR滤波器的输出序列和输入序列之间的关系,满足差分滤波器的输出序列和输入序列之间的关系,满足差分方程:
方程:
10Niiynbxni(71)137.2.2FIR7.2.2FIR滤波器的滤波器的CC语言编程实现语言编程实现例例77-99,FIRFIR滤波器的滤波器的CC语言编程实现。
语言编程实现。
/*fir.c该程序用于实现该程序用于实现FIR滤波器滤波器*L滤波器的阶数滤波器的阶数*bi滤波器的系数滤波器的系数,i=0,1,L-1*xi输入信号向量输入信号向量,i=0,1,L-1;x0对应于当前值对应于当前值,x1对对应于上一采样值应于上一采样值*x_in输入信号的当前值输入信号的当前值*y_out输出信号的当前值输出信号的当前值*/14floatfir(floatx_in,float*x,float*b,intL)floaty_out;inti;/*把上一个采样时间的输入信号向量延迟一个单元把上一个采样时间的输入信号向量延迟一个单元,得到当前采样时间的输入信号向量得到当前采样时间的输入信号向量*/for(i=L-1;i0;i-)xi=xi-1;x0=x_in;y_out=0.0;/*完成完成FIR滤波滤波*/for(i=0;iL;i+)y_out=y_out+bi*xi;returny_out;15FIRFIR滤波器的实现涉及到两个基本操作,一个是输入信号向量与滤波器的实现涉及到两个基本操作,一个是输入信号向量与滤波器系数向量的内积计算,另一个是输入信号向量的更新处理。
滤波器系数向量的内积计算,另一个是输入信号向量的更新处理。
在每个采样周期信号缓冲器都要更新一次,最老的采样在每个采样周期信号缓冲器都要更新一次,最老的采样xx(nnN+1N+1)被抛弃,而其他的信号则向缓冲器的右方移动一个单元,)被抛弃,而其他的信号则向缓冲器的右方移动一个单元,一个新的采样被插入存储单元,并被标记一个新的采样被插入存储单元,并被标记xx(nn)。
)。
167.3IIR7.3IIR滤波器滤波器IIR滤波器的优点:
结构简单,运算量小,可以用较少的阶数滤波器的优点:
结构简单,运算量小,可以用较少的阶数获得很高的选择性。
获得很高的选择性。
IIR滤波器的缺点:
具有相位特性差,存在稳定性问题。
滤波器的缺点:
具有相位特性差,存在稳定性问题。
177.3.17.3.1二阶二阶IIRIIR滤波器的结构滤波器的结构二阶二阶IIR滤波器的输出可以写成:
滤波器的输出可以写成:
y(n)=b0x(n)+b1x(n-1)+b2x(n-2)-a1y(n-1)-a2y(n-2)(74)18图图77-44二阶二阶IIRIIR滤波器的直接型滤波器的直接型的实现的实现+Z-1Z-1+Z-1Z-1)1(nx)2(nx)y(n1)2(ny)(1zH)(2zH1a2a2b1b0b)(nx)(ny197.3.27.3.2高阶高阶IIRIIR滤波器的结构滤波器的结构在实际问题中,利用多个二阶在实际问题中,利用多个二阶IIR滤波器的串联或并联实现一滤波器的串联或并联实现一个高阶的个高阶的IIR滤波器。
因为在串联实现中,一个参数的变化只滤波器。
因为在串联实现中,一个参数的变化只影响一个环节内的极点;在并联实现中,一个参数的变化只影影响一个环节内的极点;在并联实现中,一个参数的变化只影响与其相关环节的极点。
响与其相关环节的极点。
20Z-1Z-1+)(nxk)(nwk)(nykka1ka2kb1kb2)1(nwk)2(nwk图图77-88第第kk个二阶节个二阶节21)(zHk)2()1()()(21nwanwanxnwkkkkkk)2()1()()(21nwbnwbnwnykkkkkk)()(1nynxkkKk,.,2,1)()(01nxbnx)()(nynyk对于对于,有,有其中,其中,注意:
注意:
(77)(78)(79)(710)(711)227.3.3IIR7.3.3IIR滤波器的滤波器的CC语言实现语言实现例例77-10,10,采用二维数组编写的采用二维数组编写的IIRIIR滤波器滤波器CC语言程序。
语言程序。
temp=xin;/*xin为为IIR滤波器的输入滤波器的输入*/for(k=0;kN_IIR;k+)/*N_IIR为为IIR滤波器二阶节的个数滤波器二阶节的个数w0k=temp-a1k*w1k-a2k*w2k;/*这里这里,temp为本二阶节的输入为本二阶节的输入,也是上一级二阶节的输出也是上一级二阶节的输出*/temp=b0k*w0k+b1k*w1k+b2k*w2k;/*这里这里,temp为本二阶节的输出为本二阶节的输出,也是下一级二阶节的输入也是下一级二阶节的输入*/w2k=w1k;w1k=w0k;xoutput=temp;/*xoutput为为IIR滤波器的输出滤波器的输出*/aik(i=1,2)和)和bik(i=0,1,2)分)分别为第别为第k(k=0,1,K)个二阶)个二阶IIR滤波器滤波器环节的系数。
环节的系数。
wik(i=0,1,2)是第是第k个二阶个二阶IIR滤波器环滤波器环节中对应于图节中对应于图7-10中中(m=0,1,2)的中间信的中间信号。
号。
237.47.4快速傅立叶变换快速傅立叶变换FFTFFT7.4.1FFT7.4.1FFT算法原理算法原理快速傅里叶变换(快速傅里叶变换(FFT)是离散傅里叶变换()是离散傅里叶变换(DFT)的一种)的一种快速算法。
通过快速算法。
通过FFT算法,算法,DFT的计算量大大减少,运算时间的计算量大大减少,运算时间缩短缩短12个数量级。
个数量级。
DFT的变换公式为的变换公式为其中其中为旋转因子。
为旋转因子。
10()()NnkNnxkxnW0,1,1kN10)
(1)(NknkNWkxNnx0,1,1nNNjWN2exp(712)(713)247.4.1FFT7.4.1FFT算法原理算法原理FFTFFT之所以减少运算量,主要是利用了旋转因子的以下之所以减少运算量,主要是利用了旋转因子的以下33点特性:
点特性:
对称性对称性周期性周期性可约性可约性说明:
利用这些特性可以使说明:
利用这些特性可以使DFTDFT运算中有些项进行合并,将长序列的运算中有些项进行合并,将长序列的DFTDFT分解为短序列的分解为短序列的DFTDFT。
DFTDFT从算法上分为按时间抽选(从算法上分为按时间抽选(DITDIT)和按频率抽选)和按频率抽选(DIF(DIF)。
)。
基基22的的DITDIT又被称为库利一图基算法。
基又被称为库利一图基算法。
基22的的DIFDIF又称为桑德又称为桑德图基算法。
图基算法。
*()nknkNNWW()()()nknNknkNNNNWWW/,nkmnknknkmNmNNNmWWWW(714)(715)(716)257.4.27.4.2库利图基算法库利图基算法1.1.信号流图信号流图x(0)x(4)x(3)x
(2)x(6)x
(1)x(5)x(7)X
(1)X(6)X
(2)X(3)X(4)X(5)X(7)X(0)0NW2NW1NW3NW0NW0NW2NW2NW0NW0NW0NW0NW-1-1-1-1-1-1-1-1-1-1-1-1267.4.27.4.2库利图基算法库利图基算法2.2.蝶形运算蝶形运算基基2DITFFT2DITFFT算法,共由算法,共由MM级构成,每级计算由级构成,每级计算由N/2N/2个蝶形运算个蝶形运算构成。
构成。
基本运算单元为以下蝶形运算:
基本运算单元为以下蝶形运算:
蝶形运算中上下两个节点蝶形运算中上下两个节点pp、qq的间距为:
的间距为:
)()()(1qXWpXpXmrNmm)()()(1qXWpXqXmrNmm1,.,1,0Mmmpq2(717)(718)(719)277.4.3FFT7.4.3FFT算法的实现算法的实现例例713,基,基2DITFFT算法的算法的C语言实现。
语言实现。
(1)主程序:
)主程序:
fft_test.c#include#includefcomplex.h/*包含浮点复数结构体定义头文包含浮点复数结构体定义头文fcomplex.h*/externvoidbit_rev(complex*,unsignedint);/*位反转函数声明位反转函数声明*/externvoidfft(complex*,unsignedint,complex*,unsignedint);/*fft函数声明函数声明*/28externvoidgenerator(int*,unsignedint)#defineN128/*FFT的数据个数的数据个数*/#defineM7/*M=log2(N)*/#definePI3.1415926complexXN;/*说明输入信号数组说明输入信号数组,为复数为复数*/complexWM;/*说明旋转因子数组说明旋转因子数组e(-j2PI/N),为复数为复数*/complextemp;/*说明临时复数变量说明临时复数变量*/floatxinN;floatspectrumN;/*说明功率谱信号数组说明功率谱信号数组,为实数为实数*/floatre1N,im1N;/*说明临时变量数组说明临时变量数组,为实数为实数*/29voidmain()unsignedinti,j,L,LE,LE1;/*-*/*产生旋转因子表产生旋转因子表*/for(L=1;L=M;L+)LE=11;/*子子FFT中的蝶形运算数目中的蝶形运算数目*/WL-1.re=cos(PI/LE1);WL-1.im=-sin(PI/LE1);/*-*/generator(xin,N);30for(;)for(i=0;iN;i+)Xi.re=xini;Xi.im=0;/*构造输入信号样本构造输入信号样本*/re1i=Xi.re;im1i=Xi.im;/*复制到参考缓冲器复制到参考缓冲器*/*启动启动FFT*/bit_rev(X,M);/*以倒位次序排列以倒位次序排列X*/fft(X,M,W,1);/*执行执行FFT*/for(i=0;iN;i+)/*计算功率谱,验证计算功率谱,验证FFT结果结果*/temp.re=Xi.re*Xi.re;temp.im=Xi.im*Xi.im;spectrumi=(temp.re+temp.im)*4;31
(2)浮点复数基)浮点复数基2DITFFT函数:
函数:
fft_float.c#includefcomplex.hvoidfft(complex*X,unsignedintM,complex*W,unsignedintSCALE)complextemp;/*复变量临时存储器复变量临时存储器*/complexU;/*旋转因子旋转因子Wk*/unsignedinti,j;unsignedintid;/*蝶形运算中下位节点的序号蝶形运算中下位节点的序号*/unsignedintN=1M;/*FFT的点数的点数*/unsignedintL;/*FFT的级序号的级序号*/unsignedintLE;/*L级子级子FFT的点数的点数*/unsignedintLE1;/*L级子级子FFT蝶形运算的个数蝶形运算的个数*/floatscale;scale=0.5;for(L=1;L=M;L+)LE=11;U.re=1.0;U.im=0.;32for(j=0;jLE1;j+)for(i=j;iN;i+=LE)/*进行蝶形计算进行蝶形计算*id=i+LE1;temp.re=(Xid.re*U.re-Xid.im*U.im)*scale;temp.im=(Xid.im*U.re+Xid.re*U.im)*scale;Xid.re=Xi.re*scale-temp.re;Xid.im=Xi.im*scale-temp.im;Xi.re=Xi.re*scale+temp.re;Xi.im=Xi.im*scale+temp.im;/*递推计算递推计算Wk*/temp.re=U.re*WL-1.re-U.im*WL-1.im;U.im=U.re*WL-1.im+U.im*WL-1.re;U.re=temp.re;33(3)位反转函数:
)位反转函数:
bit_rev.c#includefcomplex.hvoidbit_rev(complex*X,unsignedintM)complextemp;unsignedinti,j,k;unsignedintN=11;for(j=0,i=1;iN-1;i+)k=N2;while(k=1;j+=k;if(ij)temp=Xj;Xj=Xi;Xi=temp;34(4)信号发生器函数:
)信号发生器函数:
generator.c/*generator.c-该程序用于产生一组信号样本该程序用于产生一组信号样本*/#includemath.h#definePI=3.14159265358972#defineFs=8000;采样频率设为采样频率设为8000Hz#defineT=1/Fs;采样时间为采样时间为0.25ms#definef1=500;信号源频率信号源频率1取为取为500Hz#definea1=0.5;信号源幅度信号源幅度1取为取为0.5#definew1=2*PI*f1*Tvoidgenerator(int*x,unsignedintN)unsignedinti;for(i=0;iN;i+)Xi=a1*cos(float)w1*i);35(5)复数结构定义头文件:
)复数结构定义头文件:
fcomplex.hstructcmpxfloatre;floatim;typedefstructcmpxcomplex;36思考与练习思考与练习1.什么是定标?
为什么要对数据进行定标?
什么是定标?
为什么要对数据进行定标?
2.采用采用C55x如何实现除法运算?
如何实现除法运算?
3.与与FIR滤波器比较,滤波器比较,IIR滤波器有哪些优缺点?
滤波器有哪些优缺点?
37术语术语缩语、术语英文全称解释38
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 教程 应用 程序设计