C++ analysiert die Tonhöhe von Sprachsignalen mithilfe natürlicher Sprachverarbeitungstechnologie

        Zur Tonhöhenanalyse von Sprachsignalen können grundlegende Techniken zur Frequenzextraktion verwendet werden. Die Grundfrequenz bezieht sich auf die Wiederholungsrate eines Schallzyklus, also den längsten Zyklus in einer Schallwellenform.

Typischerweise liegt die Grundfrequenz der menschlichen Stimme zwischen 85 Hz und 255 Hz. Aus der Grundfrequenz eines Sprachsignals kann auf die Tonhöhe geschlossen werden.

        In C++ kann eine digitale Signalverarbeitungsbibliothek oder eine Sprachverarbeitungsbibliothek wie MATLAB, Praat, YIN-Algorithmus usw. für die Tonhöhenanalyse verwendet werden. Das Folgende ist ein Beispielcode für die Tonhöhenanalyse mit dem YIN-Algorithmus:

#include <cmath>
#include <algorithm>

#define SAMPLE_RATE 44100
#define BUFFER_SIZE 2048
#define MIN_FREQ 80
#define MAX_FREQ 1000

double YinPitch(float* buffer, int bufferSize)
{
    double pitch = -1;
    double yin[BUFFER_SIZE/2];

    for (int tau = 0; tau < bufferSize/2; tau++)
    {
        yin[tau] = 0;
        for (int j = 0; j < bufferSize/2; j++)
        {
            double diff = buffer[j] - buffer[j+tau];
            yin[tau] += diff * diff;
        }
        yin[tau] /= bufferSize/2;
    }

    for (int tau = 1; tau < bufferSize/2; tau++)
    {
        if (yin[tau] < 0.0001)
        {
            continue;
        }

        int period = tau;
        while ((period < bufferSize/2) && (yin[period] < yin[period-1]))
        {
            period++;
        }

        if (period >= bufferSize/2)
        {
            break;
        }

        double freq = SAMPLE_RATE / period;

        if ((freq >= MIN_FREQ) && (freq <= MAX_FREQ))
        {
            if (pitch < 0)
            {
                pitch = freq;
            }
            else
            {
                pitch = 0.5 * pitch + 0.5 * freq;
            }
        }
    }

    return pitch;
}

        Dieser Code verwendet den YIN-Algorithmus, um die Grundfrequenz des Sprachsignals zu berechnen, und das Ergebnis ist die Tonhöhe.

        Unter diesen beträgt die Puffergröße 2048, die minimale Grundfrequenz 80 Hz und die maximale Grundfrequenz 1000 Hz. Normalerweise liegt die Tonhöhe zwischen 85 Hz und 255 Hz, sodass die minimalen und maximalen Grundfrequenzwerte entsprechend der tatsächlichen Situation geändert werden können.

Acho que você gosta

Origin blog.csdn.net/SYC20110120/article/details/132029933
Recomendado
Clasificación