基于FPGA和Matlab实现的FFT功能验证

news/2024/10/17 10:36:00/

一 、FFT设计验证思路
1、基于Matlab与FPGA的混频sin信号的FFT验证,分别在Matlab和FPGA开发环境上实现相同的FFT功能设计。
2、Matlab平台开发,使用自带的fft函数与相关操作函数,绘制出混频sin信号,经过fft功能处理后的频谱图。
3、FGPA平台开发,通过dds ip核和乘法ip核,生成与Matlab相同配置的混频sin信号,借助于fft ip核实现fft的功能,对于输出的fft数据,寻找1024点中的四个峰值,并与Matlab的频谱图比对,从而确定FPGA开发验证的结果。
二、Matlab FFT功能设计开发
1、Matlab开发平台
①1024点FFT功能,采样频率50M;
②输入数据,3Mhz和4Mhz的sin信号混频;
③matlab自带fft公式计算fft数据;
④对fft数据取模运算,并绘图
在这里插入图片描述
2、Matlab源码
clc;
clear all;
fs=50e6;%采样率50M
N=1024;%采样点数1024
t=[0:N-1]/fs; %时间序列
f1=3e6;%频点1 3MHZ
f2=4e6;%频点2 4MHZ
s1=sin(2pif1t);%信号1
s2=sin(2
pif2t);%信号2
mixsign=s1.*s2;%混频 sin值相乘
fftsign=fft(mixsign);%求fft
fftabs=abs(fftsign);%取模运算
plot(fftabs); %绘图
在这里插入图片描述
3、Matlab绘制频谱图结果
对频谱图的四个峰值横坐标结果以及所出的范围进行标识,用于FPGA平台的FFT处理结果验证比对。
第一个峰值:21,搜索范围:1——50;
第二个峰值:144,搜索范围:100——200;
第三个峰值:882,搜索范围:850——900;
第四个峰值:1005,搜索范围:950——1023;
在这里插入图片描述
三、FPGA FFT功能设计开发
1、vivado开发平台(vivado 2019.2,其余版本按照步骤生成新工程即可)
①DDS IP核生成3Mhz和4Mhz的sin频率信号;
②乘法ip核实现3Mhz和4Mhz的sin频率信号混频处理;
③FFT IP核实现FFT的算法;
④乘法ip核实现FFT处理后数据取模运算;
⑤通过算法实现取模运算后1024数据的四个峰值搜索;
⑥四个峰值对应的点与Matlab的峰值横坐标比对
在这里插入图片描述
2、FFT工程设计
①顶层TOP,fft_top.v;
②内部时钟ip核用于产生50M和100M时钟;
③dds_ctrl控制模块,DDS IP核实现3Mhz和4Mhz的sin频率信号,以及乘法ip核实现3Mhz和4Mhz的sin频率信号混频处理;
④FFT IP核实现FFT的算法;
⑤FFT数据处理顶层模块,将四个峰值对应的点与Matlab的峰值横坐标比对;
⑥乘法ip核实现FFT处理后数据取模运算;
⑦通过算法实现取模运算后1024数据的四个峰值搜索;
⑧仿真文件
在这里插入图片描述
3、FFT工程设计中IP核配置
①时钟ip
步骤1:打开IP Catalog,点击Window下IP Catalog
在这里插入图片描述
步骤2:查找时钟IP核 Clocking Wizard,搜索输入
在这里插入图片描述
步骤3:时钟IP核 Clocking Wizard配置——Clocking Options,修改名称,选择PLL模式,设置输入时钟50M,可根据实际工程配置
在这里插入图片描述
步骤4:时钟IP核 Clocking Wizard配置——Output Clocks,设置输出50M和100M,复位信号不使用,使用locked作为内部复位
在这里插入图片描述
②DDS ip
步骤1:打开IP Catalog,点击Window下IP Catalog

