CANape采集的MF4文件数据导入matlab工作区,再在simulink中进行仿真:
1、MF4文件挑选要观察的数据,导出成.mat文件
先导入采集的MF4格式的数据,选择要观察的数据再导出成.mat文件

2、编写m脚本读出挑选出来的数据
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
load('240712_2.mat'); %mf4文件挑选出的数据导入成的.mat文件
L = numElements(data);
for i = 1:L
eval([data{i}.Name,'=','double(data{i}.Values.Data)',';']);
end
L = length(data{1}.Values.Data);
t1=1:1:L;
t1=t1';
clear('i','L','data');
3、simulink中From Workspace库模块填入工作区数据[t SingalName],可进行数据仿真。
对Matlab工作区数据进行FFT分析
Matlab如何导入Excel数据并进行FFT变换_跳频信号导入到excel-CSDN博客
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
Fs=100; %采样频率
Y=fft(VarName); %VarName matlab工作区数据
L=length(Y);
P2=abs(Y/L);
P1= P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f=Fs *(0:(L/2))/L;
%plot(f,P1);
stem(f,P1,'filled','r');
编写m脚本,直接读取MF4文件
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
clear;
filename = 'Recorder_2024-07-20_18-05-01.MF4'; %MF4文件名称
a=mdf(filename);
data1 = read(a,3,a.ChannelNames{3}); %读取通道3数据
name = a.ChannelNames{3,1}; %通道3名称
L = width(data1); %通道3数据个数
for i=1:L
b=name{i};
eval([b,'=','double(data1.',b,');']); %读出通道3各数据名称与数据一一对应
end
t1=t;
L=length(t);
t=1:L;
t=t';
set_param('Copy_of_FIFTER','Stoptime','length(t)'); %设置仿真时间与采集数据时间一致
clear('i','L','filename','data1','a','name','b')
simulink中From Workspace库模块填入工作区数据[t SingalName],可进行数据仿真。
编写M脚本读取excel文本,数据写进txt文本
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
filename = '坡道重力加速度分量.xlsx';
[sig_data, sig_str] = xlsread(filename,2);
signalname = sig_str(1,:);
fid = fopen('asd.txt','w');
fprintf(fid,[signalname{1},'= [']);
L=length(sig_data(:,1));
data = sig_data(:,1);
for i=1:L
if i==L
fprintf(fid,[num2str(data(i))]);
break
end
fprintf(fid,[num2str(data(i)),' ']);
end
fprintf(fid,[']','\n']);
data = sig_data(:,2);
fprintf(fid,[signalname{2},'= [']);
for i=1:L
if i==L
fprintf(fid,[num2str(data(i))]);
break
end
fprintf(fid,[num2str(data(i)),' ']);
end
fprintf(fid,[']','\n']);
编写M脚本,将Matlab生成的源代码.c/.h文件移动到C工程文件夹里集成
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
% clc;
clear;
slprj_file = ('..\model\slprj\ert\_sharedutils\'); %生成的 slprj文件夹中存放需要复制的.c.h文件路径
dirdata = ('..\model\ASW_ert_rtw\');
% 获取所有的.c文件
files_list = dir(fullfile(slprj_file,'*.c'));
files_lists = {files_list.name};
% disp({files_list.name});
% 获取所有的.h文件
files_listh = dir(fullfile(slprj_file,'*.h'));
files_lisths = {files_listh.name};
% disp({files_listh.name});
code_File_Destination = ('..\ideproject\src\VCU\sharedutils');%复制的目标文件夹
code_File_DestinationC = ('..\ideproject\src\VCU\VCU_APP');
files_listC = dir(fullfile(dirdata,'*.c'));
files_listC = {files_listC.name};
files_listCs = files_listC{1};%使变量files_listCs类型为char
files_listH = dir(fullfile(dirdata,'*.h'));
files_listH = {files_listH.name};
for k=1:length(files_listH)
if (files_listH{k} ~= "rtmodel.h")
files_listHs = files_listH{k};
end
end
%删除目标文件夹下的.c/.h文件
delete([code_File_DestinationC,'\','*.c']);
delete([code_File_DestinationC,'\','*.h']);
delete([code_File_Destination,'\','*.c']);
delete([code_File_Destination,'\','*.h']);
%将生成的对应模型的C和H文件复制到\src\VCU_APP\VCU_APP文件夹中
APPPathC=fullfile(dirdata,files_listCs);
APPPathC=string(APPPathC);
APPPathH=fullfile(dirdata,files_listHs);
APPPathH=string(APPPathH);
disp(['************************','拷贝生成代码','************************']);
copyfile(APPPathC,code_File_DestinationC);
% prompt_message = ['将文件夹中的:',[dirdata,'\',files_listCs],'复制到文件夹:',code_File_DestinationC];
prompt_message = ['正在拷贝',files_listCs];
disp(prompt_message);
copyfile(APPPathH,code_File_DestinationC);
% prompt_message = ['将文件夹中的:',[dirdata,'\',files_listHs],'复制到文件夹:',code_File_DestinationC];
prompt_message = ['正在拷贝',files_listHs];
disp(prompt_message);
for item1 = 1:length(files_list)
copyfile([slprj_file,files_lists{item1}],code_File_Destination);
% prompt_message = ['将',slprj_file,'文件夹中的:',[slprj_file,files_lists{item1}],'复制到文件夹:',code_File_Destination];
prompt_message = ['正在拷贝',files_lists{item1}];
disp(prompt_message);
end
for item1 = 1:length(files_listh)
copyfile([slprj_file,files_lisths{item1}],code_File_Destination);
% prompt_message = ['将文件夹中的:',[slprj_file,files_lisths{item1}],'复制到文件夹:',code_File_Destination];
prompt_message = ['正在拷贝',files_lisths{item1}];
disp(prompt_message);
end
disp(['************************','拷 贝 完 成','************************']);
ReplaceASW();
clear;
SignalParameter();
编写M脚本,绘画出坡度路线
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
filename = '坡道重力加速度分量.xlsx'; %根据速度与时间和计算出的坡道,解出x和y轴的值
[ ] = xlsread(filename,4); %读取excel表中的x和y轴数据
L=length(sig_str);
for i=1:L
eval([sig_str{i},'=','sig_data(:,i);']);
end
a=0;b=0;
for i=1:1000
quiver(a,b,x(i),y(i)); %绘制x和y轴箭头图
hold on;
a=a+x(i);
b=b+y(i);
end
axis equal %x和y轴坐标刻度相同
axis tight %将坐标轴范围设置为等于数据范围
hold off;
clear('filename','sig_data','sig_str','L','i','a','b')