How can an FFT plot not be symmetrical? From discussions all over the internet, I understand that in a 512 sample point fft, only the first 256 contain relevant information provided that my signal is real. The other half contains complex conjugates of the first half. I base my question on this discussion at stack exchange.

I'm trying to plot the fft of a wav file. I used 2 files - one wav file containing some music and another that was generated by scrip to play at 440Hz.
The fft plot of the 2nd (440hz signal) showed 2 peaks - one at 440hz and another at the other end of the plot. This was expected. However, plot of the music wav file was asymmetric. How can that be?


I used the file onclassical_demo_elysium_anonymous-elysium_the-young-false-man_small-version_live-and_restored found here. Scipy did not parse it properly first and I had to strip the meta tags using audacity before I could get it working.

I used print  and I got this for the 440hz tone :

[ 203395.00000000  +0.j          203395.08226712 -57.78564066j
203395.32901382-115.57039787j ...,  203395.74007235+173.35334037j
203395.32901385+115.57039784j  203395.08226713 +57.78564063j]


For the music file, I got this :

[[ 2.+0.j -4.+0.j]
[-1.+0.j -7.+0.j]
[ 0.+0.j -2.+0.j]
..., 
[ 0.+0.j -6.+0.j]
[ 0.+0.j -2.+0.j]
[ 1.+0.j -1.+0.j]]


I don't think any of them are symmetrical! Or else the first and last values should coincide at least in the real part right?

And just for the sake of it, the 440hz signal plot : 



I tried plotting abs(fft) - still asymmetrical. Also, why is the plot having both blue and green colors - real and complex parts?
Using the wav version of the file you linked to I performed an fft in matlab and got:

First 3 terms:

 left channel       right channel
-1.1594 + 0.0000i  -1.8450 + 0.0000i
-0.4186 - 1.0013i  -0.2851 - 1.7655i
 0.5507 - 0.7589i   1.0478 - 0.4655i


Last 3 terms:

 left channel       right channel
 0.7388 - 0.3032i   0.4740 - 0.6654i
 0.5507 + 0.7589i   1.0478 + 0.4655i
-0.4186 + 1.0013i  -0.2851 + 1.7655i


Looks conjugate symmetrical

I wonder if you are processing the left and right channels at the same time and it is thinking it is a 2d signal or a complex valued signal.

The only way you get an asymmetric fft result is if the signal is complex.