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

这篇具有很好参考价值的文章主要介绍了基于FPGA和Matlab实现的FFT功能验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等

一 、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数据取模运算,并绘图
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
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); %绘图
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
3、Matlab绘制频谱图结果
对频谱图的四个峰值横坐标结果以及所出的范围进行标识,用于FPGA平台的FFT处理结果验证比对。
第一个峰值:21,搜索范围:1——50;
第二个峰值:144,搜索范围:100——200;
第三个峰值:882,搜索范围:850——900;
第四个峰值:1005,搜索范围:950——1023;
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
三、FPGA FFT功能设计开发
1、vivado开发平台(vivado 2019.2,其余版本按照步骤生成新工程即可)
①DDS IP核生成3Mhz和4Mhz的sin频率信号;
②乘法ip核实现3Mhz和4Mhz的sin频率信号混频处理;
③FFT IP核实现FFT的算法;
④乘法ip核实现FFT处理后数据取模运算;
⑤通过算法实现取模运算后1024数据的四个峰值搜索;
⑥四个峰值对应的点与Matlab的峰值横坐标比对
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,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数据的四个峰值搜索;
⑧仿真文件
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
3、FFT工程设计中IP核配置
①时钟ip
步骤1:打开IP Catalog,点击Window下IP Catalog
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找时钟IP核 Clocking Wizard,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:时钟IP核 Clocking Wizard配置——Clocking Options,修改名称,选择PLL模式,设置输入时钟50M,可根据实际工程配置
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:时钟IP核 Clocking Wizard配置——Output Clocks,设置输出50M和100M,复位信号不使用,使用locked作为内部复位
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
②DDS ip
步骤1:打开IP Catalog,点击Window下IP Catalog

matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找dds IP核 dds compiler,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:dds IP核dds compiler配置——Configuration,修改名称,设置选择Phase Generator and SIN COS LUT,设置输入系统时钟100M,两路通道3M和4M
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:dds IP核dds compiler配置——Implementation,Output 选择Sine模式,对比Matlab中sin信号,相位输出不使能
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤5:dds IP核dds compiler配置——Detailed Implementation,DATA Output 选择Chan ID Field,对应两路输出3M和4M的sin信号
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤6:dds IP核dds compiler配置——Output Frequencies,设置两路输出信号的频率3M和4M
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
③乘法 ip(88)
步骤1:打开IP Catalog,点击Window下IP Catalog
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找乘法 IP核 multiplier,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽8
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
④fft IP核 Fast Fourier Transform
步骤1:打开IP Catalog,点击Window下IP Catalog
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找fft IP核 Fast Fourier Transform,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:fft IP核配置——Configuration,修改名称,设置通道,传输的数据1024,设置Target Clock Frequency,采样率50M,选择基4突发结构
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:fft IP核配置——Implementation,数据格式选择定点数类型,放缩设置为块浮点模式, 输出 FFT 结果选择顺序输出
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤5:fft IP核配置——Detailed Implementation
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤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处理后的频谱图
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
⑤乘法 ip(16
16)
步骤1:打开IP Catalog,点击Window下IP Catalog
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找乘法 IP核 multiplier,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽16
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
⑥Block Memory Generator ip
步骤1:打开IP Catalog,点击Window下IP Catalog
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤2:查找块BRAM IP核 Block Memory Generator,搜索输入
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤3:块BRAM IP核 Block Memory Generator配置——Basic,设置Memory Type为真双端口
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤4:块BRAM IP核 Block Memory Generator配置——Port A Options,设置写端口数据位宽33,深度2048;读端口数据位宽33,深度2048
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
步骤5:块BRAM IP核 Block Memory Generator配置——Port B Options,写端口数据位宽33,深度2048;读端口数据位宽33,深度2048(自动更新)
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
四、Matlab FFT功能与FPGA FFT功能结果比对
1、Matlab结果,四个峰值横坐标结果以及所出的范围进行标识
第一个峰值:21,搜索范围:1——50;
第二个峰值:144,搜索范围:100——200;
第三个峰值:882,搜索范围:850——900;
第四个峰值:1005,搜索范围:950——1023;
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
2、FPGA设置以及结果
根据Matlab的结果,对应FPGA代码设置四个峰值的范围
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
3、FPGA仿真结果
第一个峰值:21;第二个峰值:144;第三个峰值:882;第四个峰值:1005;
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
五、FPGA最大值搜索算法及代码分析
1、搜索算法的调用及参数赋值
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
2、最大值搜索算法top的参数及端口——data_max_top
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
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)
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
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,用于后继算法模块;
⑤峰值搜索结束,整个算法跳转至结束
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
5、三段式状态机(第三段)
第三段时序逻辑处理,用RAM作为fft有效数据的存储,对应RAM的写地址、使能信号
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
6、FFT有效数据的存储——RAM
采用lut逻辑搭建的RAM,数据位宽33,深度位宽11(2048数据>1024数据)
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
7、数据最大值处理(data_max_process)调用例化
峰值搜索开始信号,fft 每组数据结束为止,从第11组数据开始,确保前十组数据完成
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
8、数据最大值处理的参数及端口——data_max_process
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
9、算法状态机(第二段)
①S_IDLE:峰值算法开始标志
②S_RAM_RD_ADDR_CTRL:地址控制,输入地址小于终止地址,每次累加一步进
③S_RAM_RD_DATA_LATCH:锁存前一级地址对应数据
④S_RAM_RD_DATA_CMP:峰值比较算法
⑤S_RAM_RD_MAX_DATA:输出峰值以及对应的bram的地址
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
10、算法状态机(第三段计数)
①S_RAM_RD_ADDR_CTRL:地址控制,输入地址小于终止地址,每次累加一步进
②S_RAM_RD_DATA_LATCH:当前状态计数,用于锁存前一级地址对应数据
③S_RAM_RD_DATA_CMP:当前状态计数,用于峰值比较算法
④S_RAM_RD_MAX_DATA:当前状态计数,用于输出峰值以及对应的bram的地址
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言
11、算法状态机(第三段比较)
①S_RAM_RD_DATA_LATCH:锁存前一级地址对应数据③S_RAM_RD_DATA_CMP:峰值比较算法,不断跟前一次数值比较,将大的数值赋给data_middle
④S_RAM_RD_MAX_DATA:输出峰值以及对应的bram的地址
matlab开发fpga靠谱么,FPGA工程项目,fpga开发,matlab,开发语言文章来源地址https://www.toymoban.com/news/detail-526211.html

