rhyme云 2022-06-29 11:37 采纳率: 70.6%
浏览 30
已结题

matlab在excel中的提取代码解读

能不能帮忙解答一下这段代码,这段代码是提取excel表格中两列数据的,第一列是时间,第二列是速度

img

clear
clc

filename = 'Impulse_TimeSignal.xlsx';
name= {'Impulse_low','Impulse_high'};
for i = 1:2
% read data
sheet = i;
vel = xlsread(filename,sheet); % low frequency
t = vel(:,1);
dt = t(2)-t(1);
vel(:,[1 2]) = [];

acc = diff(vel)/dt;

% calculate acceleration
outAcc = zeros(size(vel));
outAcc(1) = 0; % initial value

for k = 2:length(t)
    outAcc(k) = 2*acc(k-1)-outAcc(k-1);
end

% calculate vel, disp
outVel = cumtrapz(t, outAcc);
outDisp = cumtrapz(t, outVel);

% output
figure
plot(t(1:1000), outVel(1:1000))
hold on
plot(t(1:1000), vel(1:1000),'--')

Accl = [t,outAcc]';
fid = fopen([name{i},'.txt'], 'wt');
fprintf(fid, '%12.8f %12.8f\n', Accl);
fclose(fid);

end

  • 写回答

2条回答 默认 最新

  • 胸毛男 2022-06-29 12:20
    关注
    clear
    clc
    
    filename = 'Impulse_TimeSignal.xlsx';
    name= {'Impulse_low','Impulse_high'};
    for i = 1:2
    % read data
    sheet = i;
    vel = xlsread(filename,sheet); % low frequency
    t = vel(:,1);   %取出了内容的所有行,第一列,读入了时间那列
    dt = t(2)-t(1);  %计算个时间间隔
    vel(:,[1 2]) = [];  %把vel所有行,1,2列都清空,感觉就是vel清空了 它就两列吧
    
    acc = diff(vel)/dt;  计算加速度   diff(X), for a vector X, is [X(2)-X(1)  X(3)-X(2) ... X(n)-X(n-1)]. 每两个算的差值。都除以dt
     
    % calculate acceleration
    outAcc = zeros(size(vel));    %构造一个全是0的矩阵,行数列数按照vel的行数列数
    outAcc(1) = 0; % initial value  %让outAcc第一个元素是0,这多余啊,上一步必然全是零
     
    for k = 2:length(t)
        outAcc(k) = 2*acc(k-1)-outAcc(k-1);    %outAcc第一个是0,而之后是acc对应位置的2倍减去对应位置上一个值
    end
     
    % calculate vel, disp
    outVel = cumtrapz(t, outAcc);  累积梯形数值积分。输出加速度与时间的积分,是在t秒时刻的输出速度
    outDisp = cumtrapz(t, outVel); 输出速度与时间的积分是输出的瞬时路程
     
    % output
    figure
    plot(t(1:1000), outVel(1:1000))   %画出输出速度与时间的关系曲线
    hold on
    plot(t(1:1000), vel(1:1000),'--')  %画出速度与时间的关系曲线
     
    Accl = [t,outAcc]';    %时间与输出加速度
    fid = fopen([name{i},'.txt'], 'wt'); %以‘Impulse_low'或'Impulse_high'为名字,存到一个txt之中  第一次循环是Impulse_low.txt。第二次叫Impulse_high.txt
    fprintf(fid, '%12.8f %12.8f\n', Accl);  %保存时间与输出加速度  整数部分12位有效,小数部分8位
    fclose(fid);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 已采纳回答 6月29日
  • 请详细说明问题背景 6月29日
  • 创建了问题 6月29日

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答