No tiene por qué decepcionarte, es como si te decepciona que cuando usas un microscopio, cuanto más aumentas menos espacio cubres.
Piensa que para poder detectar componentes espectrales tienes que analizar cierta cantidad de tiempo, para que la periodicidad de la componente afecte a la transformada. El caso de análisis más rápido sería un buffer de una sola muestra, ya me dirás qué periodicidad va a salir ahí.
En cualquier caso puedes aumentar la precisión de muchas maneras, por ejemplo corriendo la ventana de análisis con solapamiento, o usando ventanas que minimicen la dispersión espectral.
Sigues confundiendo el espectrograma con el espectro. El espectrograma es la concatenación en el tiempo del espectro de una pequeña parte (ventana) de la señal total, para visualizar de forma aproximada la evolución del espectro a lo largo del tiempo.
En ninguna parte dice que del espectrograma se reconstruya la señal, la señal se reconstruye del espectro (magnitud y fase). La señal total se reconstruye perfectamente a partir del espectro total, y de cada línea vertical del espectrograma se puede reconstruir perfectamente el trocito de señal que se usó para calcularla. Si se sabe qué tipo de ventana y qué solapamiento se ha usado para calcular el espectrograma sí se podría calcular a partir de él la señal original.
Mira, una sesión del software de análisis matemático octave, el equivalente en software abierto a MatLab:
Alguien escribió:
octave:1> s=[0,1,2,3,4,5,6,7];
octave:2> f=fft(s)
f =
Columns 1 through 3:
28.0000 + 0.0000i -4.0000 + 9.6569i -4.0000 + 4.0000i
Columns 4 through 6:
-4.0000 + 1.6569i -4.0000 + 0.0000i -4.0000 - 1.6569i
Columns 7 and 8:
-4.0000 - 4.0000i -4.0000 - 9.6569i
octave:3> s2=ifft(f)
s2 =
0 1 2 3 4 5 6 7
Reconstrucción perfecta.