xilinx FPGA 进行 FFT

  1. 总体

    1.首先使用 matlab 生成 信号的 dat 文件(此dat文件包含信号的采样信息数据)作为DDS 信号

    3.配置 FFT IP

    4.仿真,tb中读取 dat 文件

matlab 代码如下:

c 复制代码
clc;
clear all;

A = 1;%幅值
FRE = 10000;%正弦波频率
P = 0;%相位

FS = 1000000;%采样频率
N = 1024;%采样点数
n = 0:N-1;%采样序列
t = n/FS;%时间序列

%sin_data = A * sin(2*pi*t * FRE + P) + 2*A * sin(2*pi*t * FRE*4 + P)+ A * sin(2*pi*t * FRE*6 + P);

sin_data = A * sin(2*pi*t * FRE + P);%生成正弦波

sin_data = fix((sin_data * (2^14 - 1)) + (2^14 - 1));%对正弦波进行15bit量化

figure(1);%定义一个图片1
subplot(2,2,1);%创建4个子窗口,并下面plot显示在1窗口
plot(sin_data);%显示正弦波

fid = fopen("fft_data.dat","w");%创建写数据文件

for i=1:N
    fprintf(fid,"%x\n",sin_data(i));%写数据
end

fclose(fid);%关闭文件

%对N个点进行快速傅里叶变化
fft_data = fft(sin_data,N);

%取模值
y = abs(fft_data);

%快速傅里叶变化的频谱的幅值
y = y *2 / N;

%快速傅里叶变化的频谱的频率
fs = FS * n/N;

subplot(2,2,2);%创建4个子窗口,并下面plot显示在2窗口
plot(fs(1:N/2),y(1:N/2));%显示半边区域频率
%plot(fs,y);%显示两边区域的频率
xlabel("频率");
ylabel("幅值");

matlab 代码运行如下:

单边

双边

多个频率叠加波形

  1. FFT IP 配置

    下图界面设置:

    a. 需要傅里叶变化的 通道数

    b. 傅里叶变化的 点数

    c, 傅里叶变化复杂度,从高到低

    d. 用户时钟频率,数据吞吐量

    下图界面设置:

    a. 输入数据的数据类型 定点或者浮点数

    b. 输入数据的格式 浮点数或者截取、不截取的定点数

    c, 进位模式,四舍五入、高精度模式

    d. 输入数据 格式位宽

    e. 输出数据,正序输出 或者倒序输出

    f. 非实时计算

使用bram 资源

这一界面展示了 数据位置,以及config 信号是指示 傅里叶正变化还是 反变化,1是正变化

  1. FPGA处理

    a. 给 FFT IP 配置信号为1,设置为正变化

    b. tb 中 将 DDS 信号送到 FFT IP 中

    c. 仿真观察 数据数据 以及 对比 matlab FFT 后的数据

    下图是傅里叶开始变化的开始信号

    DDS 信号输入结束到 输出开始间隔

    仿真和matlab fft后数据比较

复制代码
  	 4. 注意事项
下面是FFT IP 的例化端口信号,主要是debug 信号
a. 开始计算的信号接口
b. 输入数据和设置点数不匹配
c. last丢失,没有给last 信号
d. fifo 状态
e. 输入数据fifo满
f. 输出数据fifo空

如下表示输入数据有问题:

这里输入数据,因为输入的是实数,虚数位宽为0

数据输出:

相关推荐
zlinear数据采集卡28 分钟前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
FPGA小迷弟29 分钟前
Vivado中高速收发器GTX/GTH的配置与调试实战
fpga开发·fpga·硬件开发
FPGA小迷弟1 小时前
Vivado ILA与VIO调试工具实战指南:从入门到精通
fpga开发·fpga·硬件开发
FPGA小迷弟7 小时前
FPGA状态机设计详解:从Moore到Mealy的完整指南
fpga开发·fpga
zlinear数据采集卡1 天前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
zlinear数据采集卡1 天前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
何事误红尘1 天前
ZYNQ学习FPGA笔记(一):vivado安装、XC7Z045
fpga开发
传感器与混合集成电路2 天前
储气库漏失检测技术解析:分布式光纤如何锁定环空窜漏的精确位置
分布式·数据分析·信号处理
zlinear数据采集卡2 天前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
szxinmai主板定制专家2 天前
基于 RK3588 + Xilinx Kintex-7 FPGA 异构工业主控板设计方案
arm开发·人工智能·嵌入式硬件·fpga开发·zynq