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

先导入采集的MF4格式的数据,选择要观察的数据再导出成.mat文件

2、编写m脚本读出挑选出来的数据

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博客

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文件

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文本

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工程文件夹里集成

% 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脚本,绘画出坡度路线

filename = '坡道重力加速度分量.xlsx';            %根据速度与时间和计算出的坡道,解出x和y轴的值
[sig_data, sig_str] = 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')