Maison  >  Article  >  développement back-end  >  Meilleure solution pour AEC en portant l'algorithme matlab/octave en C

Meilleure solution pour AEC en portant l'algorithme matlab/octave en C

DDD
DDDoriginal
2024-10-17 18:13:24677parcourir

Fait ! Un peu impressionné par moi-même.

Notre produit a besoin de la fonction d'annulation d'écho, trois solutions techniques possibles ont été identifiées,
1) utilisez MCU pour détecter la sortie audio et l'entrée audio des signaux audio, écrivez un algorithme pour calculer la force des deux côtés du signal sonore, en fonction de la force de la sortie audio et de l'entrée audio entre les deux commutations de canaux optionnelles, pour obtenir l'effet d'appel semi-duplex, mais maintenant sur le marché il y a un effet d'appel full-duplex, le semi-duplex rendra le produit moins compétitif

(2) Utilisez l'algorithme d'annulation d'écho du fournisseur de CPU, l'élimination réelle de l'écho du test n'est pas assez propre en raison de tous les paramètres réglables et des nombreuses discussions avec le fournisseur, loin de l'effet attendu. les commentaires du fournisseur sont d'améliorer le boîtier pour isoler le micro aussi loin que possible du haut-parleur, mais pas de possibilité de changer le boîtier en raison de la conception de l'identification, de la qualité du son et des exigences de volume.

(3) Téléchargez les algorithmes d'annulation d'écho open source tels que webrtc et speex depuis Internet, et portez-les sur le produit après compilation croisée.

4) Achetez les algorithmes auprès d'une entreprise spécialisée dans les algorithmes audio, mais chaque produit nécessiterait des coûts supplémentaires, ce qui réduirait considérablement la compétitivité du produit.

Après avoir pesé les options, j'ai décidé de faire une recherche approfondie sur la solution consistant à utiliser des algorithmes open source ;

J'ai donc téléchargé une série de codes d'annulation d'écho depuis github, gitee et d'autres sites, à la fois en C et en matlab.

Synthétisez les deux voix avec l'octave pour générer une section d'une scène de double conversation avec la voix de capture du micro proche ainsi que la voix de référence distante.
Ensuite, exécutez le code téléchargé en ligne pour l'annulation de l'écho, analysez l'audio de sortie et choisissez l'algorithme qui fonctionne le mieux parmi eux.

D'après les résultats, l'algorithme AEC de traitement audio webrtc n'est pas bon, l'annulation de l'écho n'est pas propre et il y a une déglutition évidente de mots dans la scène de double parole. L'algorithme AEC3 du traitement audio webrtc est propre, mais il supprime beaucoup le son de l'autre extrémité de la double parole, et le son est intermittent et peu naturel ;

Le speex a un léger écho, il est préférable de trouver une implémentation en langage matlab de l'algorithme aec, l'élimination de l'écho est très propre, le double langage seulement un léger phénomène de déglutition de mots.

Ensuite, j'utilise Visual Studio pour compiler et déboguer le code open source de webrtc audioprocessing aec, je me réfère à l'algorithme aec ci-dessus de matlab pour modifier le code, j'utilise le débogage en ligne pour définir des points d'arrêt, l'exécution en une seule étape et d'autres analyses de la valeur de l'instruction change étape par étape, et finalement obtenir les données et les résultats de l'algorithme aec du langage matlab sont identiques. Les données finales obtenues sont exactement les mêmes que le résultat de l'algorithme aec dans matlab ;

Aujourd'hui compilé sur le produit, le gain MIC et SPEAKER ajusté à une valeur raisonnable, puis l'appel réel pour tester l'effet de l'annulation d'écho, les résultats sont étonnamment bons.

Ainsi, il y a de l'espoir de concevoir un produit capable d'atteindre des ventes supérieures au petit objectif.

Best solution to AEC by porting matlab/octave algorithm to C

Best solution to AEC by porting matlab/octave algorithm to C

Best solution to AEC by porting matlab/octave algorithm to C

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn