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

一.目标波形

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

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

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

二.相关概念

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

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

b)目标波形的频率fs
既然我要生成一个正弦波,我当然要知道我生成的正弦波的频率,目标波形的频率fs=Mfclk/2^N;
fs怎么来的?
将一个周期分成2N份,每M个点采样,那么一个周期要采多少个点?2N/M;
每个时钟采一个点,采集2N/M个点需要2N/M个Tclk,转换成频率,乘变成除,就得到目标公式了。
c)相位控制字
相位的控制也比较简单,以相位为0作为标准:
90度——2^N/4;
180度——2^N/2;
270度——2^N
3/4;
相信大家也看出规律了,教大家一个快速的方法,将份数类比成角度360,对份数做运算相应的就是对角度做运算,得到期望的相位。
注:如果你对于这些参数如何用代码控制还不是很清楚控制,那么具体看代码就一目了然了。
2.将离散化后的正弦波一个整周期存储到Ram中
(1).将离散后的数据进行定点化,Ram的规格是2568,数据规格:1bit符号位+7bit小数位
d)幅值
以8bit位宽的RAM为例。8bit数据能表示的有符号数的范围是-128——127,幅值即为127。
将浮点数定点化:这里8bit全部表示整数位宽,所以讲正弦值
127然后取整,再去掉符号,将数据生成mif文件(matlab实现)
(2).创建一个Ram 用于存储离散数据
创建一个单口RAM,深度256,位宽为8,将mif文件导入即可。

三.仿真步骤

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

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

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

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

四.总结

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

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

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

  1. 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)

    四.基于DFT的(理想)滤波 例2:一个"警告" "理想DFT滤波器"虽然简单.有效,但可能会导致意想不到的问题.在博客 [数字信号处理]基于DFT的滤波系列2 ...

  2. 常见模拟电路设计 三(含仿真) :文氏桥正弦波发生电路

    参加电赛的过程中遇到了一个需要制作正弦波发生器的任务.这里分享一下方案: 对于低频(几十K以下)的正线波信号,完全可以由RC振荡器来实现而不需要引入电感L. 文氏桥电路的基本结构: 首先,红色箭头标明 ...

  3. 【Multisim仿真】NE555电路三角波、方波、正弦波发生器

    [Multisim仿真]NE555电路构成三角波.方波.正玄波发生器 Multisim仿真效果演示 通道调节方法 针对4通道的示波器,下图中间的调节按钮白线对应字母,表示调节该通道有效. NE555电 ...

  4. 基于verilog的正弦波发生器

    基于verilog的正弦波发生器 这是我在CSDN里的第一篇文章,先做个小广告.. 我建了一个嵌入式和FPGA的公众号,里面也是我写的一些文章,有的是平时学习的笔记,或者实验的记录,我希望和大家一起学 ...

  5. quartus仿真系列0:基于原理图仿真的基本操作

    翻一本数电书时,无意发现利用maxplus2原理图来仿真设计,唤起了在上数电实验课时的一个设想,利用quartus仿真时序电路的波形图,这样更加直观清晰(不用我手画了).我们数电课上只教了利用VHDL ...

  6. 基于FPGA实现DDS正弦波发生器

    名言:学无止境. 1 开发环境 操作系统:win7 开发软件:ISE14.7 硬件平台:Xilinx FPGA Spartan6 2 DDS简介 DDS(Direct Digital Synthesi ...

  7. 基于MATLAB的变速故障信号仿真代码

    基于MATLAB的变速故障信号仿真代码 前言 一.仿真的方程 二.仿真效果图 三.完整代码下载 更多学习内容: 前言 轴承通常在时变转速条件下工作.对信号进行时频域处理,提取瞬时故障特征频率(IFCF ...

  8. zedboard板子上呼吸灯的实现(第一版)仿真代码的实现

    为了便于仿真的实现,定义周期数值period_cnt缩小为50,每次改变的数值duty_cycle定义为5,这两个数值本来可以定义在参数中,懒得重写代码直接修改了数值. module breathe_ ...

  9. 浣熊优化算法(COA)(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...

最新文章

  1. Gartner:解开关于人工智能的六个迷思
  2. IE 8兼容:meta http-equiv=X-UA-Compatible content=IE=edge / X-UA-Compatible的解释
  3. hdu5491(2015合肥网络赛H题)
  4. 人工神经网络之激活函数总结
  5. proxool mysql 8小时_java数据库连接池proxool介绍及mysql8小时断开连接问题的说明
  6. 单片机c语言计数器测速,基于51单片机的光电编码器测速.doc
  7. 大数据之-Hadoop之HDFS_HDFS产生背景以及定义---大数据之hadoop工作笔记0048
  8. Few-shot learning和Meta-learning
  9. 无源蜂鸣器c语言编程,无源蜂鸣器鸣叫
  10. python中ahp的代码_AHP | 层次分析法原理及Python实现
  11. 25个常用Matplotlib图的Python代码,爱了爱了
  12. 计组实验-CPU设计-指令添加
  13. D3 二维图表的绘制系列(十六)矩形树状图
  14. 京东首页静态页面html+css
  15. 在微控制器平台等小型物联网设备上运行 JavaScript
  16. 计算机科学与基础 简答题,计算机科学基础习题与解析
  17. 计算机网络---DHCP和自动配置
  18. 短信接口调用-手机短信,验证码
  19. 如何删除金山毒霸的顽固的残留文件?
  20. matlab找三角网,基于MATLAB的三角网交会点坐标计算的程序设计

热门文章

  1. 21届秋招中国银行软开中心信息科技岗拿offer经历
  2. [附源码]计算机毕业设计基于springboot的高校资源共享平台
  3. 面包屑导航:最佳实践和范例
  4. TEB算法-debug
  5. 学习c语言第一步安装软件
  6. ETCP全国4000家停车场全部支持银联无感支付!
  7. python3小项目——爬取智联招聘信息(二)
  8. Kotlin判空的各种操作(替换if else)
  9. 项目管理习题——挣钱分析法与成本预算和成本估算
  10. 软件流程和管理(一):什么是项目