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

Matlab FFT分析结果不符预期且噪声过大,求排查方案

问题:FFT分析气温时序数据时低频峰值不明显,结果充满噪声

代码实现

close all;clc;clear all;

f=fopen ('sum_021223.txt'); 
Adata=cell2mat(textscan(f, '%f %f %f %f %f'));

time=Adata(:,5);
data = Adata;
data(:,5:end) = 0;

final=size(data,1);
data(1,1)=data(2,1);

testsum=sum(data,2);


Fs = .5;            % Sampling frequency                    
T = 1/Fs;             % Sampling period       
L = final;             % Length of signal
t = (0:L-1)*T;  
t=t';

Y=fft(testsum)

P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

f = Fs*(0:(L/2))/L;
% P1(1,1)=P1(2,1);

plot(f,P1) 
title("Single-Sided Amplitude Spectrum of X(t)")
xlabel("f (Hz)")
ylabel("|P1(f)|")

问题描述

  • 采样频率Fs设为0.5Hz(每2秒采样一次),共30530条数据(约17小时),目标是分析气温等数据随日期变化的规律,预期FFT结果低频段会出现峰值,但实际结果充满噪声。
  • 曾尝试将P1(1,1)设为等于P1(2,1),但改善效果不明显。

当前FFT结果:
FFT结果图

可能的问题及解决方向

1. 缺失数据预处理

气温这类时序数据通常带有直流分量(整体均值),会在FFT的0频点产生强峰值,掩盖其他低频信号。先对数据做去均值处理:

testsum = testsum - mean(testsum);

同时建议检查数据中的异常值(比如跳变点),统一做剔除或修正,避免噪声干扰。

2. 采样频率与实际数据间隔不匹配

代码中假设采样间隔是2秒,但需要确认输入数据的time列实际时间间隔是否均匀。如果时间间隔有波动,固定Fs会导致FFT失真。可以先计算平均时间间隔,再调整Fs:

time_diff = diff(time);
avg_interval = mean(time_diff);
Fs = 1/avg_interval;

3. 加窗减少频谱泄露

原始数据直接做FFT容易出现频谱泄露,导致噪声明显。用汉宁窗对数据加窗后再计算FFT:

window = hann(L);
Y = fft(testsum .* window);

4. 平滑频谱并聚焦低频段

  • 对频谱做滑动平均,降低噪声:
    smooth_P1 = movmean(P1, 5); % 可根据情况调整窗口大小
    plot(f, smooth_P1)
    
  • 限制x轴范围,聚焦低频区域(比如0到0.01Hz),更容易观察峰值:
    xlim([0 0.01])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:45:15