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轴的值 [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')