正弦波的产生

  最近的一个项目,和正弦波息息相关。因此,我总结了一下网上关于产生正弦波的几种方法。若有幸被大家看到,欢迎大家补充。

(1)递推法

  假设数字角频率w,这我们要取的正弦波的点一次为sin(w*0),sin(w*1),sin(w*2)...sin(w*(n-1)),sin(wn)...

  sin(wn) =sin(w(n-1)+w)

      =sin(w(n-1))*cos(w)+cos(w(n-1))*sin(w)

      =sin(w(n-1))*cos(w)+[sin(nw)-sin(wn-2w)]/2

  sin(wn)=2*cos(w)*sin(w(n-1))-sin(w(n-2));

  给出任意相邻两个sin(wn)的值,既可以计算下一个正弦波的幅度值。通过改变不同的初始值(相位),我们可以得到正弦或余弦波。

  此方法中,cos(w)为常数,可以通过(固定系数乘法)加法实现。所需资源非常少,稳定性高,误差小,但注意w的精度。易于用软件实现。

(2)系统函数法

  在滤波器章节中,有几种特殊的滤波器,其中一种就是正弦波发生器。已知正弦波的的系统函数为:

  H(z)=sin(w)*z-1/(1-2*cos(w)*z-1+z-2);余弦波系统函数类似;

  由此可以画出正弦波发生器(滤波器)的结构图。易于FPGA和CPU实现。其中Z表延迟单元,sin(w)和cos(w)都为常数。

  结构简单,只用加法器或固定系数的乘法器实现,稍稍改动可同时产生正余弦波。

(3)cordic方法

  强大的cordic,可以轻松计算包括开方,取模,正余弦等多种运算的神级算法。推荐使用,精度最高。逻辑较上面两种多。cordic配置:旋转模式,x为幅度,y为0,,z为相位。

(4)查表法

  将正弦波的幅度预先存入rom中,通过相位累加器产生rom读地址。实现中要消耗一定量的存储器资源。优点是精度高,实现简单,可以实现很多种类型的周期信号。

转载于:https://www.cnblogs.com/kemi450/p/3749173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值