嵌入式開發:傅里葉變換(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中基本一致,求出的幅值響應沒有問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mobaxterm服務器常用命令(持續更新)

切換文件夾 cd path # for example, cd /gpu03/deeplearning/進入不同GPU ssh mgmt ssh gpu01 ssh gpu03尋找文件位置 find /path -name file_name #for example, find / -name lib #在根目錄下搜尋名為lib文件 #for example, find /home/deeplearning -name "lib"…

MFC文件和注冊表的操作

MFC文件和注冊表的操作 日志、操作配置文件、ini、注冊表、音視頻的文件存儲 Linux下一切皆文件 C/C操作文件 const char* 與 char* const const char* 常量指針&#xff0c;表示指向的內容為常量。指針可以指向其他變量&#xff0c;但是內容不能再變了 char szName[6]&qu…

微信小程序源碼逆向 MacOS

前言 日常工作中經常會遇到對小程序的滲透測試&#xff0c;微信小程序的源碼是保存在用戶客戶端本地&#xff0c;在滲透的過程中我們需要提取小程序的源碼進行問題分析&#xff0c;本篇介紹如何在蘋果電腦 MacOS 系統上提取微信小程序的源碼。 0x01 微信小程序提取 在蘋果電…

ubuntu-24.04.1-desktop 中安裝 QT6.7

ubuntu-24.04.1-desktop 中安裝 QT6.7 1 環境準備1.1 安裝 GCC 和必要的開發包:1.2 Xshell 連接 Ubuntu2 安裝 Qt 和 Qt Creator:2.1 下載在線安裝器2.2 在虛擬機中為文件添加可執行權限2.3 配置鏡像地址運行安裝器2.4 錯誤:libxcb-xinerama.so.0: cannot open shared objec…

告別 Freetype,擁抱高效字體處理新方案 - 純c#解析字體庫

在當今數字化的時代&#xff0c;字體處理在眾多領域中都扮演著至關重要的角色&#xff0c;無論是平面設計、網頁開發&#xff0c;還是移動應用、游戲制作&#xff0c;合適的字體選擇與精準的處理都能極大地提升用戶體驗。而在字體處理的技術領域&#xff0c;Freetype 庫一直是開…

React + TypeScript 復雜布局開發實戰

React TypeScript 復雜布局開發實戰 一、項目架構設計&#xff08;基于最新技術棧&#xff09; 1.1 技術選型與工程創建 # 使用Vite 5.x React 19 TypeScript 5.4 npx create-vitelatest power-designer-ui --template react-ts cd power-designer-ui && npm inst…

從最小依賴角度談靜態庫與動態庫的選擇及配置策略

文章目錄 1. 前言2. 靜態庫與動態庫&#xff1a;依賴最小化的抉擇2.1 靜態庫概述2.2 動態庫概述2.3 依賴最小化角度的選擇建議 3. 運行時庫配置策略&#xff1a;/MT 與 /MD 的取舍3.1 /MT 與 /MD 的優劣比較3.2 配置選擇的建議 4. 實際案例與配置示例4.1 靜態庫示例&#xff08…

深度學習pytorch之19種優化算法(optimizer)解析

提示&#xff1a;有謬誤請指正 摘要 本博客詳細介紹了多種常見的深度學習優化算法&#xff0c;包括經典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等&#xff0c;通過對這些算法的公式和參數說明進行詳細解析…

【深度學習神經網絡學習筆記(二)】神經網絡基礎

神經網絡基礎 神經網絡基礎前言1、Logistic 回歸2、邏輯回歸損失函數3、梯度下降算法4、導數5、導數計算圖6、鏈式法則7、邏輯回歸的梯度下降 神經網絡基礎 前言 Logistic 回歸是一種廣泛應用于統計學和機器學習領域的廣義線性回歸模型&#xff0c;主要用于解決二分類問題。盡…

002簡單MaterialApp主題和Scaffold腳手架

002最簡單的MaterialApp主題和Scaffold腳手架使用導航欄_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1RZ421p7BL?spm_id_from333.788.videopod.episodes&vd_source68aea1c1d33b45ca3285a52d4ef7365f&p1501.MaterialApp純凈的 /*MaterialApp 是主題,自帶方向設…

DeepSeek開源周Day1:FlashMLA引爆AI推理性能革命!

項目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 開源日歷&#xff1a;2025-02-24起 每日9AM(北京時間)更新&#xff0c;持續五天&#xff01; ? 一、開源周震撼啟幕 繼上周預告后&#xff0c;DeepSeek于北京時間今晨9點準時開源「FlashMLA」&#xff0c;打響開源周五連…

17.C++類型轉換

1. C語言中的類型轉換 在C語言中&#xff0c;如果賦值運算符左右兩側類型不同&#xff0c;或者形參與實參類型不匹配&#xff0c;或者返回值類型與接收返回值類型不一致時&#xff0c;就需要發生類型轉換&#xff0c;C語言中共有兩種形式的類型轉換&#xff1a;隱式類型轉換和顯…

springboot志同道合交友網站設計與實現(代碼+數據庫+LW)

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本志同道合交友網站就是在這樣的大環境下誕生&#xff0c;其可以幫助使用者在短時間內處理完畢龐大的數據信…

VMware中的linux常用指令

常用 Linux 基礎命令 文件與目錄操作 ls&#xff1a;查看當前目錄的文件和子目錄&#xff0c;ls -a顯示所有文件&#xff0c;包括隱藏文件。cd&#xff1a;切換目錄&#xff0c;如 **cd ~** 切換到個人家目錄。pwd&#xff1a;查看當前目錄。mkdir&#xff1a;創建文件夾&#…

20250212:https通信

1:防止DNS劫持:使用 https 進行通信。 因為是SDK授權開發,需要盡量壓縮so庫文件和三方依賴。所以第一想法是使用 head only 的 cpp-httplib 進行開發。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已經在開發使用的是1.0.2a版本,不滿足需求。 方案1:升級OpenSSL 將Op…

VisionPro-PMA工具

VisionPro-PMA工具 模板匹配的核心概念 康耐視(Cognex)的VisionPro是一款廣泛應用工業自動化的機器視覺軟件平臺&#xff0c;其模板匹配(Pattern Matching)功能是核心工具之一&#xff0c;常用與目標定位、特征識別和質量檢測等場景。 模板匹配&#xff1a;通過預先定義的參…

2025最新最全【大模型學習路線規劃】零基礎入門到精通_大模型 開發 學習路線

第一階段&#xff1a;基礎理論入門 目標&#xff1a;了解大模型的基本概念和背景。 內容&#xff1a; 人工智能演進與大模型興起。 大模型定義及通用人工智能定義。 GPT模型的發展歷程。 第二階段&#xff1a;核心技術解析 目標&#xff1a;深入學習大模型的關鍵技術和工…

使用CSS3DRenderer/CSS2DRenderer給模型上面添加html標簽

先放一下預覽圖 主要使用css2dRender和css3dRender&#xff0c;添加圖片和標簽。 思路&#xff1a;使用css3dRender添加一個圖片&#xff0c;然后獲取的位置坐標&#xff0c;使用css3dRender添加一個文字標簽&#xff0c;也設置這個位置坐標&#xff0c;此外z軸設置一個高度&a…

完美隱藏滾動條方案 (2024 最新驗證)

完美隱藏滾動條方案 (2024 最新驗證) css /* 全局隱藏豎直滾動條但保留滾動功能 */ html {overflow: -moz-scrollbars-none; /* Firefox 舊版 */scrollbar-width: none; /* Firefox 64 */-ms-overflow-style: none; /* IE/Edge */overflow-y: overlay; …

Linux 內核配置機制詳細講解

本文是對 Linux 內核配置機制 make menuconfig 的 超詳細分步解析&#xff0c;涵蓋其工作原理、界面操作、配置邏輯及底層實現&#xff1a; 一、內核配置系統概述 Linux 內核的配置系統是一個 基于文本的交互式配置工具鏈&#xff0c;核心目標是通過定義 CONFIG_XXX 宏來控制內…