Matlab逻辑索引问题:不同采样率信号的掩码处理
解决Matlab中不同采样率信号的掩码处理问题
问题说明
- 现有两个时间信号
y1(t1)和y2(t2),t1的采样率远高于t2 - 需求:基于
y2的值对y1进行掩码处理——当y2为0时,将对应时间区间内的y1全部置0,最终得到与t1同时间轴的信号y3 - 遇到的问题:由于两者采样率不同,无法直接匹配时间区间完成掩码操作
初始代码
t1 = 0:0.01:10; y1 = sin(t1*10); % plot(t1, y1) t2 = 0:1:10; y2 = t2.*[0 1 1 0 0 1 1 1 1 0 0]; % stairs(t2, y2) plot(t1, y1) hold on stairs(t2, y2) hold off % I need a y3 with time t1. % y3 is zero when y2 is zero. % y3 = ???
当前信号展示

预期效果

解决方案
通过插值将低采样率的y2映射到高采样率t1的时间轴,采用previous插值规则(每个t1时刻取其最近的前一个t2时刻的y2值),确保时间区间的对应关系,再生成掩码对y1进行逐点处理。
最终实现代码
t1 = 0:0.01:10; y1 = sin( t1 * 10 ); t2 = 0:1:10; y2 = t2 .* [ 0 1 1 0 0 1 1 1 1 0 0 ]; % 将y2插值到t1时间轴,保持区间对应 y2_us = interp1( t2, y2, t1,'previous' ); % 生成掩码并处理y1得到y3 y3 = y1 .* ( y2_us > 0 ); % 绘图展示结果 plot( t1, y1 ) hold on stairs( t2, y2 ) plot( t1, y3, 'LineWidth', 4, 'Color', [0, 0.39, 0] ) hold off
最终效果展示

内容的提问来源于stack exchange,提问作者Dr. Manuel Kuehner
相关产品推荐
相关产品推荐

