加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – 使用computeSpectrum()进行音高检测返回FFT值

发布时间:2020-12-15 19:48:27 所属栏目:百科 来源:网络整理
导读:我正在使用ActionScript 3.0 for Flash Player 10.3进行开发 我在加载的.mp3上使用computeSpectrum() 运行* Event.ENTER_FRAME *以获取byteArray中每个样本的快照 ByteArray包含512个值(每个通道256个).这些值是FFT Spectrum,范围从0到1. 我不能使用每个样本
>我正在使用ActionScript 3.0 for Flash Player 10.3进行开发
>我在加载的.mp3上使用computeSpectrum()
>运行* Event.ENTER_FRAME *以获取byteArray中每个样本的快照
> ByteArray包含512个值(每个通道256个).这些值是FFT Spectrum,范围从0到1.
>我不能使用每个样本的峰值频率(正如我发现的那样!)因为最高值不一定是基频!
结果我得到了很多随机值!
当然我也得到了一些正确的,但这还不够!

我发现了自动关联……
有人能给我一个如何使用它的例子吗?

或链接,或示例脚本甚至从其他脚本语言来获取它?

问候
initcode

解决方法

听起来你已经了解如何获得FFT频谱,对吧?

?http://flic.kr/p/7notw6

但是,如果你正在寻找基础(绿点),你不能只使用最高峰.它不一定是根本.在我的例子中,实际基波是100 Hz,但最高峰值是300 Hz.

您可以通过许多不同的方式找到真正的基础,并且每种方法在不同的环境中都能更好地发挥作用. comp.dsp上的一个帖子提到“FFT,倒谱,自动/互相关,AMDF / ASDF”.

举一个简单的例子,每个红点距离它的邻居都是100赫兹,所以如果你使用峰值寻找算法,然后将每个谐波和下一个谐波之间的距离平均在一起,你就会发现它的根本,但是如果错过任何峰值,或者包括额外的峰值,或者如果信号是对称的并且仅包含奇次谐波(1f,3f,5f),则失败.你需要找到模式,然后扔掉异常值然后平均.这可能是一种容易出错的方法.

您还可以对原始波形进行自相关.从概念上讲,这意味着将波形的副本滑过自身,并找到最适合自身的延迟(这将是一个完整的周期).在正常实施中,we use the FFT,though,to speed it up.基本上是自相关

> IFFT(FFT(信号)?FFT(信号)*)

其中*表示复共轭或时间反转. In Python,for instance:

correlation = fftconvolve(sig,sig[::-1],mode='full')

而fftconvolve()的来源相对简单:https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L133

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读