Berechnung der Tonhöhe in MATLAB?
Habe ich gestern fertiggestellt, der code für die Erkennung der audio-Energie einer Spur über die Zeit dargestellt, die ich letztendlich als Teil meiner audio-Projekt eine Vorschau bei.
Aber ich möchte auch gerne eine Methode, das erkennen kann, die Tonhöhe eines Tracks über die Zeit dargestellt, also ich habe 2 Optionen aus, die die Grundlage für meine Forschung auf.
[y, fs, nb] = wavread('Three.wav'); %# Load the signal into variable y
frameWidth = 441; %# 10 msec
numSamples = length(y); %# Number of samples in y
numFrames = floor(numSamples/frameWidth); %# Number of full frames in y
energy = zeros(1,numFrames); %# Initialize energy
for frame = 1:numFrames %# Loop over frames
startSample = (frame-1)*frameWidth+1; %# Starting index of frame
endSample = startSample+frameWidth-1; %# Ending index of frame
energy(frame) = sum(y(startSample:endSample).^2); %# Calculate frame energy
end
Dass ist der richtige code für die Energie-Methode, und nach einiger recherche, fand ich, dass ich brauchen, um eine Diskrete Zeit-Fourier-Transformation zu finden, die der aktuellen Tonhöhe jedes Bild in der Schleife.
Dachte ich, dass wäre der Prozess so einfach wie das ändern der letzten Zeilen des Codes mit "fft" MATLAB-Befehl zur Berechnung der Diskreten-Fourier-Transformationen, aber ich bin immer wieder ist der Fehler über eine unausgeglichene Gleichung.
Hilfe wäre sehr geschätzt werden, auch wenn es nur einen Allgemeinen Zeiger in die richtige Richtung. Danke.
InformationsquelleAutor Velocity | 2010-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bestimmung pitch ist ein viel komplizierter als nur die Anwendung einer DFT. Es hängt auch von der Art der Quelle - verschiedene algorithmen, die geeignet sind für die Spracherkennung im Vergleich zu einem Musikinstrument, zum Beispiel. Wenn dies ist ein Musik-track, wie deine Frage scheint zu implizieren, dann sind Sie wahrscheinlich kein Glück, da es keine offensichtliche Möglichkeit der Bestimmung einer einzigen pitch-Wert für mehrere musikalische Instrumente zusammen spielen (wie würden Sie selbst definieren pitch in diesem Zusammenhang ?). Vielleicht könnten Sie etwas konkreter über das, was Sie versuchen zu tun - vielleicht ein kräftespektrum, das wäre sinnvoller, als zu versuchen, um zu bestimmen, eine beliebige Tonhöhe ?
OK - Sie haben eine ziemlich große R&D Aufgabe vor Ihnen - die Sie wahrscheinlich benötigen, um zu konvertieren der time-domain-Daten in den Frequenzbereich und dann tun einige Art von Merkmalsextraktion auf die wichtigsten Merkmale der song in eine Art feature-Raum. Es gibt proprietäre algorithmen für diese aber nichts in der public domain, soweit ich informiert bin.
Eine Möglichkeit der Definition von "pitch" in diesem Zusammenhang wäre die Berechnung der Spektralen Schwerpunkt.
...Ich muss wirklich zu Lesen, die Termine, zu Fragen, bevor Sie kommentieren! 😀
InformationsquelleAutor Paul R