用音频软件 Audacity 运行 FFT
前言
Audacity 是一款免费开源的音频编辑与播放软件,可以用它来运行 FFT。本文试一下效果。
案例1 —— 单正弦波
第 1 步:准备数据
首先准备 sin 的波形数据。
最简单的是用 Excel 表格生成,确认好 sin 的频率、采样率、采样点数、然后利用 Excel 公式填充表格即可:
图中,为尽量满足 Coherent Sampling,我选用的参数如下:
-
sin 的频率:~2963.867 Hz
-
采样率:48000 Hz
-
采样点数:16384*3 = 49152,大概历时 1 秒钟
然后,将 sin 波形的数据保存为文本:
一共是 49152 个数据,注意,只需波形数据,没有时间信息。
第 2 步:导入 Audacity
Audacity 支持多种音频的采样率,我们先将全局采样率设置为 48000 Hz。
然后将上述文本文件导入 Audacity,菜单路径为 Tools -> Sample Data Import…
调整一下音轨,放大能够看到 sin 波形,时间就是 1 秒钟多一些:
另外,通过菜单路径 Tools -> Nyquist Prompt,输入 “(print len)” 显示数据总数:
能够看到音轨的数据总数为 49152,与文本文件一致,说明波形数据全部导入。
第 3 步:运行 FFT
在 Audacity 中点击菜单路径 Analyze -> Plot Spectrum…
然后就能看到 FFT 的运行结果:
如图可见,FFT 默认采用了:
- FFT size 是 1024 个;
- bin size 为 1024 / 2 = 512 个;
- 窗函数为 Hann Window;
- 在 2967 Hz 上有频率峰值,我们设置的 sin 频率是 ~2963.867 Hz;
可以调整一下 FFT size,看看不同的 FFT 运行结果。
我应该满足了 Coherent Sampling 条件,但还有 Leakage,怀疑是 FFT size 的问题。
FFT 界面里还有一个 “Export” 选项,可以将频谱数据导出,在 FFT size = 1024 的情况下,导出总共有 512 个点。
案例2 —— 双正弦波叠加
在了解上述案例后,我们再看一个“双正弦波叠加”的例子。
第 1 步:准备数据
我生成了两个 sin 波形,采样率、采样点数不变,但频率有两个,分别是 ~2963.867 Hz 和 ~3180.664 Hz。
然后将两者相加并除 2,形成 Two Tone 波形:
同样保存为文本文件。
第 2 步:导入 Audacity
导入 Audacity 后,放大看音轨:
可以看到两个 sin 因为互相影响,叠加后的波形有峰谷。
第 3 步:运行 FFT
运行 FFT 之后,能够看到频谱中有两个波峰,分别是在 2967 Hz 与 3184 Hz 的位置:
FFT 默认用的是 Hann 窗函数,我们试试 Hamming 窗函数,看能否将两个波峰区分的更清楚:
好像两个波峰之间的峰谷更深了一些,但也有更多的 Leakage。
总结
本文利用 Audacity 运行 FFT。
Audacity 作为音频软件,有默认的几种音频采样率(最大支持 384000 Hz),FFT 方面支持时域波形数据导入与频域数据导出,在你不打算使用 Numpy 或者 Matlab 时,是个查看 FFT 的好工具。
参考资料
Audacity 下载:https://www.audacityteam.org/
本文用于生成 sin 波形的 Excel 文件:https://gitee.com/gilbertjuly/digital-signal-processing-code/tree/master/04_sin_generator_for_audacity
欢迎关注我的微信公众号“疯狂的运放”
,及时收到最新的推文。