我想持续分析MIC音频(不仅仅是一个片段或预先录制的样本),还要显示频率图并滤除音频的某些方面.iPhone足够强大吗?考虑到谷歌和iPhone的语音识别,Shazaam和其他音乐识别应用以及吉他调谐器应用,我怀疑答案是肯定的.但是,我不知道我有什么限制要处理.
有人在这个地方玩吗?
我一直在iphone上进行简单的频率检测设置.在存在谐波的情况下,使用FFT结果在频域中进行分析有些不可靠.我希望使用倒谱结果来帮助确定正在播放的基本频率.
我正在使用AudioToolbox框架中的AudioQueues,并使用Accelerate框架进行傅立叶变换.
我的过程正是维基百科的Cepstrum文章中列出的Real Power Cepstrum,具体为:信号→FT→abs()→square→log→FT→abs()→square→power倒谱.
我遇到的问题是倒谱结果非常嘈杂.我必须删除第一个和最后20个值,因为它们与其他值相比是天文数字.即使在"清理"数据之后,仍然存在大量的变化 - 远远超过我对第一张图的预期.有关频域和quefrency域的可视化,请参见下面的图片.
FFT
倒谱
当我在频域中看到如此明显的赢家时,我希望在quefrency域中看到类似的清晰结果.我玩了A440,并希望bin 82左右的音量最高.图表上的第三个峰值代表bin 79,它足够接近.正如我所说,前20个左右垃圾桶在幅度如此天文数字的是unusuable,我不得不从数据集中删除他们为了看到什么.倒谱数据的另一个奇怪的质量是偶数箱似乎远远高于奇数箱.以下是77-86的频率分档:
77: 151150.0313
78: 22385.92773
79: 298753.1875
80: 56532.72656
81: 114177.4766
82: 31222.88281
83: 4620.785156
84: 13382.5332
85: 83.668259
86: 1205.023193
Run Code Online (Sandbox Code Playgroud)
我的问题是如何清理频域,以便我的Cepstrum域结果不那么疯狂.或者,帮助我更好地理解如何解释这些结果,如果它们正如人们在倒谱分析中所期望的那样.我可以发布我正在使用的代码的示例,但它主要使用vDSP调用,我不知道它会有多大帮助.
首先,抱歉没有在这里发布代码.出于某种原因,当我试图输入我在此页面上的代码时,所有代码都搞乱了upp,无论如何发布它可能太多了,无法接受.这是我的代码:http://pastebin.com/bmMRehbd
现在从我所说的,我无法从这段代码中获得好结果的原因是因为我没有使用重叠添加.我试图在互联网上阅读几个来源,为什么我需要使用重叠添加,但我无法理解它.似乎实际过滤器工作,导致任何高于给定截止值,确实切断.
我应该提到这是为vst2-sdk工作的代码.
有人能告诉我为什么我需要添加它以及如何在给定代码中实现重叠添加代码?
我还应该提到,当谈到算法和数学时,我真的很愚蠢.我是那些需要在视觉上抓住我正在做的事情的人之一.那或者通过代码解释的东西:),然后我的意思是实际的重叠.
Overlad添加理论:http://en.wikipedia.org/wiki/Overlap%E2%80%93add_method
感谢您提供的所有帮助!
我知道有很多关于均衡器的问题,但是我没有得到我想要的东西.我想要做的是一个均衡器,用于修改音频样本,如:
equalizer.eqAudio(audiosamples, band, gain)
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是我想要的确切接口,因为我在实现它们方面对DSP知之甚少(我使用过滤器,限制器,压缩器但没有制造它们).
所以谷歌搜索我读到我必须对样本进行FFT,这样我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行FFT的反转,这样我再次得到音频样本的结果.我寻找了这个FFT的实现,并找到了JTransform for Java.该库具有称为离散余弦变换(DCT)的FFT相关算法的实现.
我的问题是:
谢谢!
在图形屏幕上寻找东西时,我目前对如何在图像中找到给定形状感到茫然.当然,图像中的形状可能具有不同的比例,并且将处于某个未知的x,y偏移处.
除了由不同比例产生的像素伪像之外,两个图像中也存在一点噪声,因此我需要一些容忍的搜索.
这是我要找的形象.

