1、 DSP课程设计课程设计 实实 验验 报报 告告 任意信号发生器的设计任意信号发生器的设计 2 一、设计任务一、设计任务 信号发生器已广泛应用于科学实验、通讯和控制等应用领域中。使用 DSP 和 D/A 转 换器可以产生连续的正弦波信号, 同样也能产生方波、 锯齿波、 三角波等其它各种信号波形。 本设计要求采用DSP及其D/A转换器产生上述各种信号波形。 二、设计思路二、设计思路 产生连续信号的方法通常有两种:查表法和计算法,查表法不如计算法使用灵活。计算 法可以使用泰勒级数展开法进行计算, 也可以使用差分方程进行迭代计算或者直接使用三角 函数进行计算。计算结果可以边计算边输出,也可以先计算后
2、输出。 正弦函数和余弦函数的泰勒级数数学表达式为: xsin )!12( )1( !9!7!5!3 12 1 9753 n xxxxx x n n ,x),( xcos )!2( )1( !8!6!4!2 1 28642 n xxxxx n n ,x),(. 如果要计算一个角度的正弦和余弦值,可以取其前五项进行近似计算。 或使用下面递归的差分方程进行计算。 yn=A*yn-1-yn-2 其中:A=2cos(x),x=2F/FS。F信号频率,FSD/A 转换频率。 利用递推公式计算正弦和余弦值需要已知cos(x)和正弦、余弦的前两个值。 为了简洁明了,我们采用了计算法中的递归差分方程。 三、设计
3、过程三、设计过程 为了将想法转化成程序实现,我们考虑程序的框架如下: 该程序要根据余弦信号的递推公式, 给出初始的两个值, 以使得程序自己带入公式循环 计算下去,即可得到余弦波形。但是,该法求少数点还可以,若产生连续余弦波,则积累误 差将会很大,该法就不可取了,所以还要对所求得的点数有限制,不太多就可以了。 为了能在 DSK 板上和示波器观察到波形, 我们还得用C 语言编写一段波形输出的程序, 这个 和我们以前做过的 sine 完全类似,不再赘述。 下面的程序就是基于以上的设计思路, 使用 C 语言实现连续余弦波的输出, 该程序不 但实现了功能,书写格式也非常的规范,易于阅读,流程图如下: 3
4、 _cosx是通过递推函数得到的数组,长度为 200。i为控制变量,用以判定所求得的点数是否在定义的范围内。 同理: 方波函数:i=N/2,sqi=0 dacdatai=sqi*1023+1024; 三角波函数:i=N/2sqi=amp*0.5*(2-i*1.0/(N/2);dacdatai=sqi*1023+1024; 四、程序设计四、程序设计 余弦波产生程序:余弦波产生程序: i 在定义范围内? 初始化常量、宏定义 (公式中的第二项_COSX) 变量定义:_cosx、dacdata、i 调用延时子程序: 解决 CPU 和外设矛盾 初始化 i 和公式中的_cosx0 根据公式中的前两项用递推公式计算 i 在定义范围内? 按照递推公式逐点计算 把算出的值赋给 dacdata dacdata 的赋值 重新初始化 i 对_cosx 线性变化并赋值给 dacdata 是 否 是 否 4 #include #include #include #inclu