I get an array of numbers for each bang in the console.
Can someone tell me what these numbers represent?
are they amplitudes of the signal at various time points in chronological order?
if I use [tabwrite~] to store them in an array in my patch instead of printing them to the console are the indices then in chronological order?
how does one get the frequency content of the signal back from this array of amplitude/time points?
I guess this is a question that is related to how FFTs work maybe...
I am giving away the fact that I am not a signal processing wizard here, but I would be very interested to know how these different numeric representations of these signals show their (the same?) information..
thanks!
J
I get an array of numbers for each bang in the console.
Can someone tell me what these numbers represent?
are they amplitudes of the signal at various time points in chronological order?
if I use [tabwrite~] to store them in an array in my patch instead of printing them to the console are the indices then in chronological order?
how does one get the frequency content of the signal back from this array of amplitude/time points?
I guess this is a question that is related to how FFTs work maybe...
I am giving away the fact that I am not a signal processing wizard here, but I would be very interested to know how these different numeric representations of these signals show their (the same?) information..
thanks!
J
if I make a simple patch like this:
[osc~ 220]
 [bang]

[print~]I get an array of numbers for each bang in the console.
Can someone tell me what these numbers represent?are they amplitudes of the signal at various time points in chronological order?
Yes. Kind of. It's the value of each sample within the current DSP block (buffer) at the time of the bang. To test the chronology you could use a [phasor~] instead of [osc~] and have the same bang trigger a [0( message connected to phasor's phase input.
if I use [tabwrite~] to store them in an array in my patch instead of printing them to the console are the indices then in chronological order?
Yes, from the time of the bang and throughout the table. The difference here is that printing the buffer will give you as many samples as the block size (64 by default), where as you can set your table/array to be any length you like (you can also change the DSP block size on the fly with [block~] or [switch~] but only to powers of 2)
how does one get the frequency content of the signal back from this array of amplitude/time points?
I guess this is a question that is related to how FFTs work maybe...
FFT is indeed how you analyse frequency content. Samples stored in an array are a representation of your signal in the time domain. An FFT block is a representation of your signal in the (complex) frequency domain.
I am giving away the fact that I am not a signal processing wizard here, but I would be very interested to know how these different numeric representations of these signals show their (the same?) information..
thanks!
J
Your intuition is spot on, so don't beat yourself up.
Here is some good reading adressing everything you've touched on: http://www.pdtutorial.com/english/ch03s08.html
]]>Then, I am looking at an FFT from which you can get a similarlooking array
and is it that the first value will be the lowest frequency and then each subsequent value is another frequency band, with the total number of bands being the block size
(so, if the blocks are set to 512, then there are 512 bands of analysis arranged low to high?)
How do you find out what the center of each of these frequency bands is (I mean without a gui, from the design side)
are each of these bands just equally divided (linear) values in hz based on the nyquist frequency or sampling rate (i.e. (44100/2)/512)
or is there some other logic to the spread of frequencies represented by the different bands?
and is it that the first value will be the lowest frequency and then each subsequent value is another frequency band, with the total number of bands being the block size
Yes, but divided by 2 in order to accommodate the imaginary part  half the block
(so, if the blocks are set to 512, then there are 512 bands of analysis arranged low to high?)
Sort of...
How do you find out what the center of each of these frequency bands is (I mean without a gui, from the design side)
are each of these bands just equally divided (linear) values in hz based on the nyquist frequency or sampling rate (i.e. (44100/2)/512)
or is there some other logic to the spread of frequencies represented by the different bands?
You answered your own question. The bandwidth/spread is entirely linear and proportional to samplerate/block size
Take a look at fft~help.pd:
The real FFT outputs N/2+1 real parts and N/21 imaginary parts. The other outputs are zero. At DC and at the Nyquist there is no imaginary part, but the second through Nth output is as a real and imaginary pair, which can be thought of as the cosine and sin component strengths.
If you are at 44.1khz / 64 samples pr block, your bandwidth will be ~689Hz, first sample pair will be DC to ~689, Second will cover ~689Hz to ~1378Hz and so forth up until nyquist
]]>