如何在MATLAB中创建100点移动平均滤波器并与686个数据点卷积后保持同长?
MATLAB实现100点移动平均滤波并保持数据长度一致
步骤1:创建100点移动平均滤波器
移动平均滤波器的核心是对窗口内数据取等权平均,直接生成权重向量即可:
window_size = 100; ma_filter = ones(1, window_size) / window_size;
ones(1,100)生成长度为100的全1行向量,除以窗口大小后,每个元素权重为1/100,符合移动平均的计算逻辑。
步骤2:卷积时匹配原数据长度(686点)
假设你的原始数据存在变量raw_data中(长度为686),使用conv函数时指定第三个参数为'same',就能让输出滤波数据的长度与输入完全一致:
filtered_data = conv(raw_data, ma_filter, 'same');
'same'参数会自动截取卷积结果的中心段,使其长度等于输入数据的长度,刚好覆盖你的686个数据点需求。
步骤3:绘制原始数据与滤波结果
用plot函数对比展示两者:
plot(raw_data, 'b-', 'DisplayName', '原始数据'); hold on; plot(filtered_data, 'r-', 'DisplayName', '100点移动平均滤波数据'); legend; xlabel('数据点索引'); ylabel('数值'); title('原始数据与滤波结果对比'); hold off;
额外注意事项
- 如果原始数据是列向量,需调整滤波器维度匹配:
ma_filter = ones(window_size, 1) / window_size; % 列向量滤波器 filtered_data = conv(raw_data, ma_filter, 'same'); - 若需要无相位延迟的滤波效果,可替换为
filtfilt函数(双向卷积),同样支持'same'参数保持长度一致。
内容的提问来源于stack exchange,提问作者May
相关产品推荐
相关产品推荐

