Python >> Tutoriel Python >  >> Python Tag >> SciPy

Mauvais spectrogramme lors de l'utilisation de scipy.signal.spectrogram

Le mode de mise à l'échelle par défaut pour specgram est 'dB' (d'après la documentation de specgram)

échelle :[ ‘défaut’ | ‘linéaire’ | ‘dB’ ] La mise à l'échelle des valeurs dans la spécification. 'linéaire' n'est pas une mise à l'échelle. ‘dB’ renvoie les valeurs en échelle de dB. Lorsque le mode est "psd", il s'agit de la puissance dB (10 * log10). Sinon, c'est l'amplitude en dB (20 * log10). 'default' est 'dB' si le mode est 'psd' ou "magnitude" et "linéaire" dans le cas contraire. Celui-ci doit être "linéaire" si le mode est "angle" ou "phase".

mode :[ 'par défaut' | 'psd' | 'ampleur' ​​| 'angle' | 'phase' ] Quel type de spectre utiliser. La valeur par défaut est "psd" , qui prend la densité spectrale de puissance. ‘complex’ renvoie le spectre de fréquence à valeur complexe. ‘magnitude’ renvoie le spectre de magnitude. 'angle' renvoie le spectre de phase sans dépliage. 'phase' renvoie le spectre de phase avec déroulement.

Pour obtenir des résultats similaires avec pcolormesh vous devrez mettre les données à l'échelle de manière équivalente.

plt.pcolormesh(times, frequencies, 10*np.log10(spectrogram))

Je ne pense pas que l'exemple pcolormesh soit correct dans sa mise à l'échelle. Vous pouvez clairement voir la porteuse dans l'exemple mais le signal de bruit ajouté n'est pas visible.