【问题标题】:Reducing one frequency in song降低歌曲中的一个频率
【发布时间】:2020-02-19 08:31:30
【问题描述】:

如果没有特定频率,我如何输入和输出同一首歌曲?

根据我目前的研究,这首歌应该被分解成chucks,FFT它,降低目标频率,iFFT它,然后将块拼接在一起。但是,我不确定这是否是正确的方法,如果是,我将如何从音频转换为 FFT 输入(似乎是矢量矩阵),如何降低目标频率,以及如何转换回来从 FFT 输出到音频,以及如何重新拼接。

作为背景,我爷爷喜欢音乐。然而,最近他不能听它,因为他对歌曲中的某些频率变得过敏。我是一名高中生,有一些背景编码,并且刚刚进入算法工作,因此使用这些算法的经验很少。如果这些是基本问题,请原谅;任何指针都会有所帮助。

编辑:到目前为止,我已经了解了 fft 的基本前提(通过基本的 3blue1brown yt 视频等)并且可以通过 scipy/numpi 获得它,并弄清楚了如何从 youtube 转换为 0.25 秒的块wav 格式。

【问题讨论】:

  • 请添加您查阅的参考资料和您尝试过的代码(如果有)。
  • 使用傅里叶变换 (FT),降低所需频率并将其以正确的方式转换回接缝。
  • 如果你使用 FFT,为了避免 FFT 块的边界问题,你可以使用一种“重叠保存”的方法。如果您只想降低较低或较高的频率,一个简单的 FIR 滤波器(如 Kaiser 滤波器)就可以做到。您应该提供有关您想取消的这些频率的更多信息。另请注意,有一个 信号处理 SE 站点,已经提出过此类问题
  • @Happy-Monad 更新了我到目前为止所做的事情
  • 这是一篇很棒的文章,您可能会感兴趣 willdrevo.com/fingerprinting-and-audio-recognition-with-python 以及这本免费的书 greenteapress.com/thinkdsp/thinkdsp.pdf

标签: algorithm signal-processing fft


【解决方案1】:

你的方法是对的。

关于子问题:
from the audio to FFT input - 将音频样本分配给复信号的实部,虚部为零

how to reduce the target frequencies - 将所需频率附近的 FFT 结果乘以平滑(以减少伪影)函数,该函数在该频率处变为零并达到 1.0 一些样本间隔

how to convert back - 只需进行逆 FFT(不要忘记像 1/N 这样的比例乘数)并将实部复制到音频通道中


还可以考虑使用更简单的数字滤波 - 带阻或 陷波 滤波器。

随意发现example1example2
(计算参数可能需要对DSP有所了解)

【讨论】:

  • 我明白了。对于数字 1,我将如何实际获取音频并将其分配给复杂信号的实部?我试着用谷歌搜索它,但似乎什么也没出现。
  • 我只处理 wav 文件。您可能想要使用音频流 - 所以拦截是另一个问题,它取决于操作系统和其他细节。
  • 我正在处理 wav 文件,但我仍然无法理解如何将它分配给复杂信号的实部。
  • 查找左通道或右通道的数据块 - 它类似于 Int16 数据数组,并将逐个元素分配给 fft 所需的浮点数。
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2014-02-06
  • 2023-04-01
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多