到了这里,关于基于FPGA和Matlab实现的FFT功能验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的图像白平衡算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 vivado2019.2 matlab2022a         FPGA(Field-Programmable Gate Array)是一种可编程逻辑电路,可以通过编程实现各种算法,包括图像白平衡算法。图像白平衡算法是一种用于调整图像颜

    2024年02月07日
    浏览(57)
  • 基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 在FPGA中仿真结果如下所示: 将FPGA中的仿真结果导入到matlab显示二维图,效果如下: matlab2022a vivado2019.2        膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操

    2024年02月07日
    浏览(37)
  • 基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 MATLAB测试结果: FPGA测试结果: 上述仿真图中,红色XX表示图像读取完毕。因此输出XX。当图像输出完成之后,最下面的相似性指标 same1输出为11226,same2输出为67584.即图1和图

    2024年04月09日
    浏览(43)
  • 基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 Vivado2019.2 matlab2022a        图像二值化是数字图像处理中的一种常见技术,可以将灰度图像转换为黑白二值图像,突出图像

    2024年02月08日
    浏览(47)
  • 基于Matlab的滑动窗FFT算法实现

    目录 前言: 1.1 滑动窗FFT算法推导 1.2 滑动窗FFT算法实现  1.3 结论 作为一个在研狗,开源一个工程信息学小作业,是关于滑动窗FFT算法的推导和实现的,实现借助Matlab2018a实现。 用 表示输入序列段 的N点FFT,由FFT的定义可以得到:  以及:   将P=n+1带入公式(2),可以将公

    2024年02月08日
    浏览(46)
  • 【基于FFT的自由响应非线性检测方案】使用归零早期FFT的非线性检测研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及详细文章

    2024年02月15日
    浏览(50)
  • 【教程4>第2章>第7节】BPSK解调系统的FPGA开发与matlab对比验证

    欢迎订阅FPGA/MATLAB/Simulink系列教程 《★教程1:matlab入门100例》 《★教程2:fpga入门100例》 《★教程3:simulink入门60例》 《★教程4:FPGA/MATLAB/Simulink联合开发入门与进阶X例》 目录

    2024年04月12日
    浏览(39)
  • 【教程4>第2章>第3节】ASK解调系统的FPGA开发与matlab对比验证

    欢迎订阅FPGA/MATLAB/Simulink系列教程 《★教程1:matlab入门100例》 《★教程2:fpga入门100例》 《★教程3:simulink入门60例》 《★教程4:FPGA/MATLAB/Simulink联合开发入门与进阶X例》 目录 /

    2024年04月16日
    浏览(37)
  • 基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)

    微信公众号上线,搜索公众号 小灰灰的FPGA ,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 源码工程链接 https://download.csdn.net/download/m0_50111463/88529260

    2024年02月10日
    浏览(61)
  • Matlab实现FFT变换

    在信号处理中,快速傅里叶变换(FFT)是一种非常常见的频域分析方法。本文将介绍如何使用Matlab实现FFT变换,并通过Matlab代码演示实际输出结果。 原理 FFT是一种计算离散傅里叶变换(DFT)的快速算法。DFT将时域上的信号转换为频域上的信号,可以用以下公式表示: X k = ∑

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包