试比较几种正弦信号发生器的DSP 实现方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x2 = 1-x1*xx/(4*5); x3 = 1-x2*xx/(2*3); y[i] = x*x3; } for (;;) {//主循环 for (i=0; i<=N-1; i++) { *py = (int)(y[i]*32000); WRITEAD50(); } } 该程序运行时DA输出波形与图(1)相同。 级数逼近法的最大优点是灵活度高,且不存在误差积累,数值精度 由程序员完全控制。一个周期内计算的样值越多越精确。 (3) 迭代法 迭代法的关键是函数值之间的递推关系,也就是系统的差分方程或 系统函数模型。如果一个离散时间系统其系统函数H(z)没有零点,只有 一对处在单位圆上的共扼极点,则其单位冲激响应为恒幅度振荡,即产 生了正弦信号。 H(z)=b01+a1z-1+a2z-2 (3) 式中:b0=AsinωTs,a1=-2cosωTs,a2=1,ω为正弦信号频率,Ts为 采样间隔, 其倒数fs=1/Ts为采样频率。经反变换后得: y(n)=2cosωT*y(n-1)-y(n-2) (4) 令y(-1)=0,y(-2)=-AsinωTs,逐一迭代就能够获得采样间隔为Ts的 正弦序列。其C语言主程序中的主要部分如下: for (i=0; i<N; i++) { x[-1]=0; x[-2]=-2*sin(2*pi*f/fs); x[i]=2*cos(2*pi*f/fs)*x[i-1]-x[i-2]; } for (;;) { for (i=0; i<N; i++) {
设计总结:
本次实验的三种正弦信号产生方法中, 经计算机软件仿真和硬件 运行测量, 得出用台劳级数逼近法和查表法所得的正弦波均十分完 美。而用迭代法产生的正弦波仿真波形失真较大,但均DA转换和低通滤 波后,用示波器测得的正弦信号还比较理想。 另一方面,经在CCS软件平台上测得,用汇编语言编程计算台劳技 术展开法计算一个周期样值所化的时钟数约69773个,用C语言计算台劳 级数的方法所用时钟约774310个,用迭代法所用时钟为362494个,用查 表法为83857个,可见查表法速度最快,迭代法次之,C语言计算台劳级 数最慢。 对于输出正弦波的频率,通过改变一个周期内的样值个数或改变DA 转换器的采样频率即可实现,前者改变的范围可更大。用DSP和DA结合 的正弦信号发生器比传统的模拟电路发生器相比, 性能更稳定, 参数 改变方便,广泛应用于数字信号处理系统中。
基本原理及基本程序设计:
本次设计主要分析三种用DSP 产生正弦信号的方法:查表法,迭代 法和级数逼近法。 (1) 查表法 查表法是最直接的一种方法, 其原理是根据运算的需要预先计算 好所有可能出现的正弦函数值, 将这些结果编排成数据表,在使用时 只要根据输入查出表中对应的函数值即可。预先计算正弦函数值可用C 语言程序实现,也可用MATLAB语言产生,产生的数据文件保存为 sinwave.dat文件,其四分之一余的数据为 0x0000 0x0C8B 0x18F8 0x2528 0x30FC 0x3C56 0x471D 0x5134 0x5A82 0x62F2 0x6A6D 0x70E3 0x7641 0x7A7C 0x7D89 0x7F62 0x7FFF 0x7F63 0x7D8A 0x7A7C 0x763E 0x70E1 0x6A6C 0x62EF … … … … 运行仿真后在DA输出端用示波器观测到正弦波,如下图(1)所示:
直接法的特点是速度快,但需要占用大量的存储空间,且灵活度 低。 (2) 级数逼近法 正弦函数和余弦函数的台劳级数展开如下式(1)和(2)所示。在实际 编程时, 用汇编语言分别编写计算sinx和cosx的子程序,然后再编写 计算sin(2x)=2 *sinx*cosx的主程序。根据正弦信号在[0°,90°]与 [90°,180°]区间数值对称,[0°,180°]和[180°,360°]数值 对称的关系,复制出[0°,360°]一个周期的正弦值,最后通过DA不 断输出来达到产生正弦波的目的。正弦函数的台劳级数展开如下式所 示。 sinx=x- x33!+ x55!- x77!+ x99!=x(1- x22*3(1- x24*5(1- x26*7(1- x28*9)))) (1) cosx=1- x22!+ x44!- x66!+ x88!=1- x22(1- x23*4(1- x25*6(1- x27*8))) (2) 台劳级数展开法用C语言编程比较方便, 其主要程序段如下: for (i=0; i<=N; i++) {//计算一个周期内的N个样值 x=i*r-pi; xx = x*x; x0 = 1-xx/(8*9); x1 = 1-x0*xx/(6*7);
硬件设计:
本次设计的几种正弦信号发生器的硬件结构均相同, 主要由DSP 和DA转换器组成。DSP 用常用的TMS320VC5402,DA TLC320AD50C。图1 是DSP 和DA 转换器的接口电路图。TLC320AD50C 为16 位串行接口AD
和DA 转换器,其功能由内部4 个控制寄存器设置;DSP 通过多通道缓 冲串行口McBSP 与TLC320AD50C 接口, 所以要使TLC320AD50C 与DSP 通信,必须设置好DSP 中关于McBSP 的有关寄存器和DA 中的控制寄存 器。
*out = (int)(x[i]*16300.0); WRITEAD50(); /* sinwave output*/ } } } 该程序运行时DA输出波形与图(1)相同。 在上面程序中,f可取3600Hz,fs可取16000Hz。 迭代法只需要存储信号系统模型的参量和相关的状态变量,优点是 占用的存储空间相对较少,运算时间短。但它存在一个致命的弱点:由 于新的数值产生利用了之前的函数值,所以它容易产生误差积累,故迭 代法只用于精度要求不高的场合。如图3为用迭代法产生的正弦波仿真 波形。此波形数据经DA转换后用示波器测得的正弦信号还相当不错, 在视觉上看不出正弦波失真。
试比较几种正弦信号发生器的DSP实现方法
技术指标及功能:
用CCS仿真,观察并记录几种实现方法产生的波形情况,还有它们 展开一个周期样值所用的时钟数,然后用具体的实际数据比较几种基于 DSP的正弦信号发生器的实现方法的特点及优劣。
设计目的及要求:
正弦信号发生器是信号中最常见的一种,它能输出一个幅度可调、 频率可调的正弦信号,在科学研究及生产实践中均有着广泛应用。 目前,常用的信号发生器绝大部分是由模拟电路构成的,当这种模 拟信号发生器用于低频信号输出往往需要的RCLeabharlann Baidu很大,这样不但参数准 确度难以保证而且体积大和功耗都很大,而借助DSP运算速度高,系统 集成度强的优势设计的信号发生器速度更快,且实现更加简便,稳定性 高。 本次设计的目的就在于寻求一种基于DSP的正弦信号发生器的实现 方法,要求分析出几种实现方法的优劣,以供不同场合要求下的应用。