2009
年第
期
9
福 建 电 脑
福 建 电 脑
11
正弦信号发生器的
实现方法及比较
DSP
俞兴明
苏州市职业大学电子信息工程系 江苏 苏州
(
215104 )
摘 要
本文介绍了几种基于数字信号处理器
的正弦波产生法
与
(DSP)
转换器
给出了这些产生正弦信号的算法和主要源程
,
得出了软
的接口电路
经过程序的实际运行
TMS320VC5402 DSP
DA
TLC320ADC50
。
最后
分析了各种方法的优缺点
讨论了调整输出信号频率的方法
,
,
。
【
】:
序代码或流程
,
件仿真和硬件仿真所得的正弦波形
同时给出了
关键词
【
】:
正弦 信号 发生器 数字信号处理器
。
,
0、
引言
在通信
、
仪器和控制等领域的信号处理系统中
出端用示波器观测到正弦波
如图
,
2
所示
。
图
2
在
DA
输出端测得的正弦波
直接法的特点是速度快
,
但需要占用大量的存储空间
且灵
中一 个 正 弦 周 期 的 数 据 个 数
,
(
2.2
活度低
即改变抽样频率
。
改变数据文件
),
sinwave.dat
输出正弦信号的频率明显改变
。
在实际编程时
,
然后再编写计算
用汇编语言分别编写计算
级数逼近法
所 示
正弦函数和余弦函数的台劳级数 展 开 如 式
(2)
。
和
的子程序
,
根据正弦信号在
和
数
最 后 通 过
正弦函数的台劳级数展
用台劳级数和汇编语言编写的正弦信号发生器
sinx
。
,[0°,180°]
sin(2x)=2·sinx·cosx
区间数值对称
不断输出来达到产生正弦波的目的
一 个 周 期 的 正 弦 值
[180°,360°]
(1)
cosx
[90°,180°]
的主程序
[0°,360°]
复 制 出
[0°,90°]
值 对 称 的 关 系
和
与
,
,
。
。
DA
开如下式所示
程序请参考文献[3]。
x
5!
sinx=x-
x
3!
+
3
5
-
7
x
7!
+
9
x
9!
正弦信号发生器
号的方法有多种
给出硬件设计和各自的源代码或程序流程
比较
基于数字信号处理器
本文介绍几种用
DSP
。
,
,
。
硬件设计
1、
,
经常要用到
产生数字正弦信
(DSP)
产生正弦信号的方法
,
并对性能进行分析
基于
的正弦信号发生器的硬件连接较简单
主要由
的几种正弦信号发生器的硬件结构均相同
转 换 器 组 成
用 常 用 的
DSP
本文介绍
,
DSP
和
。 DSP
图
是
和
1
位串行接口
DSP
DA
AD
TLC320AD50C。
TLC320AD50C
部
为
个控制寄存器设置
16
4
,
TMS320VC5402,DA
DA
用
转 换 器 的 接 口 电 路 图 [1]。
其功能由内
和
与
必
DSP
中 的 控 制 寄
McBSP
通 信
,
转换器
DA
与
,
DA
通过多通道缓冲串行口
接口
,
中 关 于
;DSP
所 以 要 使
McBSP
TLC320AD50C
的 有 关 寄 存 器 和
TLC320AD50C
须 设 置 好
DSP
存器
。
下
:
主要在于产生算法及
,
图
1 DSP
与
DA
转换器的接口电路
软件设计
2、
基于
DSP
产生正弦信号的方法很多
分别介绍以下几种
软件的不同
查表法
查表法是最直接的一种方法
2.1
。
。
,
在使用时只要根据输入查出表中对应的函数值即可
先计算好所有可能出现的正弦函数值
表
算正弦函数值可用
产生的数据文件保存为
语言程序实现
C
,
,
文件
也可用
MATLAB
,[2]
其四分之一余的数据为
其原理是根据运算的需要预
将这些结果编排成数据
预先计
,
。
语言产生
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
… …
用汇编语言编写
的初始化函数
… …
DSP
和
口 初 始 化 函 数
言编写的信号发生器的主程序
中的
OpenMcBSP()
装载
D/A
。
File/Data/Load
sinwave.dat
转 换 函 数
在源程序编译
文件
InitC5402 ()、McBSP
用
在
WRITAD50(),
,
运行程序 即 可 在
连接后
、
,
串行
语
C
CCS
输
DA
苏州职业大学校级课题
(SZD09L27)
论文
=x(1-
(1-
2
x
2·3
2
+
4
x
4!
2
x
4·5
6
+
(1-
2
x
6·7
(1-
2
x
8·9
))))
8
x
8!
cosx=1-
=1-
x
2!
2
x
2
-
x
6!
2
x
3·4
(1-
(1-
台劳级数展开法用
C
2
2
(1-
x
5·6
语言编程比较方便
x
7·8
)))
(1)
(2)
其主要程序段如
,
%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);
%%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();
福 建 电 脑
福 建 电 脑
福 建 电 脑
2009
年第
期
9
f=
%
ω0·fs
2π
TLC320AD50C,
。 [5] 而
ω0=2πf·Ts
即抽样点数越少
,
在其晶振频率
(5)
固
表示相邻样值之间的相位
输出正弦信号的
(8.192MHz)
越大
Ts
但由抽样定理可知
,ω0
,
必须不能大于
,ω0
π。
转换器
档
6
越大
对于
DA
的设置有
,fs
抽样间隔
定时
差
频率就越高
。
。
结束语
3、
,
。
,
。
,
CCS
经在
DA
另一方面
软件平台上测得
转换和低通滤波后
在本文介绍的三种正弦信号产生方法中
真和硬件运行测量
弦波均十分完美
但均
想
台劳技术展开法计算一个周期样值所化的时钟数约
经计算机软件仿
得出用台劳级数逼近法和查表法所得的正
,
而用迭代法产生的正弦波仿真波形失真较大
,
用示波器测得的正弦信号还比较理
用汇编语言编程计算
用
用迭代法所用
迭
通
转 换 器 的 采 样频 率 即
结合的正弦信号发
参数改变方
774310
可见查表法速度最快
,
对于输出正弦波的频率
C
时钟为
代法次之
过 改 变 一 个 周 期 内 的 样 值 个 数 或 改 变
可实现
用
生器比传统的模拟电路发生器相比
便
DSP
,
广泛应用于数字信号处理系统中
语言计算台劳级数的方法所用时钟约
83857
语言计算台劳级数最慢
前者改变的范围可更大
性能更稳定
用查表法为
362494
69773
DA
和
DA
,
,
,C
个
个
个
个
,
,
,
,
。
,
。
,
,
。
12
%}
}
该程序运行时
级数逼近法的最大优点是灵活度高
输出波形与图
DA
2
相同
数
,
一个周期内计算的样值越多越精确
。
且不存在误差积累
,
。
值精度由程序员完全控制
。
迭代法
2.3
迭代法的关键是函数值之间的递推关系
也就是系统的差
分方程或系统函数模型
没有零点
应为恒幅度振荡
,
。
如果一个离散时间系统其系统函数
只有一对处在单位圆上的共扼极点
H(z)
则其单位冲激响
即产生了正弦信号
,
,
,
。 [4]
(3)
H(z)=
b0
1+a1z
-2
-1
+a2z
式 中
:b0=AsinωTs,a 1=-2cosωT s ,a 2=1,ω
为采样间隔
其倒数
为采样频率
经反变换后得
,T s
,
fs=1/Ts
。
为 正 弦 信 号 频 率
y(n)=2cosωT·y(n-1)-y(n-2)
令
的正弦序列
y(-1)=0,y(-2)=-AsinωTs,
。
C
为
Ts
其
语言主程序中的主要部分如下
(4)
逐 一 迭 代 就 能 够 获 得 采 样 间 隔
:
:
%for (i=0; i