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

news2024/12/25 23:36:27

目录

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如下图所示 

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会报错,报错信息如下:

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

2.2 Simulink运行

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

图中易知FFT有很大的延迟

2.3 matlab信号处理 

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

因为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');

选择运行节

运行后得到的图像如下图所示:

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

拓:输入信号位数改变

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

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

修改好的Simulink结果如下:

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

结果如下:

运行matlab对应的节 

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

一致! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432374.html

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

相关文章

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

前言: 本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。 效果: VTK VTK,&…

Linux常见实用操作汇总(带示例版)

Linux常见实用操作汇总 1、各类快捷键1.1 强制停止1.2 退出、登出1.3 历史命令搜索1.4 光标移动1.5 清屏 2、软件安装2.1 在CentOS系统中,使用yum命令联网管理软件安装2.2 在Ubuntu系统中,使用apt命令联网管理软件安装。 3、systemctl4、软连接5、日期和…

Golang每日一练(leetDay0036) 二叉树专题(5)

目录 106. 从中序与后序遍历序列构造二叉树 Construct-binary-tree-from-inorder-and-postorder-traversal 🌟🌟 107. 二叉树的层序遍历 II Binary Tree Level-order Traversal II 🌟🌟 108. 将有序数组转换为二叉搜索树 C…

Nginx配置ssl证书实现https安全访问

目录 一、Nginx的安装与配置 安装步骤 二、SSL证书获取 三、Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名。 一、Nginx的安装与配置 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能: ./nginx -V 显…

多媒体信息发布系统解决方案

1.系统概述 多媒体信息发布系统主要是一个用于发布各种信息的平台,包括文字、图片、音频和视频等多种形式的信息。该系统旨在满足用户的信息需求,为信息发布者提供一个高效、安全、可靠的信息发布平台。 2.系统模块 (1)用户管理…

爬虫攻守道 - 猿人学第20题 - 殊途同归

写在开头 这题也是,自己搞顶多追踪到wasm代码,然后就走不下去了。找了2个参考方案,自己做的过程中还又遇到些新的问题,下面做个记录。解法1参考文章解法2参考文章 解法1:追根溯源 在 JS 代码中追踪到 Payload 赋值位…

漂亮实用的15个脑图模板,你知道哪些是AI做的吗?

对于很多第一次接触到思维导图的朋友,看到软件的时候往往找不到方向,不知道如何创作? 今天大家的好助手来了。 一是有大量的思维导图模板,大家看着模板做,慢慢就会做了。 二是ProcessOn 思维导图已经可以用AI 做思维…

鏖战大模型,未必能拯救商汤

在不被资本市场看好的质疑声中,商汤科技于近日跟风推出了自己的大模型产品,而且还直接打造了一个大模型超市,声称包括CV(计算机视觉)、NLP(​​​​​​​自然语言处理)、AIGC(人工智…

新电脑如何增加c盘空间

刚到手的台式机,发现C盘只分配了 100G 空间,对于我来说是不太够的(安装的软件太多,即使是一点点数据,几年就达到100G了)。对于经常不选择软件安装路径,全部都装在C盘的人,也是不够的…

【致敬未来的攻城狮计划】— 连续打卡第五天:Keil配置使用(使用 RASC 生成 Keil 工程)

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 文…

8万字智慧旅游景区信息化建设方案word

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1.1. 整体建设框架 XXXXXX智慧景区旅游建设对于全面整合景区旅游资源,提升景区旅游产业发展能级,进一步增强景区旅游业的核心竞争力具有十分重要的支…

拷贝、原型原型链

浅拷贝 将原对象或原数组的引用直接赋给新对象,新数组 新对象只是对原对象的一个引用,而不复制对象本身。新旧对象还是共享同一块内存 如果属性是一个基本数据类型,拷贝的就是基本数据类型的值 如果属性是引用类型,拷贝的是内…

Oracle的学习心得和知识总结(二十)|Oracle数据库Real Application Testing之DBMS_SQLTUNE包技术详解

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

SRv6项目实践(二):基本的P4框架

1.数据包头的定义 在实现SRv6之前,有很多的工作需要做,首先先阅读一下p4的代码总体框架,数据包的包头格式一共有如下这些,我们需要把他们的协议逐一完善 struct parsed_headers_t {cpu_out_header_t cpu_out;cpu_in_header_t cpu_in;ethern…

PostgreSQL环境搭建和主备构建

目录 1 Windows 上安装 PostgreSQL2 docker安装PostgreSQL2.1 检索当前镜像2.2. 拉取当前镜像2.3 创建挂载文件夹2.4 启动镜像2.5 查看日志2.7 查看进程2.8 使用连接 3 postgresql主从主备搭建3.1 安装好网络源(主1.11、从1.12)3.2 安装postgresql&#…

(数字图像处理MATLAB+Python)第五章图像增强-第二节:基于直方图修正的图像增强

文章目录 一:灰度直方图(1)定义(2)程序(3)性质 二:直方图修正法理论三:直方图均衡化(1)直方图均衡化变换函数T(r)的求解(2&#xff09…

设计模式-创建型模式之简单工厂模式( Simple Factory Pattern )

1.创建型模式简介创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整…

HCIP之MPLS中的LDP协议

LDP协议 LDP协议 --- 标签分发协议 MPLS控制层面需要完成的工作主要就是分配标签和传递标签。分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具备路由基础。所以,LDP想要正常工作,则需要IGP作为基础。 LDP协议主要需要完…

信号处理流程

1.降噪处理 我们在录制音频数据的同时,大量噪声都会掺杂进来,不同环境和情境下产生的噪声也不尽相同,噪声信号中的无规则波纹信息影响了声学信号所固有的声学特性,使得待分析的声音信号质量下降,并且噪声对声音识别系统…

02-数据库连接池+lombok工具

数据库连接池 概念: 数据库连接池是个容器,负责分配、管理数据库连接(Connection) 它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个 释放空闲时间超过最大空闲时间的连接,来避免因为没有释…