相关疑难解决方法(0)

使用帧之间的相位变换从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];

    static long gInit = 0;
    if (! gInit) 
    {
        memset(gFFTworksp, 0, 2*MAX_FRAME_LENGTH*sizeof(float));
        memset(gLastPhase, 0, (MAX_FRAME_LENGTH/2+1)*sizeof(float));
        gInit = 1;
    }

    /* do windowing and re,im interleave */
    for (long k = 0; …
Run Code Online (Sandbox Code Playgroud)

c math signal-processing fft phase

25
推荐指数
4
解决办法
2万
查看次数

iOS FFT Accerelate.framework在播放期间绘制频谱

更新2016-03-15

请看一下这个项目:https://github.com/ooper-shlab/aurioTouch2.0-Swift.它已被移植到Swift并包含您正在寻找的每个答案,如果你在这里.


我做了很多研究,并学到了很多关于FFT和Accelerate Framework的知识.但经过几天的实验,我有点沮丧.

我想在图表中播放期间显示音频文件的频谱.对于每个时间间隔,它应该在X轴上通过FFT计算的每个频率(在我的情况下为512个值)显示Y轴上的数值(由红色条显示).

输出应如下所示: 在此输入图像描述

我用1024个样本填充缓冲区,仅为开头提取左侧通道.然后我做所有这些FFT的东西.

到目前为止,这是我的代码:

设置一些变量

- (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);  
}
Run Code Online (Sandbox Code Playgroud)

做FFT.FrequencyArray只是一个包含512个浮点值的数据结构.

- (FrequencyArry)performFastFourierTransformForSampleData:(SInt16*)sampleData andSampleRate:(UInt16)sampleRate   
{  
    NSLog(@"log2n %i n %i, …
Run Code Online (Sandbox Code Playgroud)

fft frequency spectrum ios

14
推荐指数
1
解决办法
6925
查看次数

从iPhone上的音频流中获取Hz频率

在iOS上从音频流(音乐)获取Hz频率值的最佳方法是什么?Apple提供了哪些最好,最简单的框架.提前致谢.

iphone audio fft core-audio ios

14
推荐指数
3
解决办法
2万
查看次数

使用IOS Accelerate Framework在非二次幂图像上进行二维信号处理?

//编辑...

我正在编辑我的问题,以解决专门处理非二次幂图像的问题.我有一个基本结构,适用于尺寸为256x256或1024x1024的方形灰度图像,但无法看到如何推广到任意大小的图像.fft函数似乎希望你包含宽度和高度的log2,但是它不清楚如何解压缩结果数据,或者数据是否只是被扰乱.我认为显而易见的事情是将npot图像置于较大的全黑图像中,然后在查看数据时忽略这些位置中的任何值.但是想知道是否有一种不太笨拙的方法来处理npot数据.

//...END编辑

我在使用Accelerate Framework文档时遇到了一些麻烦.我通常会使用FFTW3,但是我无法在实际的IOS设备上进行编译(请参阅此问题).任何人都可以指向使用Accelerate的超级简单实现,它执行如下操作:

1)将图像数据转换为适当的数据结构,可以传递给Accelerate的FFT方法.
在FFTW3中,最简单的是,使用灰度图像,这涉及将无符号字节放入"fftw_complex"数组中,该数组只是两个浮点数的结构,一个包含实数值,另一个包含虚数(和虚数在哪里)每个像素初始化为零).

2)采用该数据结构并对其执行FFT.

3)打印出幅度和相位.

4)对其执行IFFT.

5)根据IFFT产生的数据重新创建原始图像.

虽然这是一个非常基本的例子,但我在使用Apple网站上的文档时遇到了麻烦.Pi的SO 答案非常有用,但我仍然对如何使用Accelerate使用灰度(或彩色)2D图像执行此基本功能感到困惑.

无论如何,任何指针或特别是一些处理2D图像的简单工作代码都会非常有用!

编辑\\\

好的,花了一些时间深入研究文档和SO上的一些非常有用的代码以及pkmital的github repo,我有一些工作代码,我以为我会发布自1)我花了一段时间来计算它和2)因为我有几个剩下的问题......