在这里插入图片描述
步骤2:查找dds IP核 dds compiler,搜索输入
在这里插入图片描述
步骤3:dds IP核dds compiler配置——Configuration,修改名称,设置选择Phase Generator and SIN COS LUT,设置输入系统时钟100M,两路通道3M和4M
在这里插入图片描述
步骤4:dds IP核dds compiler配置——Implementation,Output 选择Sine模式,对比Matlab中sin信号,相位输出不使能
在这里插入图片描述
步骤5:dds IP核dds compiler配置——Detailed Implementation,DATA Output 选择Chan ID Field,对应两路输出3M和4M的sin信号
在这里插入图片描述
步骤6:dds IP核dds compiler配置——Output Frequencies,设置两路输出信号的频率3M和4M
在这里插入图片描述
③乘法 ip(88)
步骤1:打开IP Catalog,点击Window下IP Catalog
在这里插入图片描述
步骤2:查找乘法 IP核 multiplier,搜索输入
在这里插入图片描述
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽8
在这里插入图片描述
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
在这里插入图片描述
④fft IP核 Fast Fourier Transform
步骤1:打开IP Catalog,点击Window下IP Catalog
在这里插入图片描述
步骤2:查找fft IP核 Fast Fourier Transform,搜索输入
在这里插入图片描述
步骤3:fft IP核配置——Configuration,修改名称,设置通道,传输的数据1024,设置Target Clock Frequency,采样率50M,选择基4突发结构
在这里插入图片描述
步骤4:fft IP核配置——Implementation,数据格式选择定点数类型,放缩设置为块浮点模式, 输出 FFT 结果选择顺序输出
在这里插入图片描述
步骤5:fft IP核配置——Detailed Implementation
在这里插入图片描述
步骤6:fft IP核——Implementation Details
①输入给fft ip核的axi4_stream接口的计算数据,fft ip作为slaver,来自dds ctrl;CHAN_0_XN_IM_0(31:16)是复数的虚部,CHAN_0_XN_RE_0(15:0)是复数的实部;
FFT混频信号只使用实部的信号,低 16 位赋值为乘法器输出值, 高 16 位赋值为 0;
②输入给fft ip核的axi4_stream接口的配置数据,fft ip作为slaver,1-正变换,0-逆变换
代码里需要设置配置数据为1,快速傅里叶正变换;
③fft ip核输出的axi4_stream接口的结果数据,fft ip作为master
将fft ip输出的数据的实部和虚部进行平方(通过乘法核实现)再相加
即可得到FFT处理后的频谱图
在这里插入图片描述
⑤乘法 ip(16
16)
步骤1:打开IP Catalog,点击Window下IP Catalog
在这里插入图片描述
步骤2:查找乘法 IP核 multiplier,搜索输入
在这里插入图片描述
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽16
在这里插入图片描述
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
在这里插入图片描述
⑥Block Memory Generator ip
步骤1:打开IP Catalog,点击Window下IP Catalog
在这里插入图片描述
步骤2:查找块BRAM IP核 Block Memory Generator,搜索输入
在这里插入图片描述
步骤3:块BRAM IP核 Block Memory Generator配置——Basic,设置Memory Type为真双端口
在这里插入图片描述
步骤4:块BRAM IP核 Block Memory Generator配置——Port A Options,设置写端口数据位宽33,深度2048;读端口数据位宽33,深度2048
在这里插入图片描述
步骤5:块BRAM IP核 Block Memory Generator配置——Port B Options,写端口数据位宽33,深度2048;读端口数据位宽33,深度2048(自动更新)
在这里插入图片描述
四、Matlab FFT功能与FPGA FFT功能结果比对
1、Matlab结果,四个峰值横坐标结果以及所出的范围进行标识
第一个峰值:21,搜索范围:1——50;
第二个峰值:144,搜索范围:100——200;
第三个峰值:882,搜索范围:850——900;
第四个峰值:1005,搜索范围:950——1023;
在这里插入图片描述
2、FPGA设置以及结果
根据Matlab的结果,对应FPGA代码设置四个峰值的范围
在这里插入图片描述
在这里插入图片描述
3、FPGA仿真结果
第一个峰值:21;第二个峰值:144;第三个峰值:882;第四个峰值:1005;
在这里插入图片描述
五、FPGA最大值搜索算法及代码分析
1、搜索算法的调用及参数赋值
在这里插入图片描述
在这里插入图片描述
2、最大值搜索算法top的参数及端口——data_max_top
在这里插入图片描述
3、关键信号锁存及边沿检测
①每组1024个fft数据有效信号
(i_fft_data_tvalid)
②fft输出10组数据稳定后有效计数(fft_data_tvalid_pos_cnt)
③fft_data_tvalid 上升沿
(fft_data_tvalid_pos)
④fft_data_tvalid 下降沿
(fft_data_tvalid_neg)
⑤最大值查找结束信号
(data_max_process_finish)
⑥最大值查找结束上升沿
(data_max_process_finish_pos)
在这里插入图片描述
4、三段式状态机(第一段和第二段)
S_IDLE:空闲状态
S_FFT_DATA_VAILD:FFT数据有效
S_FFT_DATA_MAX_PROCESS:最大值数据存储处理过程
S_FINISH:算法处理结束
①第一段时序逻辑,状态锁存;
②第二段组合逻辑,用于状态跳转;
③第十组数据结束后并且下一组fft数据有效开始,状态由S_IDLE跳转至S_FFT_DATA_VAILD;
④S_FFT_DATA_VAILD:将1024点数据存储至bram,用于后继算法模块;
⑤峰值搜索结束,整个算法跳转至结束
在这里插入图片描述
5、三段式状态机(第三段)
第三段时序逻辑处理,用RAM作为fft有效数据的存储,对应RAM的写地址、使能信号
在这里插入图片描述
6、FFT有效数据的存储——RAM
采用lut逻辑搭建的RAM,数据位宽33,深度位宽11(2048数据>1024数据)
在这里插入图片描述
7、数据最大值处理(data_max_process)调用例化
峰值搜索开始信号,fft 每组数据结束为止,从第11组数据开始,确保前十组数据完成
在这里插入图片描述
8、数据最大值处理的参数及端口——data_max_process
在这里插入图片描述
9、算法状态机(第二段)
①S_IDLE:峰值算法开始标志
②S_RAM_RD_ADDR_CTRL:地址控制,输入地址小于终止地址,每次累加一步进
③S_RAM_RD_DATA_LATCH:锁存前一级地址对应数据
④S_RAM_RD_DATA_CMP:峰值比较算法
⑤S_RAM_RD_MAX_DATA:输出峰值以及对应的bram的地址
在这里插入图片描述
10、算法状态机(第三段计数)
①S_RAM_RD_ADDR_CTRL:地址控制,输入地址小于终止地址,每次累加一步进
②S_RAM_RD_DATA_LATCH:当前状态计数,用于锁存前一级地址对应数据
③S_RAM_RD_DATA_CMP:当前状态计数,用于峰值比较算法
④S_RAM_RD_MAX_DATA:当前状态计数,用于输出峰值以及对应的bram的地址
在这里插入图片描述
11、算法状态机(第三段比较)
①S_RAM_RD_DATA_LATCH:锁存前一级地址对应数据③S_RAM_RD_DATA_CMP:峰值比较算法,不断跟前一次数值比较,将大的数值赋给data_middle
④S_RAM_RD_MAX_DATA:输出峰值以及对应的bram的地址
在这里插入图片描述


