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

解决FFT低频滤波时长对应变上升段信号处理结果影响的方法

问题描述

图1所示的应变时域数据存在显著高频噪声,重点关注图2中幅值可截断为1e4的应变上升阶段。采用FFT基低频滤波时,发现滤波区域的时长选择对滤波结果影响显著,该如何解决?

原始数据图示

图1:原始应变时域数据
图2:应变上升阶段数据

原始数据文件

信号数据存储于20250310signal1.mat文件中

原始滤波代码

clc;clear;close all;
%% load data
load('20250310signal1.mat');
t=ttt';
y=yyy';
%% 
fs = fix(1/(t(2)-t(1))); 
n = length(y);           
Y = fft(y);              
f = (0:n-1)*(fs/n);     
%% Low-pass filtering (retain DC and low-frequency components)
cutoff = 12500;  % cut-off frequency
Y_filtered = Y; 
Y_filtered(f > cutoff) = 0;  
%% Inverse FFT to obtain filtered signal
y_filtered = ifft(Y_filtered, 'symmetric'); 
%% Plot results
figure;
plot(t, y);hold on;
plot(t, y_filtered);
xlabel('Time (s)');
ylabel('Amplitude');
legend('data','filtered data')
解决方案

FFT基滤波对时长敏感的核心原因是纯FFT硬截断会引发频谱泄漏,且全局滤波无法适配局部信号特征,可通过以下方案解决:

1. 分段滤波+窗函数抑制泄漏

针对关注的上升阶段单独处理,加窗后再做FFT滤波,减少边界效应:

clc;clear;close all;
load('20250310signal1.mat');
t=ttt';
y=yyy';
fs = fix(1/(t(2)-t(1))); 

% 定位应变上升阶段(根据图2实际范围调整时间阈值)
t_start = 0.002;
t_end = 0.005;
idx = t >= t_start & t <= t_end;
y_segment = y(idx);
t_segment = t(idx);
n_segment = length(y_segment);

% 加汉宁窗抑制频谱泄漏
window = hann(n_segment);
y_windowed = y_segment .* window;

% FFT滤波
Y = fft(y_windowed);
f = (0:n_segment-1)*(fs/n_segment);
cutoff = 12500;
Y_filtered = Y;
Y_filtered(f > cutoff) = 0;
y_filtered_segment = ifft(Y_filtered, 'symmetric');

% 恢复窗函数对幅值的影响
y_filtered_segment = y_filtered_segment ./ window;

% 绘制结果
figure;
plot(t_segment, y_segment, 'b', t_segment, y_filtered_segment, 'r');
xlabel('Time (s)');ylabel('Amplitude');
legend('原始上升段数据','滤波后数据');

2. 用FIR/IIR滤波器替代纯FFT截断

FIR滤波器能实现更平滑的频率响应,避免FFT硬截断的振铃效应,对时长敏感度更低:

clc;clear;close all;
load('20250310signal1.mat');
t=ttt';
y=yyy';
fs = fix(1/(t(2)-t(1))); 
cutoff = 12500;

% 设计FIR低通滤波器(阶数越高过渡带越窄)
order = 100;
b = fir1(order, cutoff/(fs/2), 'low');

% 用filtfilt滤波避免相位偏移
y_filtered = filtfilt(b, 1, y);

% 绘制上升阶段结果
t_start = 0.002;
t_end = 0.005;
idx = t >= t_start & t <= t_end;
figure;
plot(t(idx), y(idx), 'b', t(idx), y_filtered(idx), 'r');
xlabel('Time (s)');ylabel('Amplitude');
legend('原始上升段数据','滤波后数据');

3. 自适应滤波追踪时变特征

若上升阶段频率特征随时间变化,用LMS自适应滤波自动跟踪信号,无需固定滤波时长:

clc;clear;close all;
load('20250310signal1.mat');
t=ttt';
y=yyy';
fs = fix(1/(t(2)-t(1))); 

% 构造参考信号(用原始信号延迟模拟噪声参考)
delay = 5;
x = [zeros(delay,1); y(1:end-delay)];

% LMS自适应滤波设置
mu = 0.001; % 收敛步长
order = 30; % 滤波器阶数
[y_filtered, ~] = lms(y, x, order, mu);

% 绘制上升阶段结果
t_start = 0.002;
t_end = 0.005;
idx = t >= t_start & t <= t_end;
figure;
plot(t(idx), y(idx), 'b', t(idx), y_filtered(idx), 'r');
xlabel('Time (s)');ylabel('Amplitude');
legend('原始上升段数据','滤波后数据');

核心思路总结

  • 优先针对关注的上升阶段局部数据处理,避免全局FFT滤波的适配问题
  • 用窗函数或FIR/IIR滤波器,解决FFT硬截断带来的频谱泄漏和振铃问题
  • 信号时变特征明显时,用自适应滤波替代固定参数的频域滤波

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:46:12