Matlab串口通信FFT变换显示
主要介绍Matlab 的串口方式读取数据,并波形显示和后期数据分析,非常实用,根据自己的需求做简单更改即可使用。
![](https://img-blog.csdnimg.cn/bc7178b447be47c4986b373a31d1f5d2.png)
一、下位机
下位机周期性发送数据
int main(void)
{
uint32_t test;
bsp_Init(); /* 硬件初始化 */
PrintfInfo();
while (1)
{
test = rand()%600;
HAL_UART_Transmit_IT(&UART2_Handler, (uint8_t *)&test, sizeof(test));
HAL_Delay(100);
}
}
二、Matlab接收并显示
使用Matlab GUI创建界面
![](https://img-blog.csdnimg.cn/ef70ccbf22d44c01bd28647602ae8658.png)
刻度模式修改成auto,要不刻度不随下方程序变化。
数据接收,波形显示代码如下:
while app.rcv_flag == 1
tempdata = fread(app.serialObj, 4, 'uint8');
RecData = typecast(uint8(tempdata(1:4)), 'uint32');
% disp(RecData);
%更新数据
RecDataDisp(AxisValue) = RecData;
%更新X轴
Axis(AxisValue) = AxisValue;
%更新变量
AxisValue = AxisValue + 1;
%绘制波形
plot(app.UIAxesData, Axis(1:AxisValue-1), RecDataDisp(1:AxisValue-1), '-r');
axis(app.UIAxesData, [window, window + window_width, AxisMin, AxisMax]);
window = window + 1;
drawnow;
g_count = g_count + 1;
if g_count == 300
Fs = g_count *2 ; % 采样率=2*周期
N = g_count; % 采样点数
n = 0:N-1; % 采样序列
f = n * Fs / N; % 真实的频率X轴
%对原始信号做 FFT 变换
y = fft(RecDataDisp(AxisValue-g_count:AxisValue-1), g_count);
%求 FFT 转换结果的模值
Mag = abs(y)*2/N;
%绘制幅频相应曲线
plot(app.UIAxesFFT, f, Mag, 'r');
g_count = 0;
drawnow;
end
pause(0.1);
end
产品介绍
https://seeker.taobao.com/