Tag: fft

根据logging的声音库识别声音

我正在尝试创build一个iOS应用程序,当它检测到拍手声音时将执行一个操作。 我试过的东西: 1)我的第一个方法是简单地使用AVAudioRecorder来测量整体功率。 这工作正常,但它可以通过说太大声,其他噪音等,所以我决定采取不同的做法。 2)然后,我实现了一些使用FFT的代码来获取来自麦克风的实时stream式audio的频率和大小。 我发现,拍手秒杀通常驻留在13kHZ-20kHZ的范围内,而大部分的谈话驻留在很低的频率。 然后,我在这个频率范围内实现了一个简单的阈值,这个工作正常,但其他的声音可以把它closures。 例如,在我手机旁边的桌子上放一支铅笔将通过这个阈值并算作拍手。 3)然后,我尝试将这个频率范围分成几百个分档,然后获取足够的数据,当声音通过时,我的应用程序将计算Z分数(统计的概率),如果Z分数是好的,那么可以作为一个拍手。 这根本不起作用,因为有些拍手不被识别,还有一些其他的声音被识别出来。 graphics: 为了帮助我理解如何检测拍子,我在Excel中创build了这个图表(每个图表有大约800个数据点),它涵盖了13kHZ-21kHZ的范围: 我现在在哪里: 即使在所有这些之后,我仍然没有看到如何识别拍手与其他声音。 任何帮助是极大的赞赏!

如何播放和读取.caf PCMaudio文件

