2009-10-23 15 views
3

J'essaie de détecter l'entrée de voix à travers du microphone en temps réel.Fréquence fondamentale + détection de la voix dans C#

Je reçois déjà l'entrée, exécute l'algorithme FFT et ai le résultat en dB. J'ai un domaine fréquentiel, un domaine temporel et un spectogramme.

Comment puis-je obtenir la fréquence fondamentale? Si j'obtiens la fréquence fondamentale, puis-je spécifier que si la fréquence est comprise entre certaines valeurs, alors c'est la voix dont nous parlons? Existe-t-il un autre moyen de faire cela avec les choses que j'ai déjà?

TKS à l'avance

+0

"Spectrogramme", ou "spectre"? Ce ne sont pas la même chose. – endolith

Répondre

1

Prenez le plus haut sommet du spectrogramme qui est dans la plage pour la voix (par exemple, 400 à 10K hz). Cela devrait vous donner la fréquence fondamentale. Alternativement, vous devrez peut-être intégrer un histogramme de fréquences. C'est parce que parfois vous avez des mots qui commencent ou contiennent des sifflantes ("s" sons) et des fricatives ("f" et "th" sons) qui ont des fréquences assez élevées et un large spectre. Vous ne voulez pas manquer le début du discours parce qu'il a commencé avec autre chose qu'une voyelle.

Un autre facteur est ce que vous pourriez prendre en plus de la voix. Y a-t-il beaucoup de bruit de fond? Quel genre? S'il n'y en a pas, alors la présence du son suffit. Si, par exemple, il y a de la musique, alors vous avez un tout autre défi. Si vous essayez de faire la distinction entre la voix et certains autres sons, alors je serais tenté d'essayer une approche de réseau de neurones - il est susceptible d'avoir besoin d'un tel niveau de complexité.

+2

C'est une idée fausse commune, mais la fréquence fondamentale n'est pas nécessairement le plus grand pic du spectre. En voix, cela dépend de la façon dont les harmoniques s'alignent avec les formants, et peuvent changer en fonction de la fréquence et de la qualité du son. – tom10

3

Il existe de nombreux algorithmes différents pour frequency estimation, et le bon à utiliser dépend de ce que vous faites. Quels types d'intrants vous attendez-vous? Que voulez-vous faire avec cette entrée? Quel genre de puissance de traitement avez-vous?

La détection de la fréquence fondamentale ne va pas vous aider à identifier si une personne en particulier parle, si c'est ce que vous essayez de faire. La fréquence de votre voix change constamment. Vous devez faire une «empreinte digitale» des formants de la personne, etc.

Trouver simplement le pic de la FFT ne vous donnera pas de bons résultats pour la voix. Regardez dans cepstral analysis.