iOS FFT Accerelate.framework在播放期间绘制频谱
更新2016-03-15 请查看此项目:。它已经被移植到Swift,包含了你想要的每一个答案,如果你在这里的话。iOS FFT Accerelate.framework在播放期间绘制频谱,ios,fft,frequency,spectrum,Ios,Fft,Frequency,Spectrum,更新2016-03-15 请查看此项目:。它已经被移植到Swift,包含了你想要的每一个答案,如果你在这里的话。 我做了很多研究,学到了很多关于FFT和加速框架的知识。但是经过几天的实验,我有点沮丧 我想在图表中显示播放期间音频文件的频谱。对于每个时间间隔,它应该在Y轴上显示由X轴上的FFT计算的每个频率(在我的情况下为512个值)的幅值(以db为单位)(以红色条显示) 输出应如下所示: 我用1024个样本填充缓冲区,只提取左通道作为开始。然后我做所有这些事情 以下是我目前的代码: 设置一些
我做了很多研究,学到了很多关于FFT和加速框架的知识。但是经过几天的实验,我有点沮丧 我想在图表中显示播放期间音频文件的频谱。对于每个时间间隔,它应该在Y轴上显示由X轴上的FFT计算的每个频率(在我的情况下为512个值)的幅值(以db为单位)(以红色条显示) 输出应如下所示: 我用1024个样本填充缓冲区,只提取左通道作为开始。然后我做所有这些事情 以下是我目前的代码: 设置一些变量
- (void)setupVars
{
maxSamples = 1024;
log2n = log2f(maxSamples);
n = 1 << log2n;
stride = 1;
nOver2 = maxSamples/2;
A.realp = (float *) malloc(nOver2 * sizeof(float));
A.imagp = (float *) malloc(nOver2 * sizeof(float));
memset(A.imagp, 0, nOver2 * sizeof(float));
obtainedReal = (float *) malloc(n * sizeof(float));
originalReal = (float *) malloc(n * sizeof(float));
setupReal = vDSP_create_fftsetup(log2n, FFT_RADIX2);
}
-(无效)设置变量
{
maxSamples=1024;
log2n=log2f(最大样本数);
n=1首先,在FFT之前没有应用a-这将导致频谱因以下原因而变得模糊
其次,您只需使用FFT输出箱的真实分量来计算dB幅值-您需要使用复数幅值:
magnitude_dB = 10 * log10(re * re + im * im);
您的输入数据是什么格式的?vDSP_zvmags(&A,1,获得日期,1,11月2日);获得相同的结果
magnitude_dB = 10 * log10(re * re + im * im);