首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速框架vDSP

加速框架vDSP
EN

Stack Overflow用户
提问于 2013-11-07 09:33:21
回答 2查看 1.6K关注 0票数 1

我试图在一个录制的音频文件上使用苹果的vDSP来实现FFT计算(让我们假设它是一个单PCM)。

我在这里做了一项研究,发现以下主题非常有用:

例如,我们配置了frame_size N= 1024样例,log2n=10:

代码语言:javascript
复制
m_setupReal = vDSP_create_fftsetup(LOG_2N, FFT_RADIX2);

// allocate space for a hamming window
m_hammingWindow = (float *) malloc(sizeof(float) * N);

// generate the window values and store them in the hamming window buffer
vDSP_hamm_window(m_hammingWindow, N, vDSP_HANN_NORM);

在代码中的某个地方:

代码语言:javascript
复制
vDSP_vmul(dataFrame, 1, m_hammingWindow, 1, dataFrame, 1, N);

vDSP_ctoz((COMPLEX *)dataFrame, 2, &(m_splitComplex), 1, nOver2);

// Do real->complex forward FFT
vDSP_fft_zrip(m_setupReal, &(m_splitComplex), 1, LOG_2N, kFFTDirection_Forward);

我现在所缺少的,在我对FFT用法的理解中,是如何获得一个大音频文件的完整频谱,让我们假设总共有12800个样本。

Q:,我是否需要将原始数据分割成大小为1024个样本的帧(~ 12800 / 1024 = 13帧),然后对每个帧分别执行快速傅立叶变换,然后以某种方式将平均13个FFT的结果分解成最终的频谱?如果这是正确的假设,那么如何进行平均?

我真的很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 09:59:03

你不想平均光谱,除非你有一个统计平稳的信号。如果它是像语音或音乐这样的时间变化的东西,那么你实际上就有了一个3D数据集:时间与频率与大小的关系,你可以用谱图瀑布图来描绘它。

还请注意,通常的做法是重叠连续窗口,以便在时间轴上获得更高的分辨率,因此您的第一个块可能是样本0.1023,然后第二个重叠率为50%的块将是512.1535等等。

票数 1
EN

Stack Overflow用户

发布于 2013-11-07 20:57:42

另一方面,如果你的信号平稳的,并且混合了一定数量的噪声,那么向量平均多个FFT的幅值结果就会给出Welch的方法,这可能会改善得到的平均幅值谱的信噪比。

同样,如果信号是平稳的,那么利用相移窗的FFT桶之间的相位差可以与相位声码器算法一起使用来改进频谱频率估计。如果信号在很短的时间间隔内是静止的,那么人们可能只希望对适合这些间隔的窗口这样做,也许可以通过减少窗口偏移(增加重叠)来实现。

所以,这取决于信号,以及你想从金融时报得到什么信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19832317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档