我对这个主题很陌生,玩 FFT 很有趣。我目前正在做的是尝试对音频信号进行采样并同时显示其频谱。到目前为止,这对我所做的一切都很好,但是仍然缺少一些拼图。
这是我迄今为止实施的:
- 我得到原始音频数据(即我的信号)并以 44.1 kHz 的采样频率对其进行采样。
- 对于我更新频谱的音频文件的每个时间实例(例如,每 1/24 秒),我从时间实例周围的采样信号中获取一定数量的样本,对其应用窗口函数(汉恩窗口)和然后我使用 fftw 库对其进行转换。
- 然后我看看我得到了什么。由于我所有的输入数据都是真实的,我得到 n/2 + 1 个复数值,我在那个假设中是否正确?
- 现在,我想展示这个光谱。我使用 l2-norm 计算每个 n/2 + 1 个向量的大小并尝试显示它。
最后一部分是我确定如何进行的地方。首先,我计算的这个幅度是在频域中被称为幅度还是我把东西混在一起了?据我所知,我转换的窗口中原始信号的幅度以某种方式分布在我的频谱中(即我的频率区间)。我正在寻找的是一个很好的映射,以便很好地显示这些频率箱(事实上......我总是将一些组合在一起以获得更大的频带)。这是我想做的:对于我的可视化,我有 12 个波段,每个波段有 15 个离散级别。到目前为止,我所做的实际上是试图将频带中所有 bin 的最大值映射到 {0,1,...15}。
到目前为止,我一直在玩,尝试对数和线性映射之类的东西,但似乎没有一个能给我我期望的结果。例如,较低的频率可能具有非常高的幅度,而较高的频率相对较低,即使相应的音频信号会让我期望较高频段的幅度更高。
所以我的主要问题是,这可能主要是因为我总是选择最大值吗?一个带中所有 bin 的平均值会更好吗?
我的直觉告诉我,这只是冰山一角。例如,线性变换很难调整,因为我在动态计算频谱时不知道最大频率幅度是多少。
如果你们中的一些大师可以帮助我了解我所缺少的东西,我将不胜感激,也许,告诉我我正在做的事情是否有任何可怕的错误,直到我想要可视化计算的光谱。
干杯! 砖