# Spectrum Analysis: Understanding the results of Amplitude Spectrum/Power Spectrum calculation

Started by February 9, 2006
```Hello,

I have no idea how to interpret my results of Amplitude Spectrum calculation
correctly:

Here is what I have done:

I read in AudioSamples from Mono 16Bit 22050Hz File and normalize it to
[-1,1]

Then I use fftw to make a forward realFFT and calculate the Amplitude
Spectrum with

sqrt(re * re + im * im);

Or should it be "sqrt(re * re + im * im) / number FFT points;" ?

What is more, I do not know what is the possible minimum and maximum value
which could be expected when calculating the amplitude spectrum (I want to
plot the spectrogram and therefore I need to find the proper min/max values
for the axis).
Due to the function written above I achieve values like 0.182323 and I do
not know how to interpret that result.

The power spectrum shows power at each frequency line. Which value stands
for minimal power and which for maximum power?

Converting to Logarithmic Units:
You use the formula 20* log10( Amp/AmpReference ) to convert Amplitude
Spectrum to decibel ratio. Which value does AmpReference have?

```
```Michael wrote:
> Hello,
>
> I have no idea how to interpret my results of Amplitude Spectrum calculation
> correctly:
>
> Here is what I have done:
>
> I read in AudioSamples from Mono 16Bit 22050Hz File and normalize it to
> [-1,1]

How?

> Then I use fftw to make a forward realFFT and calculate the Amplitude
> Spectrum with
>
> sqrt(re * re + im * im);

No need to take the square root if you later take the log. Instead of
20*log(), simply use 10*log().

> Or should it be "sqrt(re * re + im * im) / number FFT points;" ?
>
> What is more, I do not know what is the possible minimum and maximum value
> which could be expected when calculating the amplitude spectrum (I want to
> plot the spectrogram and therefore I need to find the proper min/max values
> for the axis).

The minimum is the smallest value; the maximum is the largest. If you
already normalized to +/-1, the maximum is unlikely to exceed 1 by much.

> Due to the function written above I achieve values like 0.182323 and I do
> not know how to interpret that result.

It's a relative number that will vary with the setting of the volume
control and the choice of reference.

> The power spectrum shows power at each frequency line. Which value stands
> for minimal power and which for maximum power?

The smaller the number, the smaller the power.

> Converting to Logarithmic Units:
> You use the formula 20* log10( Amp/AmpReference ) to convert Amplitude
> Spectrum to decibel ratio. Which value does AmpReference have?

Whatever is appropriate to your problem. Recall that
log(a/b) = log(a) - log(b)
So that the choice of reference just shifts the graph up or down without
changing its shape.

Jerry
--
Engineering is the art of making what you want from things you can get.
&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;
```
```Hi again,

>> I read in AudioSamples from Mono 16Bit 22050Hz File and normalize it to
>> [-1,1]
>
> How?

I divide all the sample values by 32768 (16Bit)

>> Then I use fftw to make a forward realFFT and calculate the Amplitude
>> Spectrum with
>>
>> sqrt(re * re + im * im);
>
> No need to take the square root if you later take the log. Instead of
> 20*log(), simply use 10*log().

>> Converting to Logarithmic Units:
>> You use the formula 20* log10( Amp/AmpReference ) to convert Amplitude
>> Spectrum to decibel ratio. Which value does AmpReference have?
>
> Whatever is appropriate to your problem. Recall that
>            log(a/b) = log(a) - log(b)
> So that the choice of reference just shifts the graph up or down without
> changing its shape.
>

Okay, my goal is to visualize a graph of time against frequency (darker
points mean higher density).
Later, it should be possible to find parts with high energy or to do
spectral smoothing or to sum up adjacent frequency bands.

Lets say I have 22050Hz input , 1024 FFT coefficients. Thus, I could
separate frequency bands of about 21 Hz (22050/1024)

So, i do not need any information about phase? Therefore, just calculate the
Power Spectrum instead of Amplitude Spectrum? And visualize the result in
decibel ratio with 10*log(re*re + im*im).
And leave the AmpReference to zero, thus log( Amp/AmpReference ) =
log(Amp) - log(1)

And what about windowing? A frame shift of 50% means to shift a
1024-point-fft through the audio file by a step factor of 512?

Thank you very much, Michael

```