» vux-doc-ftttricks
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

vux-doc-ftttricks

Italian

FFT Tricks

Here I'm gonna give some tricks/facts about Fast Fourier Transform, and how to use it.

Some useful FFT properties

  • When you compute a FFT, the maximum frequency you can retrieve is the samplerate divided by 2 (Also known as Nyquist Frequency).
  • FFT is a mirrored function, which means that the second half of the FFT should be a mirror of the first half (so normally you only need to use the first half).
  • The first bin of a FFT is called DC (Direct Current). It represents a frequency of 0Hz, which is not possible in theory. This number is the average of all the samples (normal samples, not fft samples).

FFT Size and buffer

the size of the FFT (also called resolution) gives you a greater accuracy as the number is higher.

To perform higher resolution, you also need more samples.

The formula is:
Samples Required = 1000 * FFTSize / SampleRate

So to calculate a 1024 bins FFT on a 44100Hz file, you need:
1000*1024/44100 = 23.21 milliseconds worth of data (so let's say 24 :)

Get FFT Bin from a frequency

The formula to find the Bin from a frequency is:
Resolution*Frequency/SampleRate

So if our FFT is 512 bins, and our file samplerate is 44100Hz, then the bin for 440Hz is:
512*440/44100 = 5.10

Which means that most of the energy for the frequency is in the Bin 5, and a small part of it is in the bin 6.

Get the Frequency from a FFT bin

As opposite, the formula to find frequency from a bin is:
Bin*SampleRate/Resolution

So the Bin 35 of a 512 FFT (sample rate as 44100Hz) is:
35*44100/512 = 3014.64Hz

Trick to process FFT

Most of the time, some high frequency bins will be very low (harmonics).
To help this , you can use the following nodes:

  • * (Value): This is the obvious, but you will double everything, and some might go outside the 0..1 range.
  • Sqrt: This is my favorite, as low peak will increase more, and high peaks will almost not change. And values will stay between 0 and 1.
  • Log : This converts the values to a log scale, useful for equalizers, but I find you lose a bit the peaks.
  • GetSpreads and Mean: You can also easily split the bins and calculate the bands like an equalizer, you lose resolution, but have less data to process. This fits pretty well for patch which will not use the same music all the time.

That's it for the moment.
I will add some help patches to try to explain some features, and add new ones as well :)

by vux

anonymous user login

Shoutbox

~10h ago

joreg: But first: This Friday in Berlin: Join our full day "Getting started with Generative Design Algorithms" workshop https://nodeforum.org/announcements/workshop-getting-started-with-generative-design/

~15h ago

joreg: In #Linz for #ArsElectronica? Join us for a free 2 days #vvvv workshop sponsored by businesses/responsive-spaces-gmbh Apply here: 2-day-gamma-vvvvorkshop-at-responsive-spaces-in-linz

~2d ago

joreg: Need your custom dose of #vvvv training? Join us at our studio in #berlin: vvvv-training-at-the-source

~8d ago

~12d ago

~13d ago

domj: Dev stream: Painting with light with a Vive controller, developing using VL and Schéma. Start at 17:00 https://www.twitch.tv/dominikjancik

~14d ago

joreg: July as it happened: vvvvhat-happened-in-july-2019 #vvvv

~15d ago

levi: @mrboni thanks mrboner. solved it by turning all the lights to strobe mode so framerate drops were actually a relief :P . love

~15d ago

joreg: reminder: this thursday, just before the patching circle, there is a free 2h intro to #vvvv gamma: free-vvvv-intro-workshops-this-summer-in-berlin