我正在使用fftw库对我从视频录制中收到的音频信号执行DFT。
这是我第一次使用这种数学和分析信号,但我相信在计算后我从数据中得到了正确的值。
但是,现在我不确定如何处理复数数组以及如何将其绘制成图形。
请有人可以告知接下来该做什么,这里有一个前/后数据的例子......
(in, out(real;im))
(-12190, (real:-3103; im:0))
(-16316, (real:-3108.465666587691; im:49.512823501357843))
(-10005, (real:-3096.7767811251124; im:99.645004992013128))
(first 3 from a sample of 512)
此外,这是我用来获取这些结果的代码......
int n = 512;
double in[512];
fftw_complex out[512];
fftw_plan p;
ifstream rFile ("audioswap.csv");
string line;
if (rFile.is_open())
{
for (int i = 0; i < n; i++)
{
if ( getline (rFile, line))
{
in[i] = ::atof(line.c_str());
}
else
{
break;
}
}
}
p = fftw_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
如果我在得到结果时做错了,请有人能够提出建议。
提前感谢任何帮助!!! :)
答案 0 :(得分:1)
对于几乎所有目的,接下来要做的就是获取每个复数值的大小。傅里叶域中的相位信息是时域中(小)时移的结果,并且通常无关紧要。如果您更改相位信息并将其转换回时域,它仍然听起来是一样的。
可以直接绘制幅度,这是有意义的。