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

如何用for循环等基础语句在Matlab中实现序列x按整数因子M下采样

Matlab手动实现downsample下采样的多种方案

你现有写的for循环逻辑是正确的,核心是按固定间隔M从原始信号中选取采样点,缺点是采用动态拼接数组的方式,处理长信号时效率较低,以下是不同的实现方式:

1. 优化后的for循环版本(预先分配内存)

通过提前给输出数组分配内存空间,大幅提升长序列处理效率:

% x为输入信号,M为下采样倍数
len_y = ceil(length(x)/M);
y = zeros(1, len_y);
count = 1;
for i = 1:M:length(x)
    y(count) = x(i);
    count = count + 1;
end

2. 带if判断的实现版本

遍历所有信号点,通过取模判断是否符合采样间隔要求,逻辑更直观:

% x为输入信号,M为下采样倍数
y = [];
for i = 1:length(x)
    % i-1是为了对齐第一个采样点的索引为1的规则
    if mod(i-1, M) == 0
        y = [y, x(i)];
    end
end

如果需要提升该版本效率,也可以参考第一种方案预先分配输出数组的内存

3. 索引切片实现(无循环,最高效)

Matlab原生支持数组按间隔索引,不需要写循环,代码最简洁且性能最优,等效于默认相位的downsample(x,M)函数:

y = x(1:M:end);

如果需要匹配downsample函数的相位参数phase(取值范围为0到M-1),修改起始索引即可:

% 等效于 downsample(x, M, phase)
y = x(phase+1:M:end);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:57:00