2010-03-14 4 views
0

J'ai lu un code pour la détermination du pas en utilisant la méthode d'autocorrélation. Quelqu'un peut-il s'il vous plaît dire quelles seraient les données d'entrée (passé comme argument à DetectPitch()) fonction ici:Méthode d'autocorrélation pour la détermination de la hauteur: quelle est la forme des données d'entrée?

double DetectPitch(short* data) 
{ 
    int sampleRate = 2048; 

    //Create sine wave 
    double *buffer = malloc(1024*sizeof(short)); 
    double amplitude = 0.25 * 32768; //0.25 * max length of short 
    double frequency = 726.0; 
    for (int n = 0; n < 1024; n++) 
    { 
     buffer[n] = (short)(amplitude * sin((2 * 3.14159265 * n * frequency)/sampleRate)); 
    } 

    doHighPassFilter(data); 

    printf("Pitch from sine wave: %f\n",detectPitchCalculation(buffer, 50.0, 1000.0, 1, 1)); 
    printf("Pitch from mic: %f\n",detectPitchCalculation(data, 50.0, 1000.0, 1, 1)); 
    return 0; 
} 
+0

Votre question est très vague - s'il vous plaît indiquer clairement ce qu'il est que vous avez un problème ici. Vous avez probablement aussi besoin de poster le code pour detectPitchCalculation. –

Répondre

2

Il semble que vous devez au moins le changement:

double *buffer = malloc(1024*sizeof(short));

à:

short *buffer = malloc(1024*sizeof(short));

2

Il semble que les « données » est utilisé exactement de la même manière que la somme allouée localement « tampon », donc je sup il s'agit de quelque chose comme short data[1024], c'est-à-dire 1024 échantillons de signaux entre -32768 et 32767 (la manière dont "amplitude" est calculée fait supposer que le type "court" est de 16 bits ici). Par ailleurs, en tant que "longueur maximale de court" (comme le dit le commentaire) je m'attendrais à 32767, pas à 32768 (il y a un débordement théorique avec des valeurs positives maximales).

Cordialement

+0

Comme l'a noté Paul R, le type de "tampon" serait probablement "court *". –

+0

+1: Vous avez raison sur la première partie concernant les données d'entrée mais la dernière partie sur le débordement n'est pas un problème - c'est juste un calcul d'amplitude et les valeurs d'onde sinusoïdale varient entre +/- 8192. –

+0

note était seulement sur le commentaire "longueur maximale de court", car il est en général plus sûr d'utiliser 32767, d'un point de vue théorique. –

Questions connexes