2011-05-21 3 views
1

Je suis un étudiant en ingénierie et je dois résoudre un problème académique concernant le traitement du signal. Fondamentalement, étant donné un signal DTMF au format wav, je dois identifier la séquence de chiffres qu'il a codé. Je dois le faire en utilisant l'analyse de transformée de Fourier discrète dans l'environnement Matlab, pour construire un script qui lit le fichier wav et, à travers le processus, identifie les numéros dans la tonalité. J'ai des problèmes dans le sens où je ne suis pas vraiment à l'aise avec l'environnement Matlab et toute l'analyse de Fourier discrète est aussi très nouvelle pour moi, donc je me sens un peu perdue.Détection DTMF à partir d'un fichier wav

Est-ce que quelqu'un a de bons conseils ou des pointeurs à partager?

+0

Après quelques recherches, j'ai trouvé des mentions d'un algorithme qui pourrait être implémenté concernant ce problème, l'algorithme de Goertzel. Je l'ai trouvé un peu difficile à prendre parce que je ne peux pas trouver la relation à mes données de problème. Je sais déjà que je dois utiliser une DFT de 256 points dans ma procédure de calcul pour découvrir quel est le numéro de téléphone codé dans le fichier, mais je n'ai aucune idée de comment y arriver. – Joum

Répondre

3

Une DFT (ou FFT) est trop lourde pour la détection DTMF. Vous avez juste besoin de filtres Goertzel 2 x 4 pour détecter les sons graves et aigus. La sortie de chaque filtre Goertzel devra être filtrée passe-bas pour éviter la détection de bruit, mais à part cela, c'est assez simple.

Si l'utilisation de DFT/FFT est obligatoire alors l'approche générale serait:

  • pour chaque bloc d'échantillons d'entrée
    • appliquent fenêtre appropriée (par exemple Hanning)
    • effectuer DFT
    • Calculer la magnitude de chaque bac DFT (re * re + im * im)
    • mesurer la magnitude à chacun des 8 bacs qui correspondent aux tonalités 2 x 4 DTMF
    • si vous avez un ton de groupe de haut et un ton faible groupe qui ont beaucoup plus grande ampleur que les autres tonalités du groupe puis une paire de tonalité DTMF a été détecté
+0

merci pour la réponse, mais l'utilisation DFT est une condition requise, pas une option. – Joum

+0

@joum: OK alors - voir mise à jour de la réponse ci-dessus –

+0

merci beaucoup pour la réponse rapide! après avoir consulté d'autres étudiants, nous sommes pratiquement d'accord sur cette même approche. l'obstacle principal est maintenant l'aspect programmation de ce problème, mais nous travaillons déjà dessus. Je vais essayer de poster le code ici pour référence plus tard. merci à tous! – Joum

0

une magnitude DFT de données réelles est à peu près équivalent à N/2 filtres de Goertzel orthogonaux de longueur N. Et une FFT est juste un algorithme DFT rapide. Si vous devez utiliser une FFT parce que cela fait partie de la spécification, faites attention aux cases FFT qui correspondent aux fréquences des filtres Goertzel nécessaires pour capturer les tonalités DTMF requises, et convertissez le résultat complexe en grandeurs.

fft_bin_frequency = fft_bin_number * sample_rate/fft_length ; 

Contrôle d'intégrité de toute tonalité présumée par rapport à l'énergie totale d'amplitude FFT. Si le rapport est "petit", il peut s'agir de bruit dans le bac fft au lieu d'un son DTMF.

Questions connexes