IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Decodeur style DTMF sous C++ builder


Sujet :

C++Builder

  1. #1
    Membre habitué

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 93
    Points : 145
    Points
    145
    Billets dans le blog
    1
    Par défaut Decodeur style DTMF sous C++ builder
    Bonjour, je cherche a trouver des sources compatibles C++ Builder pour decoder des tonalités comme le DTMF, mais qui sont mono-fréquences.
    Ceux ci sont le ZVEI , CCIR , EEA, qui sont des tonalitées d'appel selectif en radio le lien vers Wikipedia (en anglais) http://en.wikipedia.org/wiki/Selcall
    http://fr.wikipedia.org/wiki/SELCAL

    J'ai essayé plusieurs codes sources, dont ceux presents sur SourceForge, et tous sont incompatible avec C++ Builder, cal ils sont fait pour faire des packages linux ou application Visual C++.
    Même après plusieurs heures de recherche et corrections d'erreurs a la compilation je n'ai pas avancé d'un pouce.

    Le but est de décoder les tonalités contenues dans une conversation radio enregistrée au format wave et d'afficher le code obtenu a l'ecran.

    J'ai testé la FFT mais je n'y comprends rien aux algos assoiciées
    je voudrais juste savoir si quelqu'un connait une source gerant l'audio d'un fichier wave dans ce sens car je pourrait ainsi gerer moi même le decodage des tonalités si je recois les frequences décodés arrivant en tant que int ou tableau de int

    Edit: J'utilise Turbo C++ 2006 Explorer

  2. #2
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Les appels sélectifs en radio ^^ ça fait longtemps que je n'avais pas revu ça.

    J'avais fait un bout de code comme ça dans les années 2000 sous builder 1.0 pour piloter des systèmes via radio en appel selectifs.

    En farfouillant j'ai retrouvé le code de la DFT ( tranformation discrète de Fourier ) qui est à l'origine de la FFT mais sans optimisation en vitesse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    // calcule la transformée de Fourier Discrète ( non-optimisée FFT ) du
    // tableau d'échantillon "Input" contenant "NbOfSamples" échantillons
    // avec la résolution "NbOfFreqSamples"
     
    int DFT(double *Input,unsigned int NbOfSamples,
    				unsigned int NbOfFreqSamples, double Te,
    				double *Output,	double *Fe)
    {
    	// initialisation
    	double PI = 3.14159;
     
    	// calcul de la transformee de Fourrier
    	double REEL[4096*2];
    	double IMAG[4096*2];
    	double MODU[4096*2];
     
    	// omega = 2.PI.f avec f = 1/T donc omega = 2.PI/NbOfFreqSamples
    	// avec NbOfFreqSamples la periode d'echentillonnage.
    	double OMEGA = 2 * PI / NbOfFreqSamples;
     
    	for (int k=0; k < NbOfFreqSamples; k++)
    	{
    		for (int m=0; m < NbOfFreqSamples; m++)
    		{
    			double ANGLE = k*OMEGA*m;
    			REEL[k]=REEL[k]+Input[m]*cos(ANGLE)/NbOfFreqSamples;
    			IMAG[k]=IMAG[k]-Input[m]*sin(ANGLE)/NbOfFreqSamples;
    		}
    	}
     
    	// CALCUL MODULE
    	for (int m=0; m < NbOfFreqSamples; m++)
    	{
    	  Output[m]=sqrt((REEL[m]*REEL[m])+(IMAG[m]*IMAG[m]));
    	}
     
    	// calcul de la periode d'echantillonnage en frequence(graduation abscisses)
    	double TE=(NbOfFreqSamples-1)*(Te/NbOfSamples);
    	*Fe = 1/TE;
    }
    En gros tu rentre un tableau contenant les échantillons de ton signal ( récupère les échantillons en provenance de la carte son ( ex: 1000 échantillons ), ton nombre de points souhaité dans l'espace de Fourier ( ex : 1024 ) et tu peux lancer la moulinette.

    Les autres paramètres ne servent qu'à savoir exactement l'écart en fréquence entre chaque point.

    Enjoy


    Edit : ha oui rajoute bien le en tête sinon ça marche pas.
    Désolé, on savait pas que c'était impossible, alors on l'a fait

Discussions similaires

  1. [PowerBuilder] Client Telnet sous Power builder 10
    Par ppronzola dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 30/01/2006, 14h22
  2. application style xp sous c++ builder
    Par sofiane44 dans le forum C++Builder
    Réponses: 1
    Dernier message: 08/01/2006, 15h17
  3. Debug de dll sous C++ Builder
    Par Négrier dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/09/2005, 19h12
  4. Comment on connecte un modem sous C++ Builder?
    Par Snipeyes dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/01/2005, 20h21
  5. DLL sous C++ builder 6
    Par ovdz dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/08/2003, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo