c# – 如何使用FFT绘制wav文件的频谱?
注意:这不是重复,我有相关问题以外的具体要求.
首先,我想绘制一个音频文件(.wav)的频谱,就像大胆一样(类似:How to draw a frequency spectrum from a Fourier transform). 到目前为止,我能够读取和写入wav文件.但我的问题是我不知道我需要传递给FFT函数的确切值.顺便说一下,我在C#中使用Exocortex进行FFT. FFT函数要求我传递一个具有正确大小的复数数组(512,1024,…我假设),长度的可选整数参数和傅里叶方向(前向/后向). 具体问题: > Exocortex库中的Complex(类)有两个值,即Real和Imaginary.我有一系列样本,所以应该是真实的,哪些应该是虚构的? 如果你没有明白我的意思,那么尝试使用Audacity,导入一个音频文件,然后点击Analyze>情节谱.那些是想要重新创造的东西.请详细回答我的问题,因为我真的想学习这个.我只有一点背景知识.我只是数字信号处理的新手.另外请尽量不要将我引导到其他FFT站点,因为他们没有具体回答我的问题. 编辑: 我已经完成了一些阅读,并且发现了如何对音频数据进行FFT,但只有2的幂.那么我如何在长度不是2的音频文件中做同样的事情呢?根据一些我需要使用“窗口”.我也做了一些搜索,发现它只需要稍后处理一部分波形.请记住,我想让音频文件的FFT不是它的一部分.那我现在该怎么办?请帮忙 :( 解决方法
签名是
public static void FFT( float[] data,int length,FourierDirection direction ) >您传递一组复数,表示为对.由于您只有实数(样本),您应该将样本放在数组中的偶数位置 – data [0],data [2],data [4]等.奇数位置应为0,数据[1] =数据[3] = 0 … 这是一个工作代码的示例: float[] data = new float[8]; data[0] = 1; data[2] = 1; data[4] = 1; data[6] = 1; Fourier.FFT(data,data.Length/2,FourierDirection.Forward); 我给它4个样本,都是一样的.所以我希望只能在频率为0时得到一些东西.事实上,在运行之后,我得到了 data [0] == 1,data [2] == 1,data [4] == 1,data [6] == 1 其他人都是0. 如果我想使用复杂数组重载 Complex[] data2 = new Complex[4]; data2[0] = new Complex(1,0); data2[1] = new Complex(1,0); data2[2] = new Complex(1,0); data2[3] = new Complex(1,0); Fourier.FFT(data2,data2.Length,FourierDirection.Forward); 请注意,这里第二个参数等于数组的长度,因为每个数组成员都是一个复数.我得到了和以前一样的结果. 我想我之前错过了复杂的超载.除非您的数据已经成对出现,否则我似乎不易出错且使用起来更自然. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |