2017-10-08 5 views
1

J'essaie de calculer le spectrogramme pour un signal audio en utilisant scipy.signal.spectrogram. En tant que spécification de projet, il est nécessaire que les intervalles de temps soient espacés de 20 ms l'un de l'autre, mais je ne peux pas trouver un moyen de le définir.Python + Scipy: Comment définir le calendrier d'un spectrogramme?

La valeur maximale que j'ai pu obtenir était une valeur non-exacte de 5 ms après avoir modifié un peu noverlap.

Est-ce que quelqu'un sait comment y parvenir?

Merci

Répondre

1

Vous avez dit « il est nécessaire que les délais soient espacés les uns des autres 20ms ». Je suppose que cela signifie que le délai entre le début de chaque fenêtre (ou "segment") est de 20 ms. Les trois paramètres pertinents sont les suivants: fs, nperseg et noverlap. nperseg est le nombre d'échantillons dans chaque "segment". C'est-à-dire, c'est le nombre d'échantillons dans la "fenêtre" qui glisse sur les données d'entrée. noverlap est le nombre d'échantillons dans le chevauchement de fenêtres consécutives. Par conséquent, le délai entre les fenêtres de succès est nperseg - noverlap échantillons.

Vous souhaitez que la fenêtre se déplace de 20 ms, ce qui correspond à fs*20/1000 échantillons (en supposant que fs est mesurée en échantillons par seconde, c'est-à-dire Hz). Supposons que la longueur de votre fenêtre est T ms. Alors nperseg est fs*T/1000. Vous souhaitez que le chevauchement soit de T-20 ms, et donc noverlap = int(fs*(T-20)/1000).