初始化FFT"计划".假设一个方形的二次幂图像:

#include <Accelerate/Accelerate.h>
...
UInt32 N = log2(length*length);
UInt32 log2nr = N / 2; 
UInt32 log2nc = N / 2;
UInt32 numElements = 1 << ( log2nr + log2nc );
float SCALE = 1.0/numElements;
SInt32 rowStride = 1; 
SInt32 columnStride = 0;
FFTSetup setup = create_fftsetup(MAX(log2nr, log2nc), FFT_RADIX2);
Run Code Online (Sandbox Code Playgroud)

传入一个字节数组,用于方形二次灰度图像并将其转换为COMPLEX_SPLIT:

COMPLEX_SPLIT in_fft;
in_fft.realp = ( float* ) …
Run Code Online (Sandbox Code Playgroud)

signal-processing fft ios vdsp

13
推荐指数
1
解决办法
1872
查看次数

使用Accelerate Framework进行iOS的FFT间距检测?

我已经阅读了一段时间的FFT和音高检测,但是我在拼凑它时遇到了麻烦.

我已经知道Accelerate框架可能是最好的方法,我已经阅读了apple的示例代码,看看如何将它用于FFT.如果我想实时运行音调检测,那么FFT的输入数据是什么?我只是从麦克风传入音频流吗?我该怎么做?

另外,在我得到FFT输出后,如何从中获得频率?我到处读书,找不到任何例子或解释?

谢谢你的帮助.

signal-processing fft objective-c ios accelerate-framework

7
推荐指数
1
解决办法
9679
查看次数

iPhone OS上的Bignum,线性代数和数字信号处理(iOS 4)

我想我在iPhone OS(iOS 4)中发现了一些宝石.

我发现Accelerate Framework提供了128位,256位,512位和1024位整数数据类型.Apple还实现了基本线性代数子程序(BLAS),Apple实现的LAPACK(线性代数PACKage)和数字信号处理(DSP)程序.

我很兴奋,因为据我所知,BLAS和LAPACK是最好的(也是最着名的)图书馆.(如果你从未听过他们的名字,只需谷歌他们,你就会理解.)他们让你解决联立线性方程(即矢量/矩阵表示法中的A x = b),进行快速矩阵乘法等等.

我很确定这些库可以在PowerPC和基于Intel的Mac上使用.但是,当我在Xcode中查找"iOS4中的新功能"文档时,它表示数据类型"在任何架构上都不受支持".当我比较适用于Mac OS X的vecLib参考适用于iOS的vecLlib参考时,我还发现iOS版本中缺少功能.

我的问题是:
有没有人使用这些库编译任何程序(bignum是我感兴趣的主要领域)并在真正的iPhone设备上成功运行它们?(能够展示他们在图书馆的实际经验的答案者更感谢.)

以下是参考图书馆的链接:
加速框架(iOS参考图书馆)
vecLib参考(Mac OS X参考库)
vecLib参考(iOS参考库)

以下是BLAS和LAPACK的官方常见问题解答:
BLAS FAQ
LAPACK FAQ

iphone objective-c bignum blas lapack

6
推荐指数
1
解决办法
5547
查看次数

如何开发具有混响功能的iphone应用程序?

我正在开发一个iPhone应用程序(如音频处理).我必须对音频做出一些影响.如果它是桌面应用程序,那里有很多选项.我们可以得到很好的例子和完整的项目,如大胆.但我想为iPhone开发.

我有一个带有混响选项的应用程序; (看看下面的链接).只是我看"视频",我没有在我的iPhone设备上测试这个应用程序.
http://www.appstorehq.com/reverb-iphone-89870/app

我的问题是; 如何使用混响功能开发应用程序?那有什么文件吗?如果是,请与我们分享.

注意: 我们可以使用AudioUnit开发具有混响功能的应用程序(我不清楚这一点.).

编辑:我不喜欢使用任何第三方库.

如果有人对此有所了解,请与我们分享.

谢谢.

iphone audio signal-processing core-audio

6
推荐指数
1
解决办法
7109
查看次数

