波形系列之正弦波发生器-含仿真代码及工程

文章介绍了如何使用MATLAB生成正弦波,包括正弦波的基本概念,如振幅、频率和相位,以及离散化、频率控制字和相位控制字的概念。通过采样定理确定采样频率,将离散化的正弦波数据存储到RAM中,并进行了仿真步骤的说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里面涉及到的一些理论,我尽量用简单、通俗易懂的语言来讲给大家。

一.目标波形

正弦波想必大家都不陌生,在高中的时候就有接触过,什么正余弦定理,积化和差、和差化积、半角/全角公式等等。当然大家完全不需要回去重新复习这些,只看博客的内容就够了。大家先想一想正弦波的函数图象,它的波形是什么样子的,什么?这个也想不到,没关系,就是下面这个样子_
1.gif

博主不要闹,这哪里是什么正弦波,不要欺负我读书少!!!

别急,且听我慢慢说来,咳咳。。。上图给出的就是我们今天要实现的波形,先在视觉上面给大家一个直观的感受。该波形是由标准的正弦波通过变频、移相得到的。所谓万变不离其宗,根源还是正弦波。

二.相关概念

大家对下面的公式一定不陌生
y=f(x)=Asin(wx+k)=Asin(2pif*x+k);
A :振幅 f:频率 k:相位
知道了这三个参数就能确定唯一一组波形。下面看看生成正弦波的步骤,并在步骤里面穿插讲解。
1.离散化 将连续的正弦波信号进行离散化;应用matlab软件进行实现;
2.gif

a)频率控制字M
以一个周期为例,在正弦波上面采集等间隔的离散的点,然后将这些点用平滑的曲线连接,就可以将波形表示出来。伟大的奈奎斯特告诉我们,要将波形恢复出来,采样频率要>=2*该波形频率,即采样点数要大于等于2。我们可以将一个周期分成2、4、8、16…2^N的份数,可以连续选取采样点,也可以隔1、2、。。。M个点采样。这里的M就是频率控制字。它的作用是控制目标波形的频率。这里先这么记住,往后面看。

b)目标波形的频率fs
既然我要生成一个正弦波,我当然要知道我生成的正弦波的频率,目标波形的频率fs=Mfclk/2^N;
fs怎么来的?
将一个周期分成2^N 份,每M个点采样,那么一个周期要采多少个点?2^N/M;
每个时钟采一个点,采集2^N /M个点需要2^N/M个Tclk,转换成频率,乘变成除,就得到目标公式了。
c)相位控制字
相位的控制也比较简单,以相位为0作为标准:
90度——2^N/4;
180度——2^N/2;
270度——2^N
3/4;
d)幅值
以8bit位宽的RAM为例。8bit数据能表示的有符号数的范围是-128——127,幅值即为127。

     注:如果你对于这些参数如何用代码控制还不是很清楚控制,那么具体看代码就一目了然了。

2.将离散化后的正弦波一个整周期存储到Ram中
(1).将离散后的数据进行定点化,Ram的规格是256x8,数据规格:1bit符号位+7bit小数位
将浮点数定点化:这里8bit全部表示整数位宽,所以讲正弦值*127然后取整,再去掉符号,将数据生成mif文件(matlab实现)
(2).创建一个Ram 用于存储离散数据
创建一个单口RAM,深度256,位宽为8,将mif文件导入即可。

三.仿真步骤

该工程相应的仿真步骤如下:
1.打开Modelsim,改变当前路径
File->Change Directory
将路径切换到sim文件夹下面
3.gif

2.在命令行中敲入do run.do,自动执行仿真
4.gif

3.输出格式设置
选中o_wave信号,右键选中Format->Analog(custom) ,打开设置选项
5.gif

Height改成120,Max改成127,Min改成-128,点击ok。
4.效果图
6.gif

四.总结

确定一个唯一的正弦波需要知道三个参数,幅值、频率、相位。结合了采样定理,说明了采样过程与这三个参数的对应关系,明确这些就可以用代码实现。由于篇幅原因,需要代码的同学,点击下面链接获取。

工程链接:正弦波发生器,包括(功能文件,测试文件,仿真文件、工程等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋仔yaanng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值