欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
Matlab串口波形刷新和數(shù)據(jù)分析m文件
[打印本頁(yè)]
作者:
CHENYIXIAO
時(shí)間:
2021-9-25 11:58
標(biāo)題:
Matlab串口波形刷新和數(shù)據(jù)分析m文件
V7-203_Matlab串口波形刷新和數(shù)據(jù)分析m文件
% ********************************************************************************************************************
% ********************************************************************************************************************
close all
clear all
%刪除所有已經(jīng)打開(kāi)的串口,這條很重要,防止之前運(yùn)行沒(méi)有關(guān)閉串口
delete(instrfindall);
%打開(kāi)串口COM1,波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn),無(wú)流控制
s = serial('COM1', 'BaudRate', 115200, 'DataBits', 8, 'StopBits', 1, 'Parity', 'none', 'FlowControl', 'none');
s.ReadAsyncMode = 'continuous';
fopen(s);
fig = figure(1);
% ********************************************************************************************************************
AxisMax = 65536; %坐標(biāo)軸最大值
AxisMin = -65536; %坐標(biāo)軸最小值
window_width = 800; %窗口寬度
g_Count =0; %接收到的數(shù)據(jù)計(jì)數(shù)
SOF = 0; %同步幀標(biāo)志
AxisValue = 1; %坐標(biāo)值
RecDataDisp = zeros(1,100000); %開(kāi)辟100000個(gè)數(shù)據(jù)單元,用于存儲(chǔ)接收到的數(shù)據(jù)。
RecData = zeros(1,100); %開(kāi)辟100個(gè)數(shù)據(jù)單元,用于數(shù)據(jù)處理。
Axis = zeros(1,100000); %開(kāi)辟100000個(gè)數(shù)據(jù)單元,用于X軸。
window = window_width * (-0.9); %窗口X軸起始坐標(biāo)
axis([window, window + window_width, AxisMin, AxisMax]); %設(shè)置窗口坐標(biāo)范圍
%子圖1顯示串口上傳的數(shù)據(jù)
subplot(2,1,1);
grid on;
title('串口數(shù)據(jù)接收');
xlabel('時(shí)間');
ylabel('數(shù)據(jù)');
%子圖2顯示波形的幅頻響應(yīng)
subplot(2,1,2);
grid on;
title( 'FFT');
xlabel( '頻率');
ylabel( '幅度');
Fs = 100; % 采樣率
N = 50; % 采樣點(diǎn)數(shù)
n = 0:N-1; % 采樣序列
f = n * Fs / N; %真實(shí)的頻率
% ********************************************************************************************************************
while ishandle(fig)
%設(shè)置同步信號(hào)標(biāo)志, = 1表示接收到下位機(jī)發(fā)送的同步幀
SOF = 0;
%發(fā)送同步幀
fwrite(s, 13);
%獲取是否有數(shù)據(jù)
bytes = get(s, 'BytesAvailable');
if bytes == 0
bytes = 1;
end
%讀取下位機(jī)返回的所有數(shù)據(jù)
RecData = fread(s, bytes, 'uint8');
%檢索下位機(jī)返回的數(shù)據(jù)中是否有字符$
StartData = find(RecData == 13);
%如果檢索到$,讀取10個(gè)字節(jié)的數(shù)據(jù),也就是5個(gè)uint16的數(shù)據(jù)
if(StartData >= 1)
RecData = fread(s, 5, 'uint16');
SOF =1;
StartData = 0;
end
%更新接收到的數(shù)據(jù)波形
if(SOF == 1)
%更新數(shù)據(jù)
RecDataDisp(AxisValue) = RecData(1);
RecDataDisp(AxisValue + 1) = RecData(2);
RecDataDisp(AxisValue + 2) = RecData(3);
RecDataDisp(AxisValue + 3) = RecData(4);
RecDataDisp(AxisValue + 4) = RecData(5);
%更新X軸
Axis(AxisValue) = AxisValue;
Axis(AxisValue + 1) = AxisValue + 1;
Axis(AxisValue + 2) = AxisValue + 2;
Axis(AxisValue + 3) = AxisValue + 3;
Axis(AxisValue + 4) = AxisValue + 4;
%更新變量
AxisValue = AxisValue + 5;
g_Count = g_Count + 5;
%繪制波形
subplot(2,1,1);
plot(Axis(1:AxisValue-1), RecDataDisp(1:AxisValue-1), 'r');
window = window + 5;
axis([window, window + window_width, AxisMin, AxisMax]);
grid on;
title('串口數(shù)據(jù)接收');
xlabel('時(shí)間');
ylabel('數(shù)據(jù)');
drawnow
end
if(g_Count== 50)
subplot(2,1,2);
%對(duì)原始信號(hào)做 FFT 變換
y = fft(RecDataDisp(AxisValue-50:AxisValue-1), 50);
%求 FFT 轉(zhuǎn)換結(jié)果的模值
Mag = abs(y)*2/N;
%繪制幅頻相應(yīng)曲線(xiàn)
plot(f, Mag, 'r');
grid on;
title( 'FFT');
xlabel( '頻率');
ylabel( '幅度');
g_Count = 0;
drawnow
end
end
fclose(s);
delete(s);
% ********************************************************************************************************************
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1