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

嵌入式开发:傅里叶变换(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 中进行实时处理、分析和可视化…...

【无人机三维路径规划】基于豪猪算法CPO、蜣螂算法DBO、人工兔ARO实现复杂山地模型下无人机路径规划附Matlab代码

无人机三维路径规划 一、引言 1.1、研究背景与意义 无人机技术在近年来得到了快速发展&#xff0c;其在军事侦察、民用测绘、物流配送和灾难救援等领域的应用日益广泛。路径规划作为无人机技术中的核心问题之一&#xff0c;直接影响到无人机的飞行效率和安全性。在复杂多变的…...

Cursor AI编程-详细教程

一点准备工作 Cursor方法论&#xff1a;简单到没有方法 Cursor能做什么 Cursor官网&#xff1a;https://www.cursor.com/ja Cursor文档&#xff1a;Cursor – Welcome to Cursor Cursor论坛&#xff1a;Weekly - Cursor - Community Forum 写程序代码 举例&#xff1a; 设…...

AI关于SHAP分析与列线图(算法)解释线性模型矛盾之处的解释

AI关于SHAP分析与列线图&#xff08;算法&#xff09;解释线性模型矛盾之处的解释 两种解释方法在个案的局部解释方面&#xff0c;有矛盾之处&#xff0c;其背后的原理已经超出了我的知识范畴&#xff0c;以下是询问AI的几个问题&#xff0c;希望能从中梳理出一个合理的解释。…...

上海市计算机学会竞赛平台2024年5月月赛丙组城市距离之和

城市距离之和 内存限制: 256 Mb时间限制: 1000 ms 题目描述 设 (x,y)(x,y) 与 (x′,y′)(x′,y′) 是平面上的两个点的坐标&#xff0c;它们之间的城市距离定义为 ∣x−x′∣∣y−y′∣∣x−x′∣∣y−y′∣ 给定 nn 个点&#xff0c;请计算所有点对之间的城市距离之和。 …...

处理DeepSeek返回的markdown文本

处理DeepSeek返回的markdown文本 markdown预览组件&#xff0c;支持公式显示&#xff0c;支持uniapp。 相关依赖 markdown-itmarkdown-it-mathjaxmarkdown-it-katexmarkdown-it-latexkatexgithub-markdown-css 组件源码 <!--* Description: markdown显示组件* Author: wa…...

《今日AI-人工智能-编程日报》整理于——头条新闻、豆包日报

技术突破 OpenAI 发布 GPT-4.5&#xff1a;OpenAI 正式推出新一代大模型 GPT -4.5&#xff0c;语言理解、情商及逻辑推理能力显著增强&#xff0c;幻觉问题大幅减少&#xff0c;计算效率较 GPT-4 提升超 10 倍&#xff0c;已逐步向用户开放试用。国产模型 Kimi 发布 k1.6 版本&…...

JavaEE [特殊字符] TCP协议:三次握手四次挥手全图解

&#x1f31f; 一、TCP核心特性&#xff1a;可靠传输的秘密 1️⃣ 有连接 & 全双工 双向通道&#xff1a;建立连接后&#xff0c;客户端↔服务器可同时收发数据可靠传输三板斧&#xff1a; 确认应答&#xff08;ACK&#xff09; 接收方返回ACK接收序号数据长度示例&#…...

解决 Ubuntu 24.04 虚拟机内无法ping 通 Hostname 的问题

问题背景 在 VMware 或 VirtualBox 中安装 Ubuntu 24.04 虚拟机时&#xff0c;遇到无法通过主机名&#xff08;Hostname&#xff09;进行网络通信的问题。例如&#xff0c;将虚拟机的主机名设置为 001&#xff0c;执行 ping 001 时返回 ping 0.0.0.1 并超时。此问题通常由 主机…...

wzl-django学习

####################################################总的urls.py from django.contrib import admin from django.urls import path,include, re_path from django.views.static import serve from django.conf import settings from drf_yasg import openapi from drf_yas…...

(十 三)趣学设计模式 之 模版方法模式!

目录 一、 啥是模板方法模式&#xff1f;二、 为什么要用模板方法模式&#xff1f;三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&a…...

泛型编程、函数模板、类模板

目录 一、泛型编程 1.泛型编程提出背景 1.1.代码复用案例解析 案例1&#xff1a;实现一个交换函数&#xff0c;并对不同类型参数进行函数重载 (1)调试 (2)代码解析 ①代码复用问题 ②泛型编程的解决方案 ③上面泛型Swap函数模版的优点 1.2.泛型编程提出背景 2.泛型编…...

【Vue3】浅谈setup语法糖

Vue3 的 setup 语法糖是通过 <script setup> 标签启用的特性&#xff0c;它是对 Composition API 的进一步封装&#xff0c;旨在简化组件的声明式写法&#xff0c;同时保留 Composition API 的逻辑组织能力。以下是其核心概念和原理分析&#xff1a; 一、<script setu…...

经验总结:使用vue3测试后端接口的模板

为了方便在开发中途&#xff0c;比较即时地&#xff0c;测试自己写的接口&#xff0c;是否有BUG&#xff0c;所以整理了这个测试模板。 效果就是可以通过自己编码&#xff0c;比较灵活&#xff0c;比较快得触发接口调用。 下边这个是最核心的模板&#xff0c;然后还有一个写axi…...

Vosk语音识别包

Vosk介绍 Vosk作为一款开源的离线语音识别工具包&#xff0c;其核心特点可归纳为以下五个方面&#xff0c;结合多篇技术文档的实践与分析 一、离线高效识别 完全脱离网络依赖&#xff1a;所有语音处理均在本地完成&#xff0c;无需云端数据传输&#xff0c;既保障隐私安全又…...

【欢迎来到Git世界】Github入门

241227 241227 241227 Hello World 参考&#xff1a;Hello World - GitHub 文档. 1.创建存储库 r e p o s i t o r y repository repository&#xff08;含README.md&#xff09; 仓库名需与用户名一致。 选择公共。 选择使用Readme初始化此仓库。 2.何时用分支&#xf…...

简洁的个人地址发布页HTML源码

源码介绍 简洁的个人地址发布页HTML源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果 效果预览 源码获取 简洁的个人地址发布页HTML源码...

【VSCode】VSCode下载安装与配置极简描述

VSCode 参考网址&#xff1a;[Visual Studio Code Guide | GZTime’s Blog]. 下载安装 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows. 注&#xff1a;推荐不更改安装位置&#xff0c;并且在附加任务中“其他”中的四项全部勾选&#xff0c;即将用…...

wav格式的音频压缩,WAV 转 MP3 VBR 体积缩减比为 13.5%、多个 MP3 格式音频合并为一个、文件夹存在则删除重建,不存在则直接建立

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 问题一&#xff1a;wav格式的音频压缩为哪些格式&#xff0c;网络传输给用户播放…...

Linux权限 -- 开发工具(一)

文章目录 包管理器yumyum具体操作 Linux编辑器 - vim的使用vimvim的多模式 包管理器yum Linux中安装软件&#xff1a; 1.源码安装 2. 软件包安装 – rpm 3. 包管理器yum(centos) apt/apt-get(ubuntu) 为什么有包管理器&#xff1f; 包管理器会自动帮我们解决包依赖的问题 2. 什…...

leetcode_动态规划/递归 279**. 完全平方数

279. 完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 …...

【leetcode】二分查找专题

文章目录 1.二分查找1.题目2.解题思路3. 解题代码 2.在排序数组中查找元素的第一个和最后一个位置1.题目2.算法原理3. 代码 3.x的平方根1.题目2.代码 4.搜索插入位置1.题目2.解题思路3.解题代码 5.山脉数组的索引1.题目2.解题思路3. 代码 6.寻找峰值1.题目2.解题思路3.代码 7. …...

腾讯混元文生图大模型(Hunyuan-DiT)与Stable Diffusion(SD)对比分析

腾讯混元文生图大模型&#xff08;Hunyuan-DiT&#xff09;与Stable Diffusion&#xff08;SD&#xff09;对比分析 腾讯混元文生图大模型&#xff08;Hunyuan-DiT&#xff09;与Stable Diffusion&#xff08;SD&#xff09;作为当前文生图领域的两大代表模型&#xff0c;各自…...

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…...

vector习题

完数和盈数 题目 完数VS盈数_牛客题霸_牛客网 一个数如果恰好等于它的各因子(该数本身除外)之和&#xff0c;如&#xff1a;6321。则称其为“完数”&#xff1b;若因子之和大于该数&#xff0c;则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述&#xff…...

unity学习59: 滑动条 和 滚动条 滚动区域

目录 1 滑动条 slider 1.1 创建slider 1.2 构成的子物体 1.2.1 找到 某个UI的 方法 1.3 构成的component&#xff0c;主体就是 slider 2 核心属性 2.1 value 2.2 direction 3 作用 3.1 由于是fill back 可以实现血条效果 3.2 可以取得 slider.value 数值 1 滑动条…...

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大&#xff0c;游戏玩家对游戏资讯、攻略、评测等内容的需求日…...

UWB人员定位:精准、高效、安全的智能管理解决方案

在现代企业管理、工业生产、安全监测等领域&#xff0c;UWB&#xff08;超宽带&#xff09;人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式&#xff0c;UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势&#xff0c;能够实现…...

etcd 3.15 三节点集群管理指南

本文档旨在提供 etcd 3.15 版本的三节点集群管理指南&#xff0c;涵盖节点的新增、删除、状态检查、数据库备份和恢复等操作。 1. 环境准备 1.1 系统要求 操作系统&#xff1a;Linux&#xff08;推荐 Ubuntu 18.04 或 CentOS 7&#xff09; 内存&#xff1a;至少 2GB 磁盘&a…...

在ubuntu 24.04.2 通过 Kubeadm 安装 Kubernetes v1.31.6

文章目录 1. 简介2. 准备3. 配置 containerd4. kubeadm 安装集群5. 安装网络 calico 插件 1. 简介 本指南介绍了如何在 Ubuntu 24.04.2 LTS 上安装和配置 Kubernetes 1.31.6 集群&#xff0c;包括容器运行时 containerd 的安装与配置&#xff0c;以及使用 kubeadm 进行集群初始…...