【FPGA-DSP】第五期:FFT调用流程

这篇具有很好参考价值的文章主要介绍了【FPGA-DSP】第五期:FFT调用流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. matlab输入信号编写

2. Simulink开发

2.1 模块搭建

2.2 Simulink运行

2.3 matlab信号处理 

拓:输入信号位数改变


本章节主要说明如何在system generator中使用fft模块,话不多说,看操作:

参考教程第5期 - FFT调用流程 - 基于FPGA的数字信号处理系统开发笔记_哔哩哔哩_bilibili

1. matlab输入信号编写

clc;clear all;close all;
%--------------------------------------------------------------------------
%%  FFT 输入信号生成
%--------------------------------------------------------------------------

%% 系统参数
N = 1024;%采样点数
Fs = 10000;%采样率为10KHz
Ts = 1/Fs;

%% 输入信号生成,由100Hz和2000Hz正弦信号合成
A = 0.5;
t = (0:N-1)*Ts;
ft_0 = 100;
vi_0 = zeros(1,N);
ft_1 = 2000;
vi_1 = zeros(1,N);
vi = zeros(1,N);% simulink rom导入

for n = 1:N
    vi_0(n) = A*sin(2*pi*ft_0*t(n));
    vi_1(n) = A*sin(2*pi*ft_1*t(n));
    vi(n) = vi_0(n) + vi_1(n);%混频
end


%% 信号图像输出
figure(1)
subplot(3,1,1)
plot(t,vi_0,'k');
xlabel('time'); 
ylabel('Amplitude');
subplot(3,1,2)
plot(t,vi_1,'k');xlabel('time'); 
ylabel('Amplitude');
subplot(3,1,3)
plot(t,vi,'k');
xlabel('time'); 
ylabel('Amplitude');

[Fre0,Amp0] = fft_plot(vi_0,Fs,N);
[Fre1,Amp1] = fft_plot(vi_1,Fs,N);
[Fre,Amp] = fft_plot(vi,Fs,N);

figure(2)
subplot(3,1,1)
plot(Fre0,Amp0);
xlabel('Frequency'); 
ylabel('Amplitude'); 
subplot(3,1,2)
plot(Fre1,Amp1);
xlabel('Frequency'); 
ylabel('Amplitude'); 
subplot(3,1,3)
plot(Fre,Amp);
xlabel('Frequency'); 
ylabel('Amplitude'); 

2. Simulink开发

2.1 模块搭建

参考我之前的一个开发笔记【FPGA-DSP】第二期:DSP开发流程【全过程】_༜黎明之光༜的博客-CSDN博客本章节首先介绍FPGA进行DSP开发所需要的软件环境,及其安装方式。DSP学习教程参考。https://blog.csdn.net/weixin_44810982/article/details/129746580

构建好的Simuink如下图所示 

【FPGA-DSP】第五期:FFT调用流程

Xilinx提供的FFT模块的输入输出均为两路IQ信号,在输入侧由于我们的输入信号为时域信号vi(只有实部信号),因此需要输入一个常数的虚部信号给data_tdata_xn_im_0,图中输入的是常数0。输出侧也是两路IQ信号,我们需要调用Simulink-Math Operation中的Real-Imag to complex将两路IQ信号合并成一路复数信号。因为输出端的信号合并操作是在FPGA外部(Simulink中处理),因此需要相连接outgetway再与Real-Imag to complex相连。最后将合并好的信号导入到work space中(使用To workspace模块)。

注意:当我们输入为fix_32_16的时候,simulink会报错,报错信息如下:

【FPGA-DSP】第五期:FFT调用流程

意思是请将输入修改为fix_32_31,这也就意味着在除去一位符号位之后,剩下的31位均为小数位,因此输入信号的幅度必须小于1,为了优化这个问题,将在文章最末给出解决方式 

2.2 Simulink运行

注意:Simulink的运行时间我们需要设置为N*5,即1024*5=5120个总采样点数。因为FFT需要才采集到1024个数据点之后才会进行快速傅里叶计算,同时考虑到系统计算会有一定的时延,因此我们需要将运行时间设置为5倍采样时间

【FPGA-DSP】第五期:FFT调用流程

图中易知FFT有很大的延迟

2.3 matlab信号处理 

在Simulink中我们使用了To workspace模块将数据导入到了work space中,变量名为sysgen_fft_output

【FPGA-DSP】第五期:FFT调用流程因为FFT需要在采样1024个点后才会开始计算,同时也会存在计算时延,因此采样点为2166的时候才有数据点。 

第一节中的matlab代码需要在末添加对sysgen_fft_output进行信号处理的部分,代码如下:

%% ---------------------------- 运行该节 -----------------------------------
% 在运行了system generator 中的FFT模块后,下面的代码才能够成功运行
start = 2166; %2166个采样点后才会有数据,因此从2166~2166+1024的范围内是我们数据经过FFT计算的有效值
FFTData1 = out.sysgen_fft_output.Data;% Symulink中使用的to workspace模块的输出
FFTData = abs(FFTData1(start:start+N-1))/N;

% From fft_plot function file
FFTAmplitude_FFTData1 = FFTData(1:N/2);
FFTAmplitude_FFTData1(2:end) = 2*FFTAmplitude_FFTData1(2:end);
Frequence_FFTData1 = Fs*((0:(N/2)-1))/N;

