Processing-Minim翻译----------Class FFT

尊重原创,http://blog.csdn.net/y1196645376/article/details/53319142
转载请申明出处,谢谢!

FFT

  • extends FourierTransform

FFT代表了快速傅里叶变换, 它是一种高效的计算复数离散傅里叶变换的有效方法.对于这个类没有什么其他好说的了,因为当你想要分析音频缓冲区的频谱的时候,你几乎总是使用这个类。这个类有个限制是如果你想要分析的声音缓冲区的长度必须是2的幂. 如果你想通过一个timeSize不是2的幂的声音构建FFT, 那么将会抛出IllegalArgumentException 。
傅里叶变换是在时域中变换信号的算法, 就例如样本缓冲器, 转换成频域中的信号,通常称为频谱. 频谱不代表个体的频率, 但是实际上代表了以特定频率为中心的频带. 每个频带的中心频率通常表示为时域信号的采样速率,并且等于频带的索引除以频带的总数。频带的数量通常等于时域信号的长度, 但只提供访问频率波段指数小于长度的一半,因为他们符合低于Nyquist频率的频率。换句话说,给定一个长度为N的信号,在频谱中会有N / 2个频带。
作为一个例子,我们将通过一个时间大小为1024以及采样率为44100Hz来构造一个FFT, 然后频谱将包括频率低于22010HZ的值, 这就是Nyquist频率(一半的采样率).如果你想要询问五号带的值, 它将对应一个以5/1024 * 44100 = 0.0048828125 * 44100 = 215 Hz为中心的频带. 频带的宽度等于2/1024, 表示为频谱的总带宽的一小部分. 频谱的总带宽等于Nyquist频率, 在本例中为22050, 所以带宽约为50Hz. 你没有必要记住所有这些关系,可是意识到它们是有意义的。 函数 getFreq() 允许你查询频谱的频率(HZ),以及函数 getBandWidth() 将会返回频谱中每个频带的带宽(HZ)。
使用:
FFT的典型用途是分析信号,使得频谱可以以某种方式表示, 通常使用竖直线。 你可以在Processing中使用如下代码, audio 是一个AudioSource,fftis是一个FFT。

fft.forward(audio.left);
 for (int i = 0; i < fft.specSize(); i++)
 {
   line(i, height, i, height - fft.getBand(i) * 4);
 }



构造概述:

FFT(int timeSize, float sampleRate)
通过一个timeSize大小并且采样速率为sampleRate的缓冲区构造FFT



方法概述:

public void scaleBand(int i,float s)
用s缩放第i个频带的幅度。 在使用inverse()之前,可以使用此函数对频谱进行整形。
Specified by:
        scaleBand in class FourierTransform
Parameters:
        i - int: 要修改的频带
        s - float: 缩放因子

public void setBand(int i,float a)
将第i个频带的幅度设置为a。在使用inverse()之前,可以使用此函数对频谱进行整形。
Specified by:
        setBand in class FourierTransform
Parameters:
        i - int: 要修改的频带
        a - float: 新值

public void forward(float[] buffer)
对缓冲区的执行向前变换。
Specified by:
        forward in class FourierTransform
Parameters:
        buffer - float[]: 要分析的缓冲区大小必须等于timeSize()。

public void forward(float[] buffer,int startAt)
对缓冲区的执行向前变换。
Specified by:
        forward in class FourierTransform
Parameters:
        buffer - float[]: 要分析的缓冲区大小必须等于timeSize()。
        startAt - int: 缓冲区开始的序号,如果发生错误将不会执行,数据会还原回去。

public void inverse(float[] buffer)
进行频率谱的反变换,并将结果放在缓冲区中
Specified by:
        inverse in class FourierTransform
Parameters:
        buffer - float[]: 对缓冲区指向前向信息进行逆变换。


本人英语水平有限,若有翻译错误的地方,还望见谅。!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值