工作信号频率示例?

信息处理 fft
2022-02-16 10:50:25

在过去的几个月里,我一直在尝试进行信号转换和过滤。这有点困难,但我一直在进步。

我想知道是否有人有任何简单的示例来显示加载波形文件,编辑该文件的音量和频率,并将其重新输出到文件?我已经达到了音量,但我无法编辑频率。

我认为通过使用 FFT,我可以直接访问声音文件的频率。那是不正确的吗?我记得看过频率箱等,但我看不出它与波形文件有何联系。

我知道这听起来可能很复杂,我不想要求太多,但是有人可以发布或链接到示例吗?这真的会帮助我。

我正在使用 Python,Windows 64 位。我已经将 Scipy 和 NumPy 用于 FFT 和波形文件输入/输出。

我希望基本上能够通过代码对声音进行低通或高通滤波,以及能够读取每个样本中的频率数据(即查看样本的高音或低音)。

1个回答

正如您所观察到的,瞬时信号幅度是一个易于理解的一维量,其平均绝对值与感知响度松散相关,并且可以通过将信号乘以常数来轻松更改。

频率是一个非常不同的事情。如果我们生活在一个音频信号由持续的纯音组成的世界中,那么问“这个声音的频率是多少?”是有意义的。但事情更复杂:

  • 静止的语音或音乐信号可以描述为纯音的总和。因此,问“这个特定频率的信号幅度是多少?”更有意义。这就是我们查看频谱的原因 - 将信号幅度显示为频率函数的图表。请注意,频率不是绘制的数量,它是轴!x
  • 语音或音乐信号不是静止的:信号的某些分量随时间衰减或被调制,一些分量出现......因此,问“在这个特定频率和特定时间范围内的信号幅度是多少?”就更有意义了? . 这就是为什么我们通常在音频分析中看到一种称为“频谱图”的表示 - 将测量的信号能量显示为时间和频率的函数(再次注意,频率是轴,而不是测量量)。
  • 在您的一条评论中,您说“以及能够读取每个样本中的频率数据”。频率是一种变化率,要观察变化,我们需要一组样本——对单个样本进行任何频率分析根本没有意义,如果你使用傅里叶分析(这只是其中一种方法估计来自信号的正弦波总和),您将需要越来越多的样本才能在频率轴上获得越来越精确的分辨率。但请记住,声音会随着时间而变化,执行傅里叶变换会丢弃时序信息(两个同时出现的 100 Hz 和 300 Hz 音调的幅度谱与 100Hz 音调的频谱相同,随后是 300Hz 音调) . 因此,如果你关心事件的时间位置,您将需要对信号切片执行分析,在输入信号的重叠块上计算 FFT - 这称为短期傅里叶变换 (STFT)。您必须在这里处理分辨率问题 - 窗口越小,时间轴上的精度越高,频率轴上的精度越低。分析窗口越大,时间轴上的精度越低,频率轴上的精度越高。再一次地,请注意频率不是您估计的 - 您的 STFT 只是在回答“在这个特定频率范围和这个特定时间范围内的信号能量是多少?”这个问题。必须在这里处理分辨率问题 - 窗口越小,时间轴上的精度越高,频率轴上的精度越低。分析窗口越大,时间轴上的精度越低,频率轴上的精度越高。再一次地,请注意频率不是您估计的 - 您的 STFT 只是在回答“在这个特定频率范围和这个特定时间范围内的信号能量是多少?”这个问题。必须在这里处理分辨率问题 - 窗口越小,时间轴上的精度越高,频率轴上的精度越低。分析窗口越大,时间轴上的精度越低,频率轴上的精度越高。再一次地,请注意频率不是您估计的 - 您的 STFT 只是在回答“在这个特定频率范围和这个特定时间范围内的信号能量是多少?”这个问题。

我希望这些能让你意识到没有音频信号的“频率”这样的东西。频率是一个轴,“我们看事物的地方”,而不是一个测量量,“我们测量什么”。

请注意,有一些与频率齐次的一维量(因此以 Hz 表示),可用于表征静止(稳定)声音。对于通用音频或音乐,这些数量会随时间而变化:

  • 基频,是声音周期的倒数。它与声音的感知音高(音符)有关。对于非周期性声音,这个量是未定义的。音高变换算法将改变这个数量,使录音听起来好像在音阶上播放/唱得更高或更低。
  • 滚降频率是包含声音能量的给定分数(例如 95%)的频率。这个量会受到低通/高通滤波的影响,使录音声音“更亮”或“更暗”。它是声音感知音色的众多维度之一。

也许其中一些是您真正关心的数量?

关于 FFT 的最后一句话 - 它是信号处理版本中的锤子,“如果你只有一把锤子,那么一切看起来都像钉子”。它是一个非常有用的工具,但它不是最适合许多音频信号处理/分析问题的工具,而且它通常仅用作中间处理或计算步骤。特别是,对于您可能感兴趣的一些问题:

  • 估计基频可能涉及 FFT,但由于“缺少 f0”现象(信号可能被认为是 263Hz C3 音符,在该频率没有能量),因此不适合查看频谱. 不要错误地试图通过查看信号频谱中的峰值来估计信号的音高。
  • 计算 FFT、弄乱数字并执行逆 FFT 是过滤信号的糟糕方法。这应该通过数字滤波器来完成,在scipy.signal.lfilter. 您可以在此处找到计算各种音乐上有用的二阶滤波器的 IIR 滤波器系数的公式