Audio Sample interpolieren



  • Hi an alle,

    ich möchte ein Audio Sample mit 8kHz 16bit 1 Channel PCM in ein 16kHz 16bit 1 Channel PCM interpolieren.
    Es handelt sich um ein 20 ms Sekunden großes Sample, welches im GSM Standard kommt und dann via GSM Decodierung in das besagte 8Khz Sample codiert.

    Wenn ich die Interpolation benutze mit der ich auch meine uLaw und aLaw eingehenden Samples überarbeite, klingt dies für diese beiden auch alles wunderbar, aber für die aus GSM codierten Samples klingt alles sehr mechanisch.

    Hier mal meine ganz simple lineare Interpolation:

    //anzSamples = 160; 
    short* decodeAudio = new short[anzSamples];
    const int RATIO = (SAMPLERATE/8000); //SAMPLERATE = 16000
    const int size = anzSamples * RATIO; //RATIO = 2
    short* upsampledAudio = new short[size];
    for(int i = 0; i < anzSamples; i++)
    {
       decodeAudio[i] = g711.decodeULaw(recvPacket.m_payload[i]);
    }
    double diff = 0;
    for(int i = 0; i < size; i++)
    {
       if(i < size-RATIO)
         diff = (double)(decodeAudio[i/RATIO+1] - decodeAudio[i/RATIO]) / double(RATIO);
       else 
         diff = 0;
       upsampledAudio[i] = decodeAudio[i/RATIO] + diff * (i%RATIO);
    }
    

    Was muss ich hier evtl. anders machen damit es auch für gsm eine gute Ausgabe erzeugt?
    Oder muss ich hierfür bereits bilineare Interpolation benutzen?

    Gruß

    Karsten


Log in to reply