前言

Audacity 是一款免费开源的音频编辑与播放软件,可以用它来运行 FFT。本文试一下效果。

案例1 —— 单正弦波

第 1 步:准备数据

首先准备 sin 的波形数据。

最简单的是用 Excel 表格生成,确认好 sin 的频率、采样率、采样点数、然后利用 Excel 公式填充表格即可:

图1 Excel 表格生成 sin 波形

图1 Excel 表格生成 sin 波形

图中,为尽量满足 Coherent Sampling,我选用的参数如下:

  • sin 的频率:~2963.867 Hz

  • 采样率:48000 Hz

  • 采样点数:16384*3 = 49152,大概历时 1 秒钟

然后,将 sin 波形的数据保存为文本:

图2 将 sin 波形的数据保存为文本

图2 将 sin 波形的数据保存为文本

一共是 49152 个数据,注意,只需波形数据,没有时间信息。

第 2 步:导入 Audacity

Audacity 支持多种音频的采样率,我们先将全局采样率设置为 48000 Hz。

图3 Audacity 设置采样率

图3 Audacity 设置采样率

然后将上述文本文件导入 Audacity,菜单路径为 Tools -> Sample Data Import…

图4 Audacity 导入数据

图4 Audacity 导入数据

调整一下音轨,放大能够看到 sin 波形,时间就是 1 秒钟多一些:

图5 查看 sin 音轨

图5 查看 sin 音轨

另外,通过菜单路径 Tools -> Nyquist Prompt,输入 “(print len)” 显示数据总数:

图6 查看数据总数

图6 查看数据总数

能够看到音轨的数据总数为 49152,与文本文件一致,说明波形数据全部导入。

第 3 步:运行 FFT

在 Audacity 中点击菜单路径 Analyze -> Plot Spectrum…

然后就能看到 FFT 的运行结果:

图7 查看 FFT 运行结果

图7 查看 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 波形:

图8  生成双 sin 叠加的波形

图8 生成双 sin 叠加的波形

同样保存为文本文件。

第 2 步:导入 Audacity

导入 Audacity 后,放大看音轨:

图9 查看双 sin 叠加的音轨

图9 查看双 sin 叠加的音轨

可以看到两个 sin 因为互相影响,叠加后的波形有峰谷。

第 3 步:运行 FFT

运行 FFT 之后,能够看到频谱中有两个波峰,分别是在 2967 Hz 与 3184 Hz 的位置:

图10 查看 FFT 运行结果(Hann Window)

图10 查看 FFT 运行结果(Hann Window)

FFT 默认用的是 Hann 窗函数,我们试试 Hamming 窗函数,看能否将两个波峰区分的更清楚:

图11 查看 FFT 运行结果(Hamming Window)

图11 查看 FFT 运行结果(Hamming Window)

好像两个波峰之间的峰谷更深了一些,但也有更多的 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


欢迎关注我的微信公众号“疯狂的运放”,及时收到最新的推文。