Tag: fft

在反转FFT时无法获得准确的数据

好吧,我想要实现的目标很简单。 对某些随机数据应用FFT,然后在输出上应用反向算法以获取输入。 我正在使用kissFFT库。 码: const int fft_siz = 512; const int inverse = 1; kiss_fft_cpx* in = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx) * fft_siz); kiss_fft_cpx* out = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx) * fft_siz); kiss_fft_cpx* rec = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx) * fft_siz); kiss_fft_cfg cfg = kiss_fft_alloc(fft_siz, !inverse, NULL, NULL); kiss_fft_cfg icfg = kiss_fft_alloc(fft_siz, inverse, NULL, NULL); srand((unsigned int)time(NULL)); for(int i = 0; i < fft_siz; […]

实时进行FFT

我想实时地对音频信号进行FFT,这意味着当人在麦克风中讲话时。 我将获取数据(我使用portaudio执行此操作,如果使用wavein会更容易,我会乐意使用它 – 如果您可以告诉我如何)。 接下来我使用的是FFTW库 – 我知道如何执行1D,2D(实数和复数)FFT,但我不太清楚如何做到这一点,因为我必须进行3D FFT以获得频率,幅度(这将决定颜色渐变)和时间。 或者它只是一个2D FFT,我得到幅度和频率?

FFT问题(返回随机结果)

我有这个代码,但它会随机返回0到1050左右的随机频率。请你帮我理解为什么会这样。 我的数据长度为1024,采样率为8192,数据是一个填充了麦克风输入数据的短arrays。 float *iSignal = new float[2048]; float *oSignal = new float[2048]; int pitch = 0; for(x=0;x<=1024;x++) { iSignal[x] = data[x]; } fft(iSignal,oSignal,1024); //Input data, output data, length of input and output data for(int y=0;y(pow(oSignal[pitch],2)+pow(oSignal[(pitch)+1],2))) { pitch = y; } } double pitchF = pitch / (8192.0/1024); printf(“Pitch: %f\n”,pitchF); 谢谢, 尼尔。 编辑:更改了代码,但它仍然返回随机频率。

fft之后如何在C上均衡

首先感谢您抽出一些时间回答! 我的问题是下一个:即时尝试在C上构建均衡器,使用fft(快速傅里叶变换),因为现在我能够正确地在矢量(音频样本)上应用fft将其标准化然后应用逆fft。 因为这里一切都好,但是当我尝试修改fft的结果(增加一个或不同频段的增益)时,我得到的只是噪音(即使我只是略微修改它)。 我如何修改这个bin(真实+虚构)组件,mi fft给出:(0,真实,虚构,真实,虚构……)正确均衡? PD:如果有人需要使用这个显然正常工作的fft来看看: http ://www-ee.uta.edu/eeweb/ip/Courses/DSP_new/Programs/fft.cpp 谢谢!

实施Hann Window

我获取输入数据块并通过fftw传递它们以获得一些光谱信息。 一切似乎都在起作用,但我认为我遇到了一些混叠问题。 我一直在努力研究如何在我的数据块上实现一个hann窗口。 谷歌让我失望了。 我应该关注的任何想法或链接? double dataIn[2048] > /* windowing here? */ > FFT > double freqBins[2048] 更新 感谢Oli指出我实际上要解决的问题是光谱泄漏,而不是混淆……

单个C文件中的FFT

我正在寻找C中的FFT实现。但是,我不是在寻找一个庞大的库(如FFTW),而是一个易于使用的单个C文件实现。 不幸的是我找不到这样的东西。 有人可以推荐一个简单的实现?

使用帧之间的相位变化从FFT区提取精确频率

我一直在浏览这篇精彩的文章: http : //blogs.zynaptiq.com/bernsee/pitch-shifting-using-the-ft/ 虽然太棒了,但却非常艰难而且沉重。 这种材料真的让我感到舒服。 我从Stefan的代码模块中提取了数学,该模块计算给定bin的确切频率。 但我不明白最后的计算。 有人能告诉我最后的数学结构吗? 在深入研究代码之前,让我设置一下场景: 假设我们设置fftFrameSize = 1024,所以我们处理512 + 1个bin 例如,Bin [1]的理想频率适合帧中的单个波。 在40KHz的采样率下,tOneFrame = 1024 / 40K秒= 1/40秒,因此Bin [1]理想地将采集40Hz信号。 设置osamp(overSample)= 4,我们以256为步长沿着输入信号前进。因此,第一个分析检查字节0到1023,然后是256到1279等。注意每个浮点数被处理4次。 … void calcBins( long fftFrameSize, long osamp, float sampleRate, float * floats, BIN * bins ) { /* initialize our static arrays */ static float gFFTworksp[2*MAX_FRAME_LENGTH]; static float gLastPhase[MAX_FRAME_LENGTH/2+1]; […]

fftshift / ifftshift C / C ++源代码

有没有人知道是否有任何免费和开源的库以matlab中的方式实现这两个function? 谢谢

arrays上的就地位反转shuffle

对于FFT函数,我需要以位反转方式对数组内的元素进行置换或混洗。 这是FFT的常见任务,因为两个大小的FFT函数的大多数function要么以位反转的方式期望或返回它们的数据。 例如,假设数组有256个元素,我想用它的位反转模式交换每个元素。 这是两个例子(二进制): Element 00000001b should be swapped with element 10000000b Element 00010111b should be swapped with element 11101000b 等等。 任何想法如何快速,更重要:就地? 我已经有一个执行此交换的function。 写一个并不难。 由于这是DSP中的一种常见操作,我感觉有更聪明的方法来做到这一点,而不是我的非常循环。 有问题的语言是C,但任何语言都可以。

如何使用C中的FFTW从PortAudio中提取样本的频率信息

我想制作一个程序,用PortAudio录制音频数据(我完成了这部分),然后显示录制音频的频率信息(现在,我想显示每组样本的平均频率)他们进来的时候)。 从我做过的一些研究中,我知道我需要进行FFT。 所以我用谷歌搜索了一个库,在C中找到了FFTW。 但是,现在我有点失落。 我应该怎么处理我记录的样本以从中提取一些频率信息? 我应该使用什么样的FFT(我假设我需要一个真实的数据1D?)? 一旦我进行了FFT,如何从它给我的数据中获取频率信息? 编辑:我现在也发现了自相关算法。 好点吗? 更简单? 非常感谢,对不起,如果这样,我绝对没有经验。 我希望它至少有点意义。