它应该显示在我的(双)屏幕缓冲区的屏幕转储中,大小约为3300 x 1200像素.我当然希望在浏览器窗口中找到它,但这些信息不是必需的.
这个练习的目的(到目前为止)是提出一个结果:
(x1,y1)到(x2,y2).我希望能够很好地防止缩放和抖动引起的噪声.另一方面,我可以排除一些常见的CV挑战,例如旋转或非刚性.那个框架形状很容易被人类大脑辨认出来,对于一个专用的软件来说有多难?这是一个Adobe Flash应用程序,直到最近我才认为从游戏GUI中感知图像应该很容易.
我正在寻找能够找到x和y平移的算法,在该平移处,针和干草堆之间可能发生最大重叠,并且如果可能的话,不必通过一系列可能的比例因子进行迭代.理想情况下,算法可以以与尺度无关的方式抽象出图像的"形状".
我已经阅读了一些关于傅里叶变换的有趣事情来完成类似的事情:给定相同比例的目标图像,FFT和一些矩阵数学产生了较大图像中与搜索模式相对应的点.但我没有理论背景将其付诸实践,也不知道这种方法是否能够优雅地处理规模问题.帮助将不胜感激!
技术:我使用Clojure/Java进行编程,但可以使用其他语言的算法.我想我应该能够与遵循C调用约定的库接口,但我更喜欢纯Java解决方案.
你可能能够理解我为什么不回避呈现实际图像.这只是一个愚蠢的游戏,但屏幕阅读它的任务比我想象的要困难得多.
我显然能够对我的屏幕缓冲区进行详尽的搜索,以查找构成我的图像的像素(不包括黑色),甚至可以在一分钟内运行.但我的目标是使用一种与形状相匹配的技术来发现木制框架,而不管缩放和抖动可能产生的差异.
事实上,抖动是我在这个项目中遇到的许多挫折之一.我一直在努力通过边缘提取来提取一些有用的矢量,但边缘非常难以捉摸,因为任何给定区域的像素都具有广泛不一致的颜色 - 因此很难从局部抖动伪像中分辨真实边缘.我不知道这么简单的游戏会产生难以让软件感知的图形.
在开始寻找功能之前,我应该从本地平均像素开始吗?我应该通过丢弃像素颜色值的最低有效位来减少颜色深度吗?
我正在尝试使用纯Java解决方案(实际上是用Clojure/Java混合编程)所以我并不喜欢opencv(使用C代码安装.DLL或.so).请不要担心我选择的语言,学习经验对我来说比表演更有趣.
opencv fft image-processing image-recognition computer-vision
我只是在时域中对信号进行功率谱密度分析.我正在遵循以下描述的fft方法:
http://www.mathworks.com/support/tech-notes/1700/1702.html
它给出了PSD的真实物理单位.但是,单位是"功率",是指"V ^ 2/Hz"?
如果我取10*log10(功率)或10*log10(V ^ 2/Hz),我的单位是"dB/Hz"吗?
那我怎么能把它转换成dBm/MHz?
嗨,我是音频相关编码的菜鸟,我正在使用音调跟踪DLL,我将尝试创建一种开源版本的视频游戏Rocksmith作为学习体验.
到目前为止,我已经设法使FFT工作,所以我可以通过使用算法检测音高频率(Hz),下表我可以设法确定八度音程(第2到第6)和音符(C到B)打了便条.
下一步是检测字符串,以便我可以确定音品.

我一直在考虑它,理论上我可以使用它,我会知道用户何时正在播放正确的音符,但游戏可能是"黑客",因为只使用Hz,游戏无法检测到音符以正确的字符串播放.例如,第5弦+第1音品= C4 261.63Hz等于第6弦+第5音品= C4 261.63Hz.
让用户在错误的字符串中播放音符并将其设置为正确的可能性很低,但我认为知道该字符串真的很好,所以当他们播放错误的字符串时我可以向用户提供一些错误反馈(如你应该上弦或下线).
你知道我能做些什么来检测字符串吗?提前致谢 :)
[编辑]
我们使用的吉他和琴弦会影响音色,因此分析音色似乎不是检测琴弦的简单方法:
"吉他音色的变化是由拾音器的设计和位置,吉他的自然共振和阻尼产生的,因为使用的木材(这是一种不同的木材!)及其结构和形状,你的琴弦的规格和年龄,你的演奏技巧,你烦恼和拔弦的地方,等等."
无论我如何更改数据,通过以下代码绘制的图形只是ZERO周围的峰值.我的数据只是一列,记录了某种信号的每个时间点.是time_step一个值,我应该根据两个相邻点在我的数据的时间间隔定义?
data=np.loadtxt("timesequence",delimiter=",",usecols=(0,),unpack=True)
ps = np.abs(np.fft.fft(data))**2
time_step = 1
freqs = np.fft.fftfreq(data.size, time_step)
idx = np.argsort(freqs)
pl.plot(freqs[idx], ps[idx])
pl.show()
Run Code Online (Sandbox Code Playgroud) 我很难理解什么应该是一个简单的概念.我在MATLAB中构造了一个真实且对称的向量.当我在MATLAB中进行FFT时,结果具有显着的虚部,即使傅里叶变换的对称规则说实际对称函数的FT也应该是实数和对称的.我的示例代码:
N = 1 + 2^8;
k = linspace(-1,1,N);
V = exp(-abs(k));
Vf1 = fft(fftshift(V));
Vf2 = fft(ifftshift(V));
Vf3 = ifft(fftshift(V));
Vf4 = ifft(ifftshift(V));
Vf5 = fft(V);
Vf6 = ifft(V);
disp([isreal(Vf1) isreal(Vf2) isreal(Vf3) isreal(Vf4) isreal(Vf5) isreal(Vf6)])
Run Code Online (Sandbox Code Playgroud)
结果:
0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
没有真正的对称矢量的组合(i)fft或(i)fftshift导致它们.我尝试过偶数和奇数N(N = 2^8对比N = 1+2^8).
我曾尝试寻找k+flip(k)和有秩序的一些残余eps(1),但残差也是对称的,FFT的虚部不出来是模糊的顺序eps(1),而是用大小相媲美的实部.
我错过了什么令人眼花缭乱的明显事物?
我失踪的明显的事情:
FFT不是所有空间的积分,因此它假定为周期性信号.在上面,我复制了我选择偶数期间的最后一点N,因此没有办法将它移动到零开始,而没有小数索引,这是不存在的.
关于我选择的一个词k.这不是任意的.我试图解决的实际问题是生成模型FTIR干涉图,然后我将进行FFT以获得光谱.k是干涉仪行进的距离,它在波数中转换为频率.在实际问题中,将存在各种缩放因子,使得生成函数V将产生物理上有意义的数字.