使用Accelerate框架进行FFT时如何设置缓冲区?

我正在使用Accelerate框架来执行快速傅立叶变换(FFT),并且我正在尝试找到一种方法来创建一个缓冲区,以便使用长度为1024的缓冲区.我可以访问平均峰值和峰值.我想做FFT的信号.

有人可以帮我或给我一些提示吗?

iphone cocoa fft accelerate-framework

5
推荐指数
1
解决办法
3741
查看次数

什么可能导致FFT数据在错误的频率上出现尖峰?

我使用的是苹果的加速框架,讨论了关于iPhone执行FFT间距检测很多 这里之前.

我理解相位偏移,bin频率,并且已经研究了几种使用FFT技术(简单音调检测,自相关,倒谱等)来检测音调的开源调谐器.这是我的问题:

我的FFT结果始终偏离5-10 Hz(+/-),即使这些箱仅相隔1-2赫兹.我尝试过不同的算法,即使是以高分辨率采样的简单FFT也会显示出看似错误的地方的幅度峰值.这不是一致的偏移; 有些太高,有些太低.

例如,440Hz的音调为445.2 Hz; 220Hz为214Hz; 880Hz为874Hz; 使用音调发生器,1174Hz为1183Hz.使用几乎完全相同的算法的Mac 类似的开源调谐器没有问题完美地检测音调.(这些差异在设备上与模拟器不同,但它们仍处于关闭状态.)

我不认为问题是分辨率,因为实际音调和检测到的幅度尖峰之间通常有几个分档.好像输入只是听错了音调.

我在下面粘贴了我的代码.一般流程很简单:

向FFT缓冲区推进一步 - > Hann窗口 - > FFT - >相位/幅度 - >最大间距错误.

enum {
    kOversample = 4,
    kSamples = MAX_FRAME_LENGTH,
    kSamples2 = kSamples / 2,
    kRange = kSamples * 5 / 16,
    kStep = kSamples / kOversample
};



const int PENDING_LEN = kSamples * 5;
static float pendingAudio[PENDING_LEN * sizeof(float)];
static int pendingAudioLength = 0;

- (void)processBuffer {
    static float window[kSamples];
    static …
Run Code Online (Sandbox Code Playgroud)

signal-processing fft accelerate-framework

5
推荐指数
1
解决办法
3664
查看次数

FFT - 什么时候开窗?

我在这里看过各种FFT问题,但我对部分实现感到困惑.我没有实时执行FFT,而是想离线执行.让我们说我有原始数据float[] audio.采样率为44100,因此audio[0] to audio[44099]将包含1秒的音频.如果我的FFT函数处理窗口(例如汉宁),我是否只需将整个audio缓冲区一次性放入函数中?或者,我是否必须将音频切换为4096(我的窗口大小)的块,然后将其输入FFT,然后在顶部执行窗口功能?

audio fft sampling windowing audio-analysis

5
推荐指数
1
解决办法
3992
查看次数

AVAudio检测音符/音高/等.iPhone xcode objective-c

我在iphone上制作应用程序,我需要一种方法来检测通过麦克风传来的声音.(即A#,G,C♭等)我以为我会使用AVAudio,但我真的不知道,我在文档中找不到任何东西..

有帮助吗?

iphone audio objective-c avaudiorecorder

5
推荐指数
1
解决办法
1万
查看次数

C/C++/Obj-C实时算法,用于确定人声输入中的音符(非音高)

我想要检测的不是音高,而是发出唱音的音高等级.

因此,无论是C4还是C5都不重要:它们必须都被检测为C.

想象一下,12个半音安排在钟面上,针指向音高等级.这就是我追求的!理想情况下,我希望能够分辨出唱歌音符是点亮还是稍微偏离.

这与先前提出的问题不重复,因为它引入了以下约束条件:

  1. 声源是一个人的声音,希望背景干扰可以忽略不计(虽然我可能需要处理这个问题)

  2. 八度音阶并不重要,只有音高等级

编辑 - 链接:
实时音高检测
使用Apple FFT和加速框架

iphone algorithm signal-processing detection pitch

3
推荐指数
3
解决办法
1万
查看次数