我有一个应用程序,从iPod库中select一首歌曲,然后将该歌曲作为“.caf”文件复制到应用程序的目录中。 我现在需要播放,同时从Accelerate框架将该文件读入Apples FFT,这样我就可以像声谱图一样可视化数据。 这里是FFT的代码: void FFTAccelerate::doFFTReal(float samples[], float amp[], int numSamples) { int i; vDSP_Length log2n = log2f(numSamples); //Convert float array of reals samples to COMPLEX_SPLIT array A vDSP_ctoz((COMPLEX*)samples,2,&A,1,numSamples/2); //Perform FFT using fftSetup and A //Results are returned in A vDSP_fft_zrip(fftSetup, &A, 1, log2n, FFT_FORWARD); //Convert COMPLEX_SPLIT A result to float array to be returned […]

希尔伯特变换(分析信号)使用苹果的加速框架?

我在使用Apple的Accelerate Framework与C++相当的Hilbert变换的问题。 我已经能够得到vDSP的FFTalgorithm,并且在Paul R的post的帮助下,得到了与Matlab相同的结果。 我已经阅读了这两个: 乔丹这个stackoverflow问题,并阅读了Matlabalgorithm(在“algorithm”子标题下) 。 总结algorithm分三个阶段: 进行input的FFT。 直stream和奈奎斯特之间的零reflection频率和双倍频率。 对修改的正向FFT输出进行逆FFT。 下面是每个阶段的Matlab和C ++的输出。 这些示例使用以下数组: Matlab: m = [1 2 3 4 5 6 7 8]; C ++: float m[] = {1,2,3,4,5,6,7,8}; Matlab示例 阶段1: 36.0000 + 0.0000i -4.0000 + 9.6569i -4.0000 + 4.0000i -4.0000 + 1.6569i -4.0000 + 0.0000i -4.0000 – 1.6569i -4.0000 – 4.0000i -4.0000 […]

为什么我们只使用aurioTouch项目中的第一个缓冲区

我正在调查aurioTouch2示例代码。 我注意到,当我们分析audio数据时,我们只使用这个数据的第一个缓冲区,而不使用其他的缓冲区。 在void FFTBufferManager::GrabAudioData(AudioBufferList *inBL)函数中: UInt32 bytesToCopy = min(inBL->mBuffers[0].mDataByteSize, mAudioBufferSize – mAudioBufferCurrentIndex * sizeof(Float32)); memcpy(mAudioBuffer+mAudioBufferCurrentIndex, inBL->mBuffers[0].mData, bytesToCopy); function static OSStatus PerformThru( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) if (THIS->displayMode == aurioTouchDisplayModeOscilloscopeWaveform) { AudioConverterConvertComplexBuffer(THIS->audioConverter, inNumberFrames, ioData, THIS->drawABL); SInt8 *data_ptr = (SInt8 *)(THIS->drawABL->mBuffers[0].mData); } 问题是为什么我们忽略inBL-> mBuffers 1 .mData中的数据?

EZAudio:如何从FFT窗口大小(希望更高的频率分辨率)中分离缓冲区大小。

https://github.com/syedhali/EZAudio 我已经成功地使用了这个audio库,但是现在我想提高读入的麦克风数据的分辨率,以便FFT分辨率或频率分辨率降低到10Hz。 要做到这一点,我需要一个缓冲区大小为8820而不是512.麦克风的缓冲区大小和FFT窗口大小是否可分开? 我看不到一个方法来分开它。 如何设置audiostream描述,以便能够用更大的窗口计算FFT? 任何帮助将非常感激。

Objective-C峰值检测加速框架

我是个math大师,所以我想问问熟悉数字信号处理的人,什么是检测实时峰值的最好方法。 我每秒得到大约30帧/值,而且我试图实现检测峰值的斜率algorithm,它工作正常,约80%的情况下,但它真的不够好:(。 从我search到的应该使用快速傅立叶变换,但我不知道如何开始使用它,也许我错过了这种情况下如何使用FFT的一般想法。 在iOS中,我们有这个惊人的加速框架,应该帮助我做FFT的东西,但只要我没有得到一般的想法对我来说几乎是无用的。 任何人都可以通过指向正确的方向来启发我:-)? 非常感谢,新年快乐!

使用加速框架的iOS FFT快速检测?

我已经读了一段时间的FFT和音高检测,但是我在拼接时遇到了麻烦。 我已经研究出加速框架可能是最好的方法,我已经阅读了苹果的示例代码,看看如何使用它的FFT。 如果我想要实时运行音高检测,那么FFT的input数据是多less? 我只是从麦克风传入audiostream? 我将如何做到这一点? 另外,在得到FFT输出后,我怎样才能从中得到频率? 我到处读书,找不到任何例子或解释呢? 谢谢你的帮助。

Shazam或Sound Hound如何工作?

我正在开发iOS SDK 5.0的应用程序和XCode 4.2 。 我想开发一个识别声音的应用程序。 我看到有一个称为声音猎犬的应用程序,可以识别音乐,并告诉艺术家和标题。 我怎样才能做类似的事情? 我想比较一个声音与现有的声音数据库。 我怎样才能做到这一点? 也许我可以使用傅立叶变换 。 我不知道如何处理声音。 或者它可能类似于语音识别,不是吗?

在播放过程中使用iOS FFT Accerelate.framework绘制频谱

更新2016-03-15 请看看这个项目: https : //github.com/ooper-shlab/aurioTouch2.0-Swift 。 它已被移植到Swift,包含你正在寻找的每一个答案,如果你在这里拍摄。 我做了大量的研究,并学习了很多关于FFT和Accelerate Framework的内容。 但经过几天的实验,我有点沮丧。 我想在图表中播放时显示audio文件的频谱。 对于每个时间间隔,应该在X轴上显示每个频率(在本例中为512个值)的Y轴上的数值(以红色条显示)。 输出应该是这样的: 我用1024个样本填充一个缓冲区,只提取开始时的左声道。 然后我做所有这些FFT的东西。 这是我的代码到目前为止: 设置一些variables – (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 * […]

了解aurioTouch2中的FFT

我一直在从Apple的示例代码( 在这里find )看aurioTouch 2。 在一天结束的时候,我想自己分析一下频率。 现在我正试图理解这里发生的一些事情。 我很抱歉,如果这是微不足道的,只是试图了解一些未注释的魔术数字在一些来源浮动。 我现在主要的困惑是: 为什么它们将FFTBufferManager :: ComputeFFT中的nyquist值清零? 这个价值真的可以被抛弃吗? (FFTBufferManager.cpp的第112行)。 他们把所有的东西都缩小了-128db,所以我假设结果是在(-128,0)的范围内。 然而,稍后在aurioTouchAppDelegate.mm(〜行807)中,它们将这个值转换为0到1之间的值,加上80,然后除以64,然后钳位到0和1.为什么模糊? 另外,我正确的价值将在(-128,0)附近?