You need to enable JavaScript to run this app. 涡街主频计算中如何选择合适的linspace采样参数以获得正确结果
优惠活动
大模型
产品
解决方案
定价
更多

涡街主频计算中如何选择合适的linspace采样参数以获得正确结果

涡街升力信号主频提取的问题定位与linspace调整方案

输出0.0主频的直接原因

  • 未过滤FFT无效分量:FFT输出为对称结构,索引0对应直流分量,后半段为负频率。即使原信号无直流,截断、插值过程中引入的微小基线偏移,会让argmax优先拾取到直流分量(输出0.0)。
  • 频谱分辨率不足:当升力数据规模变化时,硬编码的N、Nev参数未同步调整,导致截断后的样本有效时长不足,主频峰值被噪声或直流分量掩盖。

升力数据规模增大时的linspace调整规则

linspace的核心作用是将原始升力序列重采样为等间隔序列(FFT的输入要求),调整时按以下步骤执行:

  • 明确有效稳定段的时间范围
    原代码用原始时间序列中点times[length]作为采样起点的逻辑,仅适用于前半段为启动无效段的场景。若数据规模增大,需先确认涡街稳定段的实际起始时间t_start、结束时间t_end,避免把启动瞬态或无效段纳入采样范围。
  • 匹配采样率与有效采样点数N
    N的取值需同时满足两个硬性要求:
    • 奈奎斯特采样约束:重采样的时间间隔dt = T_total/(N)(T_total = t_end - t_start)必须小于涡街最高预期频率的1/2,即dt < 1/(2*f_max_expected),避免频谱混叠。
    • 频谱分辨率约束:频谱分辨率Δf = 1/T_total,需远小于预期主频的1%~5%才能准确拾取峰值。同时优先取不超过原始稳定段实际采样点数的最大2的整数次幂(如2048/4096/8192),可大幅提升FFT运算效率。
  • linspace参数修正写法
    替换原硬编码的采样逻辑,避免间隔不均:
    # 示例:若已确认稳定段起点为原始时间序列中点
    t_start = times[length]
    t_end = times[-1]
    T_total = t_end - t_start
    # 计算原始稳定段的实际采样点数
    stable_original_num = len(times[times >= t_start])
    # 取不超过该值的最大2的整数次幂作为N
    N = 2 ** int(np.log2(stable_original_num))
    # endpoint=False保证采样间隔完全均匀,无端点重复误差
    t = np.linspace(t_start, t_end, N, endpoint=False)
    forcezint = np.interp(t, times, forcez)
    

配套修正(彻底避免主频输出错误)

完成linspace调整后,补充FFT后处理逻辑:

  • 先去除样本直流分量:forcezint = forcezint - np.mean(forcezint)
  • 仅在正频率区间拾取主频,排除直流与负频率分量:
    # 替换原Nev硬编码切片,若稳定段无前置瞬态可直接用全量forcezint
    sample = forcezint[Nev-1:]
    fourier = fftpack.fft(sample)
    dt = T_total / N
    frequencies = fftpack.fftfreq(sample.size, d=dt)
    # 保留0Hz以上的有效正频率区间
    positive_mask = frequencies > 0
    freq = frequencies[positive_mask][np.argmax(np.abs(fourier[positive_mask]))]
    

注意:若涡街信号无前置瞬态残留,可将Nev设为1,避免人为截断引入频谱泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 09:06:03