1. 信号处理的数学基础

1.1 数字信号表示

data = fread(fid, 'float32');
  • 数学原理:连续信号 x ( t ) x(t) x(t) 经过采样变成离散信号 x [ n ] = x ( n T s ) x[n] = x(nT_s) x[n]=x(nTs)
  • 其中 T s = 1 / f s T_s = 1/f_s Ts=1/fs 是采样周期, f s f_s fs 是采样率
  • 这里读取的是已经数字化的振动信号序列

1.2 去除直流分量

data = data - mean(data);
  • 数学原理
    x ˉ = 1 N ∑ n = 0 N − 1 x [ n ] \bar{x} = \frac{1}{N}\sum_{n=0}^{N-1} x[n] xˉ=N1n=0N1x[n]
    x a c [ n ] = x [ n ] − x ˉ x_{ac}[n] = x[n] - \bar{x} xac[n]=x[n]xˉ
  • 物理意义:去除信号的直流偏置,只保留交流成分
  • 原因:振动信号关心的是变化量,不是绝对位置

2. 傅里叶变换分析

2.1 离散傅里叶变换(DFT)

Y = fft(data, nfft);
  • 数学公式
    X [ k ] = ∑ n = 0 N − 1 x [ n ] ⋅ e − j 2 π k n / N X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j2\pi kn/N} X[k]=n=0N1x[n]ej2πkn/N
    其中 k = 0 , 1 , . . . , N − 1 k = 0, 1, ..., N-1 k=0,1,...,N1

  • 物理意义:将时域信号分解为不同频率的正弦波组合

2.2 频率向量计算

f = (0:nfft-1) * fs / nfft;
  • 数学原理
    • 频率分辨率: Δ f = f s N F F T \Delta f = \frac{f_s}{N_{FFT}} Δf=NFFTfs
    • 第k个频率分量: f k = k ⋅ Δ f = k ⋅ f s N F F T f_k = k \cdot \Delta f = k \cdot \frac{f_s}{N_{FFT}} fk=kΔf=kNFFTfs
  • 示例:若 f s = 1000 f_s = 1000 fs=1000 Hz, N F F T = 1024 N_{FFT} = 1024 NFFT=1024,则 Δ f = 0.977 \Delta f = 0.977 Δf=0.977 Hz

3. 功率谱密度(PSD)计算

3.1 PSD计算公式

PSD = abs(Y).^2 / (fs * nfft);
  • 数学原理
    P S D [ k ] = ∣ X [ k ] ∣ 2 f s ⋅ N F F T PSD[k] = \frac{|X[k]|^2}{f_s \cdot N_{FFT}} PSD[k]=fsNFFTX[k]2

  • 单位 信号单位 2 / Hz \text{信号单位}^2/\text{Hz} 信号单位2/Hz(功率密度)

3.2 单边谱转换

PSD = PSD(1:nfft/2+1);
PSD(2:end-1) = 2 * PSD(2:end-1);
  • 数学原理
    • 实信号的FFT具有共轭对称性: X [ k ] = X ∗ [ N − k ] X[k] = X^*[N-k] X[k]=X[Nk]
    • 单边谱包含全部功率信息,需要将负频率的功率加到正频率上
    • 除了DC分量和Nyquist频率,其他频率分量要乘以2

4. 频谱特征提取

4.1 主频率识别

[~, peak_idx] = max(PSD(2:end));
main_freq = f(peak_idx + 1);
  • 数学意义:找到功率最大的频率分量
  • 物理意义:通常对应机械系统的主要振动频率(如转频)

4.2 谱质心计算

centroid = sum(f_col .* PSD_col) / sum(PSD_col);
  • 数学公式
    f c e n t r o i d = ∑ k f k ⋅ P S D [ k ] ∑ k P S D [ k ] f_{centroid} = \frac{\sum_{k} f_k \cdot PSD[k]}{\sum_{k} PSD[k]} fcentroid=kPSD[k]kfkPSD[k]

  • 物理意义

    • 类似于"重心"概念,表示频谱能量的集中位置
    • 谱质心高→高频成分多(尖锐声音)
    • 谱质心低→低频成分多(沉闷声音)

5. 信号参数的物理意义

5.1 采样定理

  • Nyquist定理 f s > 2 f m a x f_s > 2f_{max} fs>2fmax
  • 最高可分析频率: f N y q u i s t = f s / 2 f_{Nyquist} = f_s/2 fNyquist=fs/2

5.2 频率分辨率与时间长度

  • 频率分辨率: Δ f = 1 T \Delta f = \frac{1}{T} Δf=T1,其中 T T T 是信号时长
  • 时频不确定性原理: Δ t ⋅ Δ f ≥ 1 4 π \Delta t \cdot \Delta f \geq \frac{1}{4\pi} ΔtΔf4π1

6. 可视化解释

6.1 对数坐标图

semilogx(f, 10*log10(PSD));
  • 分贝转换 P S D d B = 10 log ⁡ 10 ( P S D ) PSD_{dB} = 10\log_{10}(PSD) PSDdB=10log10(PSD)
  • 优点
    • 更好地显示大动态范围的数据
    • 人耳对声音的感知是对数的

6.2 实际应用示例

假设测量一个转速为30 Hz的电机振动:

  • 基频:30 Hz(1倍频)
  • 谐波:60 Hz(2倍频)、90 Hz(3倍频)等
  • 谱质心可能在 50-100 Hz 范围,表示能量分布

FFT和单边谱的关系

1. FFT的对称性

当输入信号是实数时(如你的振动信号),FFT结果具有共轭对称性

  • X[k] = X*[N-k](其中*表示共轭)
  • 这意味着频谱的后半部分是前半部分的镜像

2. 频率点的分布

对于N点FFT:

完整频谱: 0, fs/N, 2fs/N, ..., (N-1)fs/N
对应索引: 0, 1,    2,    ..., N-1

3. 单边谱的构造

由于对称性,我们只需要保留:

  • DC分量 (k=0)
  • 正频率部分 (k=1 到 k=N/2-1)
  • 奈奎斯特频率 (k=N/2,当N为偶数时)

所以单边谱的点数 = 1 + (N/2-1) + 1 = N/2 + 1

4. 代码验证

让我用你的代码验证一下:让我用更简单的方式解释:

具体例子

假设你有8点FFT:

完整FFT: [0, 1, 2, 3, 4, 5, 6, 7] (8个点)
         对应频率: [0, fs/8, 2fs/8, 3fs/8, 4fs/8, 5fs/8, 6fs/8, 7fs/8]

由于对称性:

  • 点5,6,7是点3,2,1的镜像
  • 我们只需要保留: [0, 1, 2, 3, 4] (5个点)
  • 5 = 8/2 + 1 ✓

在你的代码中

nfft = 2^12;        % 4096点FFT
PSD = PSD(1:nfft/2+1);   % 保留前2049个点
f = f(1:nfft/2+1);       % 对应的频率向量

这样做的原因是:

  1. 节省存储空间:只存储一半的数据
  2. 物理意义清晰:只显示0到奈奎斯特频率的范围
  3. 避免冗余:消除镜像频率分量
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