figure(3)
subplot(2,1,1)
plot(Fre,Amp,'k');
subplot(2,1,2)
plot(Frequence_FFTData1,FFTAmplitude_FFTData1,'k');

选择运行节

【FPGA-DSP】第五期:FFT调用流程运行后得到的图像如下图所示:

【FPGA-DSP】第五期:FFT调用流程

可以发现,二者对比,纵轴是没有差别的,横轴差了10个采样点数,这是可以原谅的。因为matlab与sumulink中对于fft的计算并不相同,会有数据点位置的不一致,但这不影响最终结果呈现。 

拓:输入信号位数改变

通过使用下列模块来实现输入信号位数的改变:Reinterpret(截位用Convert)

【FPGA-DSP】第五期:FFT调用流程

通过使用该模块,我们能够将我们输入信号fix_32_16强制转化为fix_32_31

【FPGA-DSP】第五期:FFT调用流程

修改好的Simulink结果如下:

【FPGA-DSP】第五期:FFT调用流程

与此同时,我们将matlab中的幅值参数A改为3后运行simulink

结果如下:

【FPGA-DSP】第五期:FFT调用流程运行matlab对应的节 

【FPGA-DSP】第五期:FFT调用流程

可以发现幅值变得非常小,是因为我们需要输出侧中将信号重新解释回来

【FPGA-DSP】第五期:FFT调用流程【FPGA-DSP】第五期:FFT调用流程一致! 文章来源地址https://www.toymoban.com/news/detail-410469.html

到了这里,关于【FPGA-DSP】第五期:FFT调用流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 零基础html学习-第五期

    好久不见,兄弟们。我又回来继续更blog了! 博主主页:GUIDM 收入专栏:零基础HTML学习   tr:行 td:列 th:表头单元格,内部文本加粗并居中显示。 表格table属性 border:定义线条的粗细 width:定义表格的总宽度 height:定义表格的总高度 cellspacing:定义单元格之间的距离 cellpad

    2023年04月11日
    浏览(37)
  • 搜索与图论第五期 拓扑序列

    拓扑排序 拓扑排序是一种对有向无环图(Directed Acyclic Graph,简称DAG)进行的排序过程,目的是将图中所有的顶点按照发生事件的顺序排成一条线性序列。这种排序确保了图中任意两个相邻顶点之间至少有一条边相连,且在这条边的方向上,这条边的终点在前于起点。拓扑排

    2024年01月23日
    浏览(48)
  • STM32 DSP库CUBEMX配置+FFT频率计算

    使用DSP中的函数加快计算。 本文首先讲述如何通过添加dsp库。 再讲述使用DSP库进行实数FFT运算。(FFT运算用到了前面讲述的STM32CubeMX-ADC hal库 3定时器触发) 参考1文章 参考2文章 先找到文件路径 然后设置如下路径 双击如下并找到路径 D:STM32CubeMXSTM32Cube_FW_F4_V1.26.2DriversCMS

    2024年02月16日
    浏览(30)
  • 运维开发面试题第五期(华电天益)

    1、一个目录(没有子目录)有很多文件,想最快速度查看到最近更新的文件你有几种方式实现?请写出一种或几种 2、使用 tar 命令打包/etc 目录下的所有文件(包括子文件夹) 3、服务器新增加一个U盘,系统读取到的盘符为/dev/sdb1,如何将该 U盘挂载到/mnt目录下? 4、Linux下查询进程

    2024年02月13日
    浏览(34)
  • python-opencv第五期:rectangle函数详解

    概要: 众 嗦粥汁 所周知,在如今计算机视觉( Computer Version  short for CV)是人工智能与机器人技术发展的一个重大研究方向,而 opencv 作为一个专门为计算机视觉编程提供技术与函数支持的第三方库,自然是一个需要重点研究的内容。             本期所要介绍的函数是o

    2024年02月05日
    浏览(32)
  • 第五期:字符串的一些有意思的操作

    PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 1. 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成\\\"%20\\\"。 示例1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 示例2: 输入:s =

    2024年02月08日
    浏览(39)
  • 【熬夜送书 | 第五期】清华社赞助 | 《MySQL系列丛书》

    MySQL是一种关系型数据库管理系统,由瑞典MySQL AB公司开发。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 MySQL有以下几个优势: 1.开源免费:MySQL是开源软件,完全免费使用,没

    2024年02月10日
    浏览(32)
  • STM32CubeMx移植DSP库 傅立叶变化(FFT)测试

    本篇文章采用的是ST公司的STM32L496的DSP库进行FFT函数测试,将计算得到的数据通过串口工具打印出来,其他支持DSP库的型号也是类似做法。 STM32L496为超低功耗Cortex-M4内核的MCU,具有64个引脚,并且外设资源丰富(4个IIC硬件通信接口、5个串口通信接口、3个SPI通信接口、3个12位

    2023年04月08日
    浏览(34)
  • 【送书福利-第五期】《网络结构数据分析与应用》

    大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 今天给大家介绍一本书:《网络数据结构分析与应用》 国内首本成体系网络

    2024年02月09日
    浏览(40)
  • Stage模型详解,UIability------Harmony OS 开发(第五期)

    如上图所示,蓝色框内就是代表一个模块, 一个工程下可以有n个模块,但只能有一个entry模块,即入口模块(核心),里面是该APP的主要功能 。模块分为两种类型: Ability Module和Library Module模块 ,前者是能力模块,用于实现对应的页面和功能,后者是共享模块,里面的功能和已经创

    2024年01月24日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包