matlab常用函数之数据读取&优化程序运行时间(2)

如何读取数据程序进行优化?

1、预先为变量分配内存;

(1)原始程序如下:

程序通过fgetl()逐行读取数据,并对数据进行处理,代码如下:

profile on
filename = 'nav_data20180129000742-3.5Hr.txt';
%单位换算
d2r=pi/180;
temp=d2r/3600;
t=[];
freq=100;
j=0; 
fid=fopen(filename);
while 1
    j=j+1;
    tline = fgetl(fid);
    if tline==-1, break, end
    nav_data=str2num(tline);
        %累计时间
    t=[t;j*1/freq];
    %xyz三轴陀螺仪rad/s
    wb(j,1) = nav_data(1,6)*temp;
    wb(j,2) = nav_data(1,7)*temp;
    wb(j,3) = nav_data(1,8)*temp;
    %xyz三轴陀螺仪温度 
    gyro_tem(j,1)= nav_data(1,9);
    gyro_tem(j,2)= nav_data(1,10);
    gyro_tem(j,3)= nav_data(1,11);
    %xyz三轴加速度计 m/s^2
    fb(j,1) =  nav_data(1,12);
    fb(j,2) =  nav_data(1,13);
    fb(j,3) =  nav_data(1,14);
    %xyz三轴加速度计温度
    acc_tem(j,1)=  nav_data(1,15);
    acc_tem(j,2)=  nav_data(1,16);
    acc_tem(j,3)=  nav_data(1,17);

end
fclose(fid);
%保存数据
FOG.t=t;
FOG.wb=wb;
FOG.fb=fb;
FOG.freq=freq;
FOG.gyro_tem=gyro_tem;
FOG.acc_tem=acc_tem;
save( 'FOG.mat','FOG')
profile viewer

实际运行时间为:

(2)修改后程序如下:

clc;    %清空命令行窗口
clear;  %清空工作区
close all;  
%% read data
profile on
filename = 'nav_data20180129000742-3.5Hr.txt';
%单位换算
d2r=pi/180;
temp=d2r/3600;
freq=100;
ts=1/freq;
j=0; 
fid=fopen(filename);
%对变量预先分配内容
len=5*100*3600; %采样率100HZ,按照5小时预先分配
t=zeros(len,1);
wb=zeros(len,3);
gyro_tem=zeros(len,3);
fb=zeros(len,3);
acc_tem=zeros(len,3);
while 1
    j=j+1;
    tline = fgetl(fid);
    if tline==-1, break, end
    nav_data=str2num(tline);
        %累计时间
%     t=[t;j*1/freq];
    t(j,1)=j*ts;
    %xyz三轴陀螺仪rad/s
    wb(j,1) = nav_data(1,6)*temp;
    wb(j,2) = nav_data(1,7)*temp;
    wb(j,3) = nav_data(1,8)*temp;
    %xyz三轴陀螺仪温度 
    gyro_tem(j,1)= nav_data(1,9);
    gyro_tem(j,2)= nav_data(1,10);
    gyro_tem(j,3)= nav_data(1,11);
    %xyz三轴加速度计 m/s^2
    fb(j,1) =  nav_data(1,12);
    fb(j,2) =  nav_data(1,13);
    fb(j,3) =  nav_data(1,14);
    %xyz三轴加速度计温度
    acc_tem(j,1)=  nav_data(1,15);
    acc_tem(j,2)=  nav_data(1,16);
    acc_tem(j,3)=  nav_data(1,17);

end
fclose(fid);
%% 根据数据实际长度,进行裁剪
t(j:end,:)=[];
wb(j:end,:)=[];
gyro_tem(j:end,:)=[];
fb(j:end,:)=[];
acc_tem(j:end,:)=[];
%保存数据
FOG.t=t;
FOG.wb=wb;
FOG.fb=fb;
FOG.freq=freq;
FOG.gyro_tem=gyro_tem;
FOG.acc_tem=acc_tem;
save( 'FOG.mat','FOG')
profile viewer

程序运行时间:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值