内容发布更新时间 : 2024/12/27 12:26:37星期一 下面是文章的全部内容请认真阅读。
正弦波信号发生器的DSP设计 姜颖韬
(苏州工业职业技术学院,江苏苏州215104) 摘
数字信号处理器(DSP)是在模拟信号变成数字信号以后进行高速实时处理的专用处理器。DSP芯片以其独特的结要:
构和快速实现各种数字信号处理算法的突出优点,发展十分迅速。本文介绍了正弦信号产生的典型算法,并结合数字振荡器
原理,应用迭代法编程完成了TMS320VC5402DSP正弦波信号发生器的设计。 DSP;正弦振荡;信号发生器关键词:
正弦信号发生器能输出一个幅度可调、频率可调的正弦信
号,特别是低频正弦信号发生器在科学研究及生产实践中均有 目前,常用的信号发生器绝大部分是由模拟电路构着广泛应用。 当这种模拟信号发生器用于低频信号输出时,往往需要的成的。
RC值很大,这样不但参数准确度难以保证,而且体积和功耗都很大。而由数字电路构成的低频信号发生器,虽然其低频性能
系好,但体积较大,价格较贵。而借助DSP芯片的运算速度高,
统集成度强的优势设计的这种信号发生器,比以前的任意一种信号发生器速度更快,且实现更加简便。
1正弦波信号的产生方式1.1采样回放法
通过对已有的标准正弦信号源进行采样得到数据后直接回放或进行变频变幅处理后回放。该方法的关键在于合理设计高性能的硬件电路,尽量避免信号处理过程中的波形失真,来确保采样数据的精准性。同时在数字域处理时,数据的回归点数必须
以免频谱混迭情况的发生。满足Nyquist定理, 1.2查表法
5402的片内ROM中存有256字的正弦及余弦数据表,可以通过程序直接调用该表中的数据,由D/A回放出正弦波。通过MATLAB模拟仿真自己生成的正弦数据表,不但可以解决频率单一的问题,还可以增加精度,并改善系统的兼容性。 1.3泰勒级数展开法
任一角度的正弦及余弦波都可以展开成泰勒级数,取前五项的近似公式为: y(-2)的起始值,从而使系统满足起始条件。这样系统差分方程变为:
fs为采样频率,f0和A分别为正弦波的频率和幅度。这样y(-2)就决定了正弦波的幅度。而数字频率振荡器产生正弦波的实质就是如何用程序实现上述的差分方程。
2设计实例
根据数字振荡器的原理,一个正弦波序列可以通过递归法
b、k一旦确定后,就可得到期望频率的正弦序列。得到,系数a、 2.1设计任务
利用TMS320VC5402设计产生一个频率为2kHz的正弦波信号发生器,并使用汇编语言完成源程序的编写。 2.2设计方案
为了得到正弦波序列的输出,可以采用定时中断的方法输出y(n),再经过D/A转换和滤波后输出连续的正弦波。
设定采样频率为fs=40kHz,即通过定时器中断,每隔25us产生一个y(n),则递归的差分方程系数为:
为了便于定点DSP处理,我们将所有系数除以2,然后用16位定点格式表示为:
其中:α为角度值,ω为其对应的弧度值。通过变换的α值,且利用弧度与频率之间的关系很容易实现变频处理。 1.4数字正弦振荡器
数字正弦波振荡器的系统函数可表示为:
对应的是在单位圆上有复共轭极点的二阶振荡器,共扼极点为:P1,2=e±jω,其离散时域脉冲单位冲击响应响应:
h(n)=Asin[(n+1)ω0]·u(n)
实际应用中对于给定的冲激信号所产生的正弦信号对应的差分方程为: 如果系统无阻尼且稳定,我们不对系统加入冲击信号,改变 这便是产生2kHz正弦信号的三个系数。
由前面的推导也可以看出,产生的正弦波频率只是一个相对值,只有给定了采样频率,也就是确定了采样点之间的时间间隔后,才能最终决定模拟频率。为了得到精确的采样频率,我们
获得40kHz的采样频率。定时器用定时器产生25us时间间隔, 的初值计算由下式决定:
fs=fCK(/TDDR+1)(PRD+1)式中fCK为DSP时钟频率,fs为采样频率。设定时其预分系数TDDR=0,则定时器周期寄存器初值PRD为:PRD=fCK/fs-1。本例中,fs=40kHz,fCK=100MHz,则PRD=2499。 2.3源程序设计
程序设计首先进行初始化,初始化包括计算出y[1]和y[2],定时器相关寄存器设置,然后开放定时器中断。初始化完成后,主程序循环等待定时器中断。当程序
进入定时器中断服务程序时,利用前面的y[1]和[2],计算出新的y[n],经过D/A转换后,得 2010年第6期
作者简介:姜颖韬(1977-),男,江苏苏州人,工程师,在读研究生,研究方向:电子信息。 趭趤
到一个正弦信号波形。作为一套完整的程序,还必须有中断向量表文件和内存定位文件。汇编语言源程序如下:SSBXFRCT;ST#INIT_A,AA;ST#INIT_B,BB;ST#INIT_C,CC;PSHDCC;POPDy2;LDAA,T;MPYy2,A;STHA,y1;STM#10h,TCR;STM#2499,PRD;STM#20h,TCR;LD#0,DP;
SSBXINTM;LD#vector;AND#0FF80h,A;ORPMST,A;STLMA,PMST;RSBXINTM;-tint:
LDBB,T;MPYy2,A;LTDy1; MACAA,A;STHA,1,y1;STHA,
y0;NOPRETE.mmregs.ref_ret.ref_c_int00.ref_tint .globalvector.sect\;
_______________________;interruptevectortable!; _______________________Vector:rsb_c_int00