GNU Octave 中极短信号的频率分析

Frequency analysis of very short signal in GNU Octave

我在大约 2 毫秒的时间长度内记录了一些来自示波器的非常短的信号(50k-200k 样本)。这些是带有 ESD(静电放电)火花记录信号的声音信号。 我想获得该信号的一些频率数据,在接近声波的频率范围内(最高约 30kHz),时间分辨率尽可能高。

我已经尝试绘制频谱图(Octave 中的频谱图)来查看信号,但输出并不是很有用。使用 specgram( x, N, fs );,其中 x 是我的 fs 采样率信号,对于低 N 值,我收到从大约 500MHz 的非常高的频率开始的绘图,并且对于大 N,我获得了更好的频率分辨率值(如 2^12-13),但 window 太宽,我在整个信号长度上只收到 2 个频谱值。

我理解可能是specgram函数使用的傅里叶变换的局限性(其实我对信号分析了解不多)

是否有任何其他方法可以获取此类信号的某些频率(作为时间的函数)信息?我读过一些关于小波的东西,但是当我尝试使用信号包的 dwt 函数时,我收到了这个错误:

error: 'wfilters' undefined near line 51 column 14
error: called from
    dwt at line 51 column 12

即使这行得通,我也不确定我是否知道如何实际使用这些小波函数的输出...

要从如此高的采样率中获取音频信息,您需要获得一个足够长的样本向量,以包含至少几个完整的音频周期,例如许多 10 毫秒的连续样本,这些样本可能会或可能不会超过您的示波器可以收集的范围。为了合理地处理这些数据量,您可以对样本数据进行低通滤波以使其仅包含音频频率,然后将其重新采样到较低的采样率,但高于滤波器 cut-off 频率的两倍。然后您将得到一个更短的样本向量来为您的音频频谱分析提供 FFT。