Why is there a mismatch between normalized cross-correlation and perception for basic waveforms? To my ears, sawtooth and square waves are more similar to each other than either one is to a triangle wave. However, when I compare their magnitude spectra against each other using normalized cross-correlation, the square and triangle waves are the most similar to each other, followed by the sawtooth and triangle waves. Does anyone know what the source of this apparent mismatch is?
Sawtooth: 

Even and odd harmonics, falling off at 1/n 

Square: 

Odd harmonics only, falling off at 1/n

Triangle: 

Odd harmonics only, falling off at 1/n2



So while triangle and square have the same set of frequencies present, the spectral envelope of sawtooth and square is more similar, with much stronger high frequency harmonics.  Triangle waves are simpler/closer to a sine wave.

(Also, if you're generating them digitally, it's uncommon for them to be bandlimited, which produces worse aliasing artifacts with the square and sawtooth than with the triangle.  This would be most audible with frequency sweeps or high fundamental frequencies.)