基于FPGA的FM信号解调

这是本人第一次写博客,写的不好请多多担待。
本次实验是将一个已知的FM信号通过FPGA进行解调,解调出波形并进行FFT得到调制频率fm,并且每一步都通过MATLAB进行波形的验证。

开发工具

	VIVADO 2019.2
	MATLAB

FM解调

已知FM信号的载波频率fc为22MHZ,调制信号频率fm为8KHZ,采样率为50MHZ,在MATLAB中采样20000个点,位宽为10。FM具体的解调原理我就不说了。。。我用的方法也是正交解调,先将FM信号利用DDS IP核混频得到I路与Q路信号下变频到基带,然后通过低通滤波器进行滤波,之后再进行差分鉴频,最后进行FFT得到调制频率fm。差分鉴频的算法如下图:
在这里插入图片描述

输入模块

将FM信号导入VIVADO ROM  IP核,首先使用MATLAB绘制出FM信号的波形,并生成coe文件,导入VIVADO的ROM IP核,
位宽为10,深度为20000。VIVADO的ROM IP核具体怎么配置我就不说了。。这样的贴子很多,不懂的可以
先去看看如何配置。MATLAB与VIVADO的图如下:

在这里插入图片描述
在这里插入图片描述

变频模块

利用DDS生成sin和cos信号,与模块一输出的FM信号进行混频。在VIVADO中配置两个DDS IP核,一个用于生成与载波频率相同的正弦信号,一个用于生成与载波频率相同的余弦信号,再配置两个乘法器IP核进行混频。DDS IP核与乘法器IP核如何配置这类的帖子很多,自己去查一查。。。混频后结果如下图,可见MATLAB与VIVADO中的波形一致。
在这里插入图片描述
在这里插入图片描述

滤波模块

利用MATLAB的filterDesigner工具箱生成fir等波纹低通滤波器,我设置的阶数为128,通带频率为0.5M-2.5M。将其生成coe文件导入VIVADO的FIR IP核中,将变频后信号中的高频信号滤除。得到基带信号。
在这里插入图片描述
在这里插入图片描述

差分鉴频模块

也是最重要最核心的一个模块,利用开头介绍的算法对FM信号进行解调,并将解调波形输出。
I(n-1), Q(n-1)就是将I路信号与Q路信号延迟一个时钟周期。
经过乘法器IP核输出后的信号位宽很大,要对其进行截短,再通过除法器IP核得到解调波形。除法器IP核如何配置还是自己去看一看这方面的帖子。。。
解调出来的波形是个正弦波。如下图,MATLAB也对其进行了验证。
在这里插入图片描述
在这里插入图片描述

FFT模块

配置FFT IP核对解调信号进行FFT运算,得到解调信号频谱。FFT IP核配置稍微麻烦一点,不过这类的帖子很多自己去查一查,我也不是特别清楚,也是边查边摸索。。。FFT之后结果如下图:
在这里插入图片描述
在这里插入图片描述
在第二张图片里可以看到VIVADO仿真的频谱图与MATLAB一致。峰值对应的地址为3,通过计算得到fm=9155。与MATLAB结果也一致。
fm计算公式为峰值对应地址*fs/N
其中fs为采样频率
N为FFT点数。

MATLAB与VIVADO FFT之后得到的调制频率fm约等于9155khz,而不是8khz。有人可能会疑惑是不是哪里出错了,我刚开始也一直认为是哪里出错了,从头检查了几遍也没有发现错误,也在网上搜索。。。
上图在解调波形中取了16384个点做FFT,FFT结果不是8khz的原因应该是fs/16384不是整数倍,或取这16384个点不是周期的整数倍,导致出现了频谱泄露。应该是这样的。。。。我也是小白一个,具体什么原因我可能说不上来。后来我再MATLAB中取了12500个点进行FFT,就能得到8k的频率,这证明我的结果是没错的。
在这里插入图片描述
这样就在FPGA中完成了对FM信号的解调,并通过MATLAB验证了每一步的波形,以确保无误。
这是我第一次写博客,大概就写这么多吧。。。有错误的地方欢迎大家进行指正,也请大家多多担待。
感谢大家的观看,谢谢!

  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值