http://www.ppmy.cn/news/59416.html

相关文章

Allegro生成artwork推荐做法

原则上,充分利用所见即所得的功能。 如下: 创建所有的电气层底片。 以4层板为例。为了方便管理,统一名称很重要。 为 art01_top, art02_gnd, art03_pwr, art04_bot, 首先,关闭所有的图层,只打开BG->outline&#x…

锐龙7000PBO温度墙设置

AMD的锐龙7000处理器首发评测大家也都看过了,很多人关心的都是它的性能是否可以超越12代酷睿甚至即将发布的13代酷睿,这方面的测试结果差不多了,但是很多人不知道的是散热问题更需要关注。 在评测中,锐龙9 7950X在拷机时温度达到…

Python:从入门到实践:chapter2

Chapter2:变量和简单数据类型 2.2 变量2.3 字符串2.4 数字2.5 浮点数2.6 使用函数 str() 避免类型错误 2.2 变量 我们可以添加一个 变量名 message , 并为这个变量存储一个值(与之相关联的信息)在程序汇总可随时修改变量的值,而 …

交换机和路由器到底有什么区别???

我:度娘度娘,交换机和路由器的区别是什么呢? 度娘:一个工作在第二层数据链路层,一个工作在第三层网络层。 我:哈?那工作在不同层会有什么区别?为什么要工作在不同层? …

Vue生命周期

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

解决Xshell安装时错误代码-1603的问题

安装流程 官网下载:家庭/学校免费 - NetSarang Website 填写姓名,邮箱,申请下载,就能在邮箱收到下载链接 点击链接即可自动开始下载; 下载完成后进行安装即可 问题描述 安装进行到最后一步时,出现下图…

走近大数据——什么是大数据、计算架构的发展

文章目录 一、什么是大数据二、大数据计算架构的发展1.RDBMS阶段2.Hadoop Map-Reduce阶段3.Spark阶段4.Flink阶段 参考 一、什么是大数据 大数据是指无法在有限时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。 大数据的特点: 海量化:数…

【操作系统OS】学习笔记:第一章 操作系统基础【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…