通过 C 中的 FFT 将 1000Hz 噪声添加到 wav 文件
Posted
技术标签:
【中文标题】通过 C 中的 FFT 将 1000Hz 噪声添加到 wav 文件【英文标题】:Add 1000Hz noise to wav file through the FFT in C 【发布时间】:2013-06-12 09:39:25 【问题描述】:我有一个整数数组 (int_16),其中包含 Wav 文件的所有音频数据。 现在我想获得它的“频域”表示并添加一个 1000Hz 的噪声。
我已经阅读了很多数学知识,但我还没有在 C 中找到这个问题的真正实现。
我只想发现:
哪个是合适的库(FFTW?)
如何将 FFT 应用于我的数组(我可以使用哪个函数)
我获得了什么样的数据,它们代表什么
如何添加 1000Hz 噪声并重建新的 Wav
谢谢!!
【问题讨论】:
我想你的意思是 1000Hz 的音调? 当然可以!谢谢! 如果您的目标只是添加一个 1000Hz 的音调,那么在频域中工作就太过分了。只需在您的样本中添加一个正弦曲线。看看这段代码:***.com/questions/2457482/… 谢谢 Yves,如果我指定为了教育目的我需要这样做会更好! 【参考方案1】:您无需将信号转换到频域并再次返回来执行此操作 - 您只需在时域中添加 1 kHz 正弦波,例如
#include <stdint.h>
#include <limits.h>
#include <math.h>
const float kA = 0.1f; // amplitude = 10% of full scale (-20 dB)
const float kF = 1000.0f; // frequency = 1 kHz
const float kFS = 44100.0f; // sample rate = 44.1 kHz
for (int i = 0; i < N; ++i) // for each sample
samples[i] += (int16_t)(SHRT_MAX * kA * sinf(2.0f * M_PI * kF * i / kFS));
// add sine wave to signal
【讨论】:
谢谢你,Paul,如果我指定出于教育目的我需要这样做会更好,因为它可以为许多其他应用程序开辟道路! 在这种情况下,只是一个建议:选择一个实际上以某种方式从频域处理中受益的任务可能会更有价值,例如更高效,更容易完成。以上是关于通过 C 中的 FFT 将 1000Hz 噪声添加到 wav 文件的主要内容,如果未能解决你的问题,请参考以下文章