当前位置: 首页 > news >正文

嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT

目录

1. MATLAB获取 STM32 的原始数据

2. 将数据上传到电脑

3. MATLAB 接收数据并验证

STM32进行傅里叶代码

结果分析


STM32 和 MATLAB 联调是嵌入式开发中常见的工作流程,通常目的是将 STM32 采集的数据或控制信号传输到 MATLAB 中进行实时处理、分析和可视化,同时也可以将在开发板上运行算法,然后再与Matlab计算的结果做对比,对我们的算法进行验证

以在项目中对磁通门传感器进行数据处理为例,进行在 STM32 和 MATLAB 联调,以下是三个关键步骤:

1. MATLAB获取 STM32 的原始数据

在 STM32 上,首先需要从传感器或其他外设获取原始数据。这个过程通常涉及:

  • 配置 ADC、传感器接口(如 I2C、SPI 等)来读取传感器数据。
  • 将采集到的数据存储到数组或缓冲区中,准备传输。

示例代码:

// 这是采集到的原始数据:Flugate_frame.dataBuf的缓存数组,包含磁通门传感器X、Y、Z三个轴的数据
// 数据填充过程,读取磁通门传感器X轴数据到数组中,先对X轴的数据做FFT变换int groupCount = Flugate_frame.dataLen / 12;  /* 每组12字节(x,y,z) */								                                                                                                                     
for (int i = 0; i < groupCount; i++)								                                                                                                                     
{ 										                                                                                                    if(Flugate_Date.Data_idx < 512)										                                                                                                                     {	//从原始数据缓存数组中提取X轴的数据到数组Flugate_Date.axis_X_Data_FFT_Input中,作为FFT的输入											                        memcpy(&Flugate_Date.axis_X_Data_FFT_Input[Flugate_Date.Data_idx], &Flugate_frame.dataBuf[i*12 + 0], 4);										 												                                                                                Flugate_Date.Data_idx++;//数据组数										                                                                                 }								                                                                                                                         
}

2. 将数据上传到电脑

在 STM32 上,使用串口(USART)、USB、I2C、SPI 或网络通信(如 TCP/IP)将原始数据发送到计算机。

  • 通过串口发送数据:使用 HAL_UART_Transmit() 或直接操作串口接口,发送数据到计算机。
  • 通过 USB:将 STM32 配置为 USB 虚拟串口或 USB 存储设备,将数据通过 USB 上传到计算机。
  • 通过网络(TCP/IP):如果 STM32 具有网络接口(如以太网或 Wi-Fi),则可以通过 TCP/IP 协议将数据传输到计算机。

示例代码(串口发送数据):

comSendBuf(COM4, (uint8_t*)&Flugate_Date.axis_X_Data_FFT_Input[Flugate_Date.Data_idx], 4);

3. MATLAB 接收数据并验证

在 MATLAB 中,接收 STM32 上传的数据,进行验证、处理和可视化:

  • 打开串口:在 MATLAB 中使用 serialport 打开与 STM32 的连接,我这里是通过串口发送数据,所以用到 serialport 来接收数据。
  • 接收数据:使用  read 等函数接收数据。
  • 数据验证与处理:接收的数据可以进行校验、滤波、分析或可视化,确保其正确性。
  • STM2发送的数据是来自传感器,每个数据均为4个字节,共发送了512个数据,对这512个数据进行FFT变换。

示例代码(MATLAB 接收数据):

clear;serialObj = serialport('COM11',  115200);  % 替换为正确的串口号% 设置超时时间为 200 秒
serialObj.Timeout = 200;  % 设置超时为 20 秒% 读取 512 * 4个 字节的数据
numFloats = 512;
% 按字节读取数据
data_UINT8 = read(serialObj, numFloats * 4, "uint8");  % 将字节数据重新排列为 4 字节一组
% 重塑为 512 行,每行 4 字节
data_UINT8 = reshape(data_UINT8, 4, 512).' ;  % 更改数据大小端
data_UINT8_change = fliplr(data_UINT8);% 创建一个 512x1 的全零数组
float_value = zeros(512, 0);  for index = 1:512
% 将四个字节合并成一个32位无符号整数
int_value = bitshift(data_UINT8_change(index,1), 24) + bitshift(data_UINT8_change(index,2), 16) + bitshift(data_UINT8_change(index,3), 8) + data_UINT8_change(index,4);
% 将该无符号整数转换为float
% int_value 需要先转为int32类型
float_value(index) = typecast(int32(int_value), 'single');  end
% 关闭串口连接
clear serialObj;%进行ftft
%采样频率
Fs = 512;
%采样点数
N = 512;
float_value_FFT = fft(float_value,N);Mag = abs(float_value_FFT);

STM32进行傅里叶代码

具体代码附件可以进行私聊。同时STM32实现FFT可见博客:嵌入式开发:傅里叶变换(5):基于STM32-DSP库实现-CSDN博客

结果分析

STM32进行FFT的滤波效果:

Matlab滤波效果:

比较联调可得STM32 FFT变换后的结果和Matlab中基本一致,求出的幅值响应没有问题。

相关文章:

嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT

目录 1. MATLAB获取 STM32 的原始数据 2. 将数据上传到电脑 3. MATLAB 接收数据并验证 STM32进行傅里叶代码 结果分析 STM32 和 MATLAB 联调是嵌入式开发中常见的工作流程&#xff0c;通常目的是将 STM32 采集的数据或控制信号传输到 MATLAB 中进行实时处理、分析和可视化…...

C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手

在上一篇《访问DeepSeekR1本地部署API服务搭建自己的AI办公助手》中&#xff0c;我们通过通过Ollama提供的本地API接口用Python实现了一个简易的AI办公助手&#xff0c;但是需要运行Py脚本&#xff0c;还比较麻烦&#xff0c;下面我们用C#依据Ollama提供的API接口开发一个本地A…...

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大&#xff0c;同一列中下边的比上边的大。一共有多少种方案? 答案很大&#xff0c;你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …...

我的AI工具箱Tauri版-FluxCharacterGeneration参考图像生成人像手办(Flux 版)

本教程基于自研的AI工具箱Tauri版进行ComfyUI工作流FluxCharacterGeneration参考图像生成人像手办&#xff08;Flux 版&#xff09;。 我的AI工具箱Tauri版 - FluxCharacterGeneration参考图像生成人像手办&#xff08;Flux版&#xff09; 基于先进的FLUX模型&#xff0c;通过…...

DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库

项目地址&#xff1a;https://github.com/deepseek-ai/DeepEP 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天 (2/5)&#xff01; ​ ​ 引言 在大模型训练中&#xff0c;混合专家模型&#xff08;Mixture-of-Experts, MoE&#xff09;因其动…...

51单片机-串口通信编程

串行口工作之前&#xff0c;应对其进行初始化&#xff0c;主要是设置产生波特率的定时器1、串行口控制盒中断控制。具体步骤如下&#xff1a; 确定T1的工作方式&#xff08;编程TMOD寄存器&#xff09;计算T1的初值&#xff0c;装载TH1\TL1启动T1&#xff08;编程TCON中的TR1位…...

python实现基于文心一言大模型的sql小工具

一、准备工作 注册与登录&#xff1a; 登录百度智能云千帆控制台&#xff0c;注册并登录您的账号。 创建千帆应用&#xff1a; 根据实际需求创建千帆应用。创建成功后&#xff0c;获取AppID、API Key、Secret Key等信息。如果已有千帆应用&#xff0c;可以直接查看已有应用的AP…...

deepseek 导出导入模型(docker)

前言 实现导出导入deepseek 模型。deepseek 安装docker下参考 docker 导出模型 实际生产环境建议使用docker-compose.yml进行布局&#xff0c;然后持久化ollama模型数据到本地参考 echo "start ollama" docker start ollama#压缩容器内文件夹&#xff0c;然后拷贝…...

前言:什么是大模型微调

一、大模型微调的基础知识 1. 什么是大模型微调&#xff1f; 大模型微调&#xff08;Fine-tuning&#xff09;是指在预训练模型的基础上&#xff0c;针对特定的任务或数据集进行进一步训练的过程。预训练模型通常在大规模的通用数据上训练&#xff0c;具备广泛的语言理解和生…...

TCPDF 任意文件读取漏洞:隐藏在 PDF 生成背后的危险

在网络安全的世界里&#xff0c;漏洞就像隐藏在黑暗中的“定时炸弹”&#xff0c;稍有不慎就会引发灾难性的后果。今天&#xff0c;我们要聊的是一个与 PDF 生成相关的漏洞——TCPDF 任意文件读取漏洞。这个漏洞可能让攻击者轻松读取服务器上的敏感文件&#xff0c;甚至获取整个…...

unity学习53:UI的子容器:面板panel

目录 1 UI的最底层容器&#xff1a;canvas 1.1 UI的最底层容器&#xff1a;canvas 1.2 UI的合理结构 2 UI的子容器&#xff1a;面板panel 2.1 创建panel 2.2 面板的本质&#xff1a; image &#xff0c;就是一个透明的图片&#xff0c;1个空容器 3 面板的属性 4 面板的…...

水环境水质在线监测系统解决方案

在当今社会&#xff0c;水资源作为人类生存和发展的基础性资源&#xff0c;其质量的优劣直接关系到生态平衡、人类健康以及社会经济的可持续发展。然而&#xff0c;随着工业化、城市化的快速推进&#xff0c;各类污染物不断排入水体&#xff0c;导致水环境面临严峻挑战。水环境…...

HBuilder X中,uni-app、js的延时操作及定时器

完整源码下载 https://download.csdn.net/download/luckyext/90430165 在HBuilder X中&#xff0c;uni-app、js的延时操作及定时器可以用setTimeout和setInterval这两个函数来实现。 1.setTimeout函数用于在指定的毫秒数后执行一次函数。 例如&#xff0c; 2秒后弹出一个提…...

BigDecimal线上异常解决方案:避免科学计数法输出的坑

文章目录 问题背景为什么BigDecimal会输出科学计数法&#xff1f;线上异常场景场景1&#xff1a;数据传递异常场景2&#xff1a;日志记录异常场景3&#xff1a;数据存储异常 解决方案1. 使用toPlainString()方法2. 设置格式化输出3. 自定义工具类 代码示例总结 在Java开发中&am…...

【C语言】指针笔试题

前言&#xff1a;上期我们介绍了sizeof与strlen的辨析以及sizeof&#xff0c;strlen相关的一些笔试题&#xff0c;这期我们主要来讲指针运算相关的一些笔试题&#xff0c;以此来巩固我们之前所学的指针运算&#xff01; 文章目录 一&#xff0c;指针笔试题1&#xff0c;题目一…...

深入理解Redis:数据类型、事务机制及其应用场景

在当今快速发展的技术领域中&#xff0c;Redis作为一种高性能的内存数据库&#xff0c;已经被广泛应用于各种场景&#xff0c;从简单的缓存实现到复杂的数据处理任务。其灵活性和高效性主要来源于对多种数据结构的支持以及强大的功能特性&#xff0c;如事务处理、持久化选项、高…...

RGMII(Reduced Gigabit Media Independent Interface)详解

一、RGMII的定义与作用 RGMII&#xff08;精简版千兆介质无关接口&#xff09;是一种用于千兆以太网&#xff08;1Gbps&#xff09;的高效接口标准&#xff0c;旨在减少传统GMII接口的引脚数量&#xff0c;同时保持相同的传输速率。其核心作用包括&#xff1a; 减少引脚数量&a…...

学习Flask:Day 1:基础搭建

学习目标&#xff1a;完成第一个Flask应用 # app.py from flask import Flask app Flask(__name__)app.route(/) def home():return <h1>Hello Flask!</h1>app.route(/api/greet/<name>) def greet(name):return {message: fHello {name}!}if __name__ __…...

XTOM工业级蓝光三维扫描仪在笔记本电脑背板模具全尺寸检测中的高效精准应用

——某3C精密制造企业模具优化与质量管控案例 镁合金具有密度小、强度高、耐腐蚀性好等优点&#xff0c;成为笔记本电脑外壳主流材料。冲压模具作为批量生产笔记本电脑镁合金背板的核心工具&#xff0c;其精度直接决定了产品的尺寸一致性、结构可靠性与外观品质。微米级模具误…...

网络安全 机器学习算法 计算机网络安全机制

&#xff08;一&#xff09;网络操作系统 安全 网络操作系统安全是整个网络系统安全的基础。操作系统安全机制主要包括访问控制和隔离控制。 访问控制系统一般包括主体、客体和安全访问政策 访问控制类型&#xff1a; 自主访问控制强制访问控制 访问控制措施&#xff1a; 入…...

[LaTeX] 使用natbib宏包实现参考文献“作者-年份”引用及常见编译错误排查指南

1. 为什么需要作者-年份引用格式&#xff1f; 在学术写作中&#xff0c;参考文献的引用格式直接影响论文的可读性和专业性。编号引用&#xff08;如[1]&#xff09;虽然简洁&#xff0c;但读者需要频繁翻到文末才能知道具体引用的是哪位学者的研究。而作者-年份格式&#xff08…...

东莞PVC收缩膜源头厂家选择

在东莞&#xff0c;PVC 收缩膜的应用场景早已渗透五金、建材、日用品、电子等多个行业&#xff0c;成为企业包装的刚需材料。但面对市面上良莠不齐的源头厂家&#xff0c;如何精准筛选出 “靠谱、适配、有潜力” 的合作伙伴&#xff1f;今天&#xff0c;我们从 “发展规模、产品…...

为什么你的搜索还在用纯文本?多模态大模型已成头部平台标配,错过这波升级将落后至少18个月

第一章&#xff1a;多模态大模型在搜索中的应用 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型正深刻重构现代搜索引擎的核心能力&#xff0c;使搜索从传统的关键词匹配跃迁为跨文本、图像、音频与视频的语义理解与意图对齐。用户上传一张模糊的街景照片并提问“…...

春招求职如何用AI工具做简历?5款主流AI简历工具推荐与使用思路

每到求职和春招节点&#xff0c;简历都会变成很多应届生最先焦虑的一关。不会写、不会改、不知道项目经历怎么量化、不清楚岗位关键词怎么放进简历里&#xff0c;几乎是每一届毕业生都会遇到的问题。也正因为如此&#xff0c;越来越多人开始搜索各种 AI工具&#xff0c;希望更高…...

图文理解准确率提升23.6%的关键操作,深度复现SITS2026官方未公开的微调Checklist

第一章&#xff1a;SITS2026深度解析&#xff1a;图文理解模型优化 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Semantic-Interleaved Text-Image System 2026&#xff09;是面向多模态大模型推理效率与细粒度对齐能力双重瓶颈所提出的新一代图文理解架…...

微信聊天记录永久保存终极方案:WeChatMsg完整指南

微信聊天记录永久保存终极方案&#xff1a;WeChatMsg完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg…...

【AIAgent安全防御红宝书】:20年攻防专家亲授3类对抗样本绕过手法及7层动态过滤架构

第一章&#xff1a;AIAgent对抗样本防御的演进脉络与核心挑战 2026奇点智能技术大会(https://ml-summit.org) AI Agent在开放环境中的部署正面临日益严峻的对抗性扰动威胁——微小、人眼不可辨的输入扰动即可导致决策逻辑崩溃&#xff0c;尤其在多轮推理、工具调用与记忆协同等…...

别再为UniApp和WebView通信发愁了!一个真实项目中的消息传递实战(附完整SDK配置流程)

UniApp与WebView通信实战&#xff1a;从原理到避坑指南 在混合应用开发领域&#xff0c;UniApp与WebView的通信问题一直是开发者面临的常见挑战。想象这样一个场景&#xff1a;你的教育类App中嵌入了H5活动页面&#xff0c;当用户完成模考后需要跳转到成绩分析页&#xff0c;或…...

MATLAB画世界地图:从m_map工具箱安装到标注天安门坐标点(保姆级教程)

MATLAB地理可视化实战&#xff1a;从m_map工具箱安装到精准坐标标注 第一次接触地理数据可视化时&#xff0c;我被那些专业地图软件复杂的界面吓退了。直到发现MATLAB的m_map工具箱——它让我用几行代码就实现了科研论文级别的绘图效果。本文将带你从零开始&#xff0c;掌握这个…...

OpenStack API实战:从Token获取到云主机管理

1. OpenStack API入门&#xff1a;为什么需要从Token开始&#xff1f; 第一次接触OpenStack API时&#xff0c;很多人会直接跳到云主机管理部分&#xff0c;结果发现连最简单的查询都报401错误。这就像去银行取钱却忘了带银行卡——Token就是你在OpenStack系统中的"身份凭…...