我一直在看Apple的示例代码中的aurioTouch 2(在这里找到).在一天结束时,我想自己分析频率.现在我想了解一些正在发生的事情.我很抱歉,如果这是微不足道的,只是试图了解一些未经注释的魔术数字在某些来源中浮动.我现在的主要困惑点是:
hoo*_*oop 13
嗯,这对我来说也不算微不足道,但这就是我理解它的方式.如果我过度简化它纯粹是为了我的利益,我不是故意要光顾.
将对应于奈奎斯特频率的结果归零:
我假设我们正在计算1024个输入样本的正向FFT.在44100hz输入这通常是我的情况(但不是AurioTouch正在做的,我觉得有点奇怪,但我不是专家).我更容易理解具体的价值观.
鉴于1024(n)的输入采样,布置为需要(偶数索引第一然后奇数索引{在[0],在[2],[4],...,在1,在[3],[5]中,...})(用于vDSP_ctoz()订购输入)
FFT 1024(n)输入样本的输出是513((n/2)+1)个复数值.即513个实部和513个虚部,总共1026个值.
然而,虚[0]和虚[512](n/2)总是必然为零.因此,通过将实数[512](奈奎斯特频率仓的实部)放置在虚[0]并遗忘虚[512] - 总是为零并且可以推断出,将结果打包到1024(n)长度的缓冲区中.
因此,要使返回的结果有效,您必须至少将imaginary [0]设置为零.如果您需要所有513((n/2)+1)频率分档,则需要在结果中附加另一个复杂值并进行设置.
unpackedVal = imaginary[0]
real[512]=unpackedVal, imaginary[512]=0
imaginary[0] = 0
Run Code Online (Sandbox Code Playgroud)
在AurioTouch中我总是认为他们只是不打扰.n/2结果显然更方便使用,你几乎无法从可视化器中看出: - " 哦,看,它在奈奎斯特频率上缺少一个幅度 "
NB特定值1024,513,512等是示例,而不是来自AurioTouch的n,(n/2)+ 1,n/2的实际值.
它们将所有内容缩小了-128db
不完全是,输出值的范围是相对于输入样本的数量,因此必须进行标准化.比例为1.0 /(2*inNumberFrames).
缩放后范围是-1.0 - > +1.0.然后获取复矢量的幅度(忽略相位),给出0和1.0之间的每个频率仓的标量值
然后将该值解释为介于-128和0之间的分贝值
绘画的东西...... +80/64. ...*120 ......我不确定.我可能完全错了,或者可能是......艺术执照?
| 归档时间: |
|
| 查看次数: |
3350 次 |
| 最近记录: |