Bins are spaced sample_frequency/fft_size hz apart. And you take
the magnitude of the polar coordinates: sqrt(i*i+r*r) to calculate the
magnitude of the signal. The resulting magnitiude isbetween zero and 1
(for in-range signales), and you would convert db2a to get a db value. For
signal power, as opposed to magnitude, you multiply by two (or
don’t take the square root).
You’ll need to multiple the samples in the input with a window
function in order to get sensible values. See http://en.wikipedia.org/wiki/Window_function#Hamming_window
Hamming, or Hann window functions would be good choices.
Without a window function, all you’ll get is the frequency of the step
response at the start and end of the FFT frame – which is terribly useful.
From: chuck-users-bounces@lists.cs.princeton.edu
[mailto:chuck-users-bounces@lists.cs.princeton.edu] On Behalf Of Lucas
Samaruga
Sent: Thursday, March 04, 2010 10:30 PM
To: ChucK Users Mailing List
Subject: Re: [chuck-users] Simple question about getting a basic frequency
spectrum
Hello v bar
Just an approximation, I suggest a good book or internet
resource.
The polars you have are the magnitud (amp) and phase of each
band of frequencies. The bands of frequencies you have are defined by the
ratio between the sampling rate the windows size, that ratio is the
analysis frequency. In this case, the analysis frequency is 44100 / 1024 =
43.06640625. Then you have windowssize / 2 = 512 harmonically related bands
starting from 43.066 and... I strongly suggest a good reading, sorry I don't
have nothing at hand right now.
Best
Lucas
2010/3/5 v bar <vomc8one@gmail.com>
Hi,
I am a little confused with fourier-transforms, math not being my specialty.
In essence all I am trying to do is take 1 second samples of an audio
file and print out coordinates as follows:
- amplitude at 80Hz, amplitude at 200Hz, amplitude at 1000Hz
I have set up a file connecting:
SndBuf buf => dac;
buf => FFT fft => blackhole;
And now I assume that I set the fft.size to 1024 samples (for a 44k
16bit audio file) and then upchuck that every 1024 samples.
Most likely my error is there...
But now I don't know how to get at the correct output.
I have a ton of polar values but I don't really know what any of them
correspond to.
Some sample values:
"time: 0:5000.0000" : (string)
%(0.0140,-0.9985*pi) %(0.0004,-0.6629*pi) %(0.0001,-0.4812*pi)
%(0.0001,-0.4412*pi) %(0.0001,-0.7007*pi) %(0.0001,-0.7549*pi)
%(0.0001,-0.5928*pi) %(0.0000,0.7277*pi) %(0.0000,0.0000*pi)
%(0.0000,0.0000*pi) %(0.0000,0.0000*pi) %(0.0000,0.0000*pi)
"time: 0:6000.0000" : (string)
%(0.0189,0.0008*pi) %(0.0003,0.4507*pi) %(0.0001,0.2899*pi)
%(0.0001,0.2122*pi) %(0.0001,0.3072*pi) %(0.0000,0.5483*pi)
%(0.0001,0.1053*pi) %(0.0000,0.2292*pi) %(0.0000,0.0000*pi)
%(0.0000,0.0000*pi) %(0.0000,0.0000*pi) %(0.0000,0.0000*pi)
"time: 0:7000.0000" : (string)
%(0.0148,0.9997*pi) %(0.0002,0.4662*pi) %(0.0002,0.1996*pi)
%(0.0001,0.4250*pi) %(0.0001,0.2651*pi) %(0.0001,0.4396*pi)
%(0.0000,0.9036*pi) %(0.0001,0.4967*pi) %(0.0000,0.0000*pi)
%(0.0000,0.0000*pi) %(0.0000,0.0000*pi) %(0.0000,0.0000*pi)
Can someone help? I bet this is actually pretty simple I just can't
seem to figure it out. I understand the notion of polar coordinates
and know how I can convert them to Cartesian. But what I am not
understanding is where I find out what the actual frequencies that are
being sampled are...
Thanks
- J
--
---- vomc8one@gmail.com ----
_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users