基于PYNQ-z2的OFDM调制解调

基于PYNQ-z2的OFDM调制解调

  • PYNQ-z2实现OFDM
    • OFDM系统
    • IFFT/FFT的IP核设计
    • 基于overlay的测试
    • 基于PYNQ-z2的OFDM调制解调的测试

PYNQ-z2实现OFDM

最近学校开设了实践课,提供了PYNQ-z2开发板并要求实现一些功能。由于我们组是做语音和通信的,我们选择了实现OFDM调制解调作为选题。当然这块板子也很适合图像识别神经网络搭建,具体案例也可在指导手册中找到。

OFDM系统

关于OFDM的原理在此处就不具体介绍了,可以参考一下博文,介绍地非常详细:
链接: https://blog.csdn.net/madongchunqiu/article/details/18614233.

我们基于802.11a的OFDM标准,要求IFFT/FFT均为64点,802.11a标准的介绍:
链接: https://blog.csdn.net/rs_network/article/details/49162455.

OFDM调制、解调的过程如下图所示,其中只有IFFT/FFT是需要设计IP核的。
基于PYNQ-z2的OFDM调制解调_第1张图片

IFFT/FFT的IP核设计

IFFT/FFT的IP核建立完全一样,区别只在于代码,接下来详细介绍一下FFT的IP核创建。

  1. 写完FFT的C++程序后,使用vivado HLS工具生成IP核。首先是添加c程序,Top function就是主要实现的函数,我们fft函数的的名字叫做kfft64。
    基于PYNQ-z2的OFDM调制解调_第2张图片
    TestBench就是测试文件,也提前导入。
    基于PYNQ-z2的OFDM调制解调_第3张图片
    HLS内没有PYNQ-z2的板子信息,因此只能选择芯片,输入xc7z020clg400-1,如图所示
    基于PYNQ-z2的OFDM调制解调_第4张图片
    完成之后分别点击Run C Synthesis、Run C Simulation、Export RTL,完成IP核测试和生成。
    基于PYNQ-z2的OFDM调制解调_第5张图片
    在TestBench内采用相同一段比特流2PSK调制后作为输入,拿IP核输出结果对比matlab输出结果(左为IP核,右为matlab):
    基于PYNQ-z2的OFDM调制解调_第6张图片
    在HLS左侧区域找到IP核调用地址,例如INR代表输入的实部,其为整型,存储在从0x100开始,以4个字节为存储空间的内存中。这里讲一下为什么采用整型变量来进行存储的原因:按照理论,输入输出应该为浮点型,但是我在调用IP核的过程中总是出现浮点型数据写入、读取困难的问题。由于问题一直没有解决,最后选择在数据输入IP核前先进行放大,将数据放大为10万倍后强制转成整型,然后在输出端再除以10万倍。整型的写入、读取没有遇到过困难,由补码到原码的转换也比较顺利。由于采用了16QAM的调制方式,数据的大小最大为3,乘上10万倍相对于采用32位存储的整型来说也完全没有问题。如果有人解决了浮点数读取这个问题,希望能告诉一下我方法,非常感谢。
    基于PYNQ-z2的OFDM调制解调_第7张图片
    2.IP核创建完成后,使用vivado连接到AXI总线上,这里比较简单,推荐一个博客,照做就行:
    链接: https://blog.csdn.net/weixin_38438451/article/details/84778938.

在vivado里新建工程是可以找到板子信息的,如果找不到的话,需要去下载并存放在vivado安装目录下。
基于PYNQ-z2的OFDM调制解调_第8张图片

基于overlay的测试

调用板子内的jupyter,并写代码测试:

调用IP核的程序

from pynq import Overlay
overlay =Overlay('/home/xilinx/pynq/overlays/base/kfft.bit')
overlay?
kfft = overlay.kfft64_0

测试的例子不是很形象(可以不看)。为了比较性能,在使用IP核解调的同时也调用python内的fft函数来进行解调。下图中左边的是用ip核解调后的实部,右边的是用python的fft函数解调后的复数,只看实部的话,二者的差距还是比较小的。
基于PYNQ-z2的OFDM调制解调_第9张图片

基于PYNQ-z2的OFDM调制解调的测试

为了测试IP核性能,实验采用PYNQ开发板进行OFDM调制,matlab设计算法进行解调。

采用16QAM的调制方法,星座图如图:
基于PYNQ-z2的OFDM调制解调_第10张图片
基于PYNQ-z2的OFDM调制解调_第11张图片
基于PYNQ-z2的OFDM调制解调_第12张图片
基于PYNQ-z2的OFDM调制解调_第13张图片
基于PYNQ-z2的OFDM调制解调_第14张图片
如果有意见、建议或者需要代码,可以联系[email protected],祝大家新年快乐。

你可能感兴趣的:(基于PYNQ-z2的OFDM调制解调)