首页 > 编程知识 正文

数字信号处理FPGA实现 清华(数字信号处理fpga)

时间:2023-05-04 21:15:25 阅读:77153 作者:3627

FGA数字信号处理(1)-AM调制的实现

一)前言本内容作为本人自学经验分享。 根据作者的水平,可能有不正确的地方。 欢迎大家的批评指正。 共享的文章需要基本的FPGA开发基础。 这部分的概述很简单,但也是最重要的。 理解了这一部分,所有的程序也就能理解了。

1. AM信号: (ama*cos(w0t ) ) cos ) wct )看这个公式,首先会产生两个频率不同的醉熏蜜蜂cos(w0t )、cos(w0t )。 考虑立即调用系统中的DDS IP核心来实现是最简单的方法。 当然,你也可以利用ROM根据加法器自己写。 这里不说。

如果发生了两只喝醉了熏的蜜蜂,可以再用两个乘法器()直接使用这个符号。 但是,这种方式的实现和IP的验证有什么区别呢? 读者们请自行百度)

2.AM信号生成中的注意事项首先看调制深度问题。 关于本部分的记述。 大家试着找一下教材。 调制深度通常是调制波的最大振幅与最小振幅之和的比。 能够算出调制深度的是ma/A。 在本设计中,设a为1,调制深度为ma,但实际上,如果a的值与后续的醉熏蜜蜂的最大值相同,则调制深度为ma,在0 ̄1之间。 但是问题在FPGA上实现有几个问题。 关于浮点和定点,这里不提供丑陋的东西。 大家自己百度。

在本设计中,DDS生成的信号是带符号的8bit数据。 这里首先假设a为127。 再计算一下调制的深度吧。 此时,包络的最大值为127 ma127,最小值为127-ma127。 最后,调制深度为ma,但该ma的范围仍为0.1。 存在ma是从0.1之间变化,还是不能直接表示小数的问题。 为了解决这个问题,我们这样做:

使A=1270,即包络的最大值为1270 ma127,最小为1270 ma127。 计算出调制深度应该最终为ma/10。 此时,可以将ma设定为1~10来改变调制的深度。

当然,有很多方法可以实现。 这里只列举了简单的一种。

3 )为了加快设计输入法设计,我们推荐更便捷的设计输入法BD(block_design )。 这种设计方式可能是标记IP核心连接。

创建数据库

首先添加DDS核心,然后开始配置

这里有SDR (动态范围)

一般意义上为1bit 6.02bit。 具体的计算过程大家百度就可以了。

即使输出一个COS也不会输出相位

1数据有效位8数据位。 输出频率设定为1Mhz

然后添加乘法器IP。 把这个信号乘以调制的深度。

请注意符号位。 DDS IP核心输出有符号。 调制深度为无符号数,选择0延迟输出即可

然后,为了增加直流成分,追加加法器IP。 加法器IP在乘法器输出上加上一定值。 按图设置

这需要首先指定b的类型和位宽,然后输入二进制数据

接下来,链接以上IP。 然后,添加对外端口(快捷键Ctrl T )。

然后生成HDLwrapper (这个单词意思是包装,但我不能做合适的翻译,干脆这样称呼)。

接下来,写testbench代码测试一下。 我们只要给一个时钟信号,给一个调制深度就OK了。 这里不贴代码。 很简单

至此,调制前的波形生成完成。

可以看出发生了波形。 都是有符号的数。

接下来就像法炮制一样。 添加载波的DDS频率设定为10M。 添加乘法器IP。 最终的BD图如所示。

你可以看到输出有20位

进行简单的计算(1270*10 1270 ) *127=325120

第20位看起来是徒劳的

所以,我选择了16位[18:3]。 作为输出。

哪个testbench刚改还能用。 最终效果如下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。