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

news2024/11/19 2:30:03

一 、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.coloradmin.cn/o/492360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022 ios APP最新开发测试教程

转载:2022 ios APP最新开发测试教程1.本文详细介绍最新的在windows上进行ios app开发编译打包安装到手机测试的完整流程。介绍ios开发经常遇到的问题和解决方法,包括ios开发证书,ios开发描述文件等。http://kxdang.com/topic/appuploader/ios…

IP报文结构

文章目录 IP报文结构分片 IP报文结构 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. 4位头部长度(header length): 类似于TCP4位首部长度,通常填的是0101(十进制5) 16位总长度(total length): IP数据报整体占多少个字节.这用…

大数据企业应用合作解决方案案例

打造产教融合的就业育人的综合服务平台,给予十余年的数据智能产业实践经验,专注于大数据和人工智能方向。 目前合作的企业案例包括:信访大数据平台解决方案、工业废水处理解决方案、找齐远程监控解决方案、道路运输安全、广电用户服务大数据解…

VS2019 c++ cmake项目 打包并使用 (lib\dlll)

背景 最近项目中经常调用第三方库、带头文件、lib和dll的库,需要使用cmake进行项目管理,之前一直比较糊涂这方面,在这里做一个整理总结 编译汇编过程 静态链接方式: 把lib里面编译好的东西(函数、变量等&#xff09…

【Yolo】YoloV5训练自定义模型

【Yolo】Jetson Orin Nano下部署 YoloV5 上一篇博文主要记录了在Jetson Orin Nano下部署YoloV5环境,并运行了yoloV5n.pt模型,本篇在上一篇的基础上,进一步记录如何训练自己的目标模型,我们以一根口香糖盒子为训练对象进行说明。 …

Kali Linux 操作系统安装详细步骤——基于 VMware 虚拟机

1. Kali 操作系统简介 Kali Linux 是一个基于 Debian 的 Linux 发行版,旨在进行高级渗透测试和安全审计。Kali Linux 包含数百种工具,适用于各种信息安全任务,如渗透测试,安全研究,计算机取证和逆向工程。Kali Linux 由…

学习笔记(4)页面开发

目录 1,页面开发1.1,标签类1.2,资源引用1.3,页面跳转 2,开发规范2.1,应用生命周期2.2,页面生命周期:2.3,条件编译 3,注意事项 1,页面开发 1.1&am…

真实业务场景使用-模板模式+策略模式组合

模板和策略设计模式一般是使用最频繁的设计模式,模板的场景主要是处理一系列相同的流程,将这些流程放到模板里,每个流程里的处理可能有一些不一样的地方,则可以抽象出一个方法,由每一个有实际意义的子类实现。 策略模…

从供应链角度看进销存:区别与联系

供应链和进销存是两个紧密相关的概念,它们都涉及到企业在商品贸易中的运作过程。虽然它们有一些相似之处,但是它们也有一些显著的区别。本文将从几个方面探讨供应链和进销存的区别。 一、概念定义 供应链的定义:供应链是一系列的活动&#…

WPF 多媒体MediaElement 的使用(一)

本章讲述MediaElement的简单使用: WPF 中对于多媒体的支持非常完整,可以使用MediaElement 为应用程序添加媒体播放控件,以完成播放音频、视频功能。MediaElement 属于UIElement,同时也支持鼠标及键盘的操作。 想以交互方式停止、…

通达信N字形态选股公式,突破前期高点发出信号

行情经历一波上涨之后回调,然后再次上涨,形态类似于字母N,这就是N字形态。该形态在不同的分析方法中均有描述,如123法则、波浪理论等,只是名称不同而已。 本文的N字形态选股公式,以突破前期波段高点发出信号…

2023年留学基金委(CSC)青年骨干教师出国研修项目解读及建议

5月4日,国家留学基金委(CSC)公布了2023年青年骨干教师出国研修项目通知,知识人网小编现将其选派工作流程、选派办法、申请材料及说明原文转载并加以解读、提出建议。 知识人网解读及建议 一、2023年的通知精神与往年相比&#xf…

MySQL索引、事务与存储引擎

数据库索引 是一个排序的列表,存储着索引值和这个值对应的物理地址,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)无需对整个表进行扫描,而是先通…

C++图文安装教程,计算机零基础都能懂

系统:win11 软件:code blocks&DEV-CPP 文章目录 一、Dev-Cpp安装步骤1.点击安装包2.选择我们的语言为English3.选择我同意即可4.点击next就可以,最后一个框除非是你之前有写过C的项目,想要清除,否则我们不用…

【Java|golang】2432. 处理用时最长的那个任务的员工

共有 n 位员工,每位员工都有一个从 0 到 n - 1 的唯一 id 。 给你一个二维整数数组 logs ,其中 logs[i] [idi, leaveTimei] : idi 是处理第 i 个任务的员工的 id ,且 leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei…

Android---启动速度优化

App 启动流程 1. 点击桌面 App 图标,Launcher 进程采用 Binder IPC 向 system_server 进程发起 startActivity 请求 ; 2. system_server 进程接收到请求后,向 zygote 进程发送创建进程的请求; 3. zygote 进程 fork 出新的子进程…

KDGK-F断路器机械特性测试仪

一、产品概述 KDGK-F 断路器机械特性测试仪可用于各电压等级的真空、六氟化硫、少油、多油等电力系统高压开关的机械特性参数测试与测量。测量数据稳定,抗干扰性强,可在500KV等级及以下电站做实验,接线方便,操作简单,是…

TikTok选品要怎样才能选到爆品?!

对于做TikTok的商家而言,选品是非常重要的,因为一个产品爆了之后能带动其他产品的销量,那我们要如何有效的选品呢? 一、多平台选品逻辑 首先要知道一个点,在独立站爆的品也会在亚马逊爆,而TikTok已经成为一…

安卓Glide那些事情面试,一篇全部搞定

安卓Glide那些事情面试,一篇全部搞定 一.Glide有几级缓存???二.Gllide源码分析三.内存缓存和磁盘缓存LruCache算法四.Gllide基本使用五.Gllide高级使用:配置1.配置内存和磁盘缓存大小2.配置okhttp3.配置https认证4.使用 一.Glide有…

冲浪杂记——

华为od是指什么? 华为OD(Open Developer Platform)是华为面向全球开发者推出的开放平台,旨在为开发者提供丰富的技术资源和开发工具,支持开发者快速构建基于华为技术的应用程序、解决方案和服务。华为OD平台为开发者提…