You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中时间序列归零平移及ECG数据时段对比自动化实现

Matlab实现ECG时间序列对齐与多组时段自动化对比方案

我来帮你搞定这两个ECG数据处理的核心需求,下面分步骤给出可直接复用的代码和思路:

一、把时间序列平移至起始时间00:00:00.000

首先解决时间戳对齐问题,核心思路是把每个受试者的所有时间戳,减去该受试者数据的最早时间点,得到相对起始时间的时长数据,这样所有受试者的起始点就统一为0了。

实现步骤&代码

function aligned_data = align_time_to_zero(file_path)
    % 读取Excel文件,假设时间戳列的表头是'Timestamp'
    raw_data = readtable(file_path);
    
    % 先把时间戳转成Matlab的datetime类型(如果Excel里存的是文本,必须做这一步)
    if ~isdatetime(raw_data.Timestamp)
        % 这里的InputFormat要和你Excel里的时间格式匹配,比如示例的11:22:03:00对应HH:mm:ss:SSS
        raw_data.Timestamp = datetime(raw_data.Timestamp, 'InputFormat', 'HH:mm:ss:SSS');
    end
    
    % 找到该受试者数据的最早时间作为基准
    start_time = min(raw_data.Timestamp);
    
    % 计算相对时间,用duration类型存储,方便后续筛选时段
    raw_data.RelativeTime = raw_data.Timestamp - start_time;
    
    % 返回对齐后的数据表
    aligned_data = raw_data;
end

二、自动化多组时段对比流程

接下来构建一个灵活的自动化脚本,支持批量处理所有受试者数据,并且可以自定义任意对比规则(比如条件1前3分钟vs条件2同时段,或者条件1的4-8分钟vs自身前3分钟)。

实现思路

  1. 先把不同条件的受试者文件分文件夹存放(比如Condition1/和Condition2/),方便批量读取;
  2. 循环读取所有Excel文件,调用上面的时间对齐函数,把所有数据整理好;
  3. 定义对比规则,然后自动筛选指定时段的数据,完成统计或可视化对比。

完整自动化脚本

%% 1. 配置参数(根据你的实际情况修改)
condition_folders = {'./Condition1/', './Condition2/'}; % 不同条件的文件夹路径
% 定义对比规则:可以添加任意多组对比
compare_rules = [
    % 规则1:条件1前3分钟 vs 条件2前3分钟
    struct('group1', 1, 'time1_start', duration([0 0 0 0]), 'time1_end', duration([0 3 0 0]), ...
           'group2', 2, 'time2_start', duration([0 0 0 0]), 'time2_end', duration([0 3 0 0])), ...
    % 规则2:条件1的4-8分钟 vs 条件1的前3分钟
    struct('group1', 1, 'time1_start', duration([0 4 0 0]), 'time1_end', duration([0 8 0 0]), ...
           'group2', 1, 'time2_start', duration([0 0 0 0]), 'time2_end', duration([0 3 0 0]))
];

%% 2. 批量读取并对齐所有受试者数据
all_subjects = struct();
for cond_idx = 1:length(condition_folders)
    folder = condition_folders{cond_idx};
    file_list = dir(fullfile(folder, '*.xlsx')); % 获取文件夹下所有Excel文件
    
    for file_idx = 1:length(file_list)
        file_path = fullfile(folder, file_list(file_idx).name);
        aligned_data = align_time_to_zero(file_path);
        
        % 给每个受试者数据命名,格式:CondX_受试者文件名(去掉后缀)
        subject_name = regexprep(file_list(file_idx).name, '.xlsx', '');
        all_subjects.(['Cond', num2str(cond_idx), '_', subject_name]) = aligned_data;
    end
end

%% 3. 执行对比分析
for rule_idx = 1:length(compare_rules)
    rule = compare_rules(rule_idx);
    fprintf('\n=== 对比规则 %d 结果 ===\n', rule_idx);
    
    % 提取组1的指定时段数据
    group1_subjects = fieldnames(all_subjects);
    group1_subjects = group1_subjects(contains(group1_subjects, ['Cond', num2str(rule.group1)]));
    group1_hr = [];
    for subj_idx = 1:length(group1_subjects)
        subj_data = all_subjects.(group1_subjects{subj_idx});
        % 筛选出在指定时段内的数据
        time_mask = subj_data.RelativeTime >= rule.time1_start & subj_data.RelativeTime <= rule.time1_end;
        group1_hr = [group1_hr; subj_data.HeartRate(time_mask)];
    end
    
    % 提取组2的指定时段数据
    group2_subjects = fieldnames(all_subjects);
    group2_subjects = group2_subjects(contains(group2_subjects, ['Cond', num2str(rule.group2)]));
    group2_hr = [];
    for subj_idx = 1:length(group2_subjects)
        subj_data = all_subjects.(group2_subjects{subj_idx});
        time_mask = subj_data.RelativeTime >= rule.time2_start & subj_data.RelativeTime <= rule.time2_end;
        group2_hr = [group2_hr; subj_data.HeartRate(time_mask)];
    end
    
    % 输出统计结果(这里以心率为例,你可以换成RR interval或其他指标)
    fprintf('组1 心率均值: %.2f bpm, 标准差: %.2f\n', mean(group1_hr), std(group1_hr));
    fprintf('组2 心率均值: %.2f bpm, 标准差: %.2f\n', mean(group2_hr), std(group2_hr));
    
    % 可选:绘制箱线图直观对比
    figure('Position', [100 100 800 500]);
    boxplot([group1_hr; group2_hr], ...
            {'Group1', 'Group2'}, 'Title', sprintf('心率对比 (规则%d)', rule_idx));
    ylabel('心率 (bpm)');
    grid on;
end

注意事项

  • 如果你的Excel时间戳格式不是HH:mm:ss:SSS,一定要修改datetime转换时的InputFormat参数(比如带日期的话用yyyy-MM-dd HH:mm:ss.SSS);
  • compare_rules可以无限扩展,比如添加条件1的10-15分钟vs条件2的10-15分钟,只需按照现有格式新增一个struct即可;
  • 如果数据量很大,建议把对齐后的数据保存成.mat文件,下次直接读取,不用重复处理Excel,提升效率。

内容的提问来源于stack exchange,提问作者Glu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:33:29