Berechnung der Tonhöhe in MATLAB?

Gestern habe ich den Code zum Erkennen der Audioenergie eines im Laufe der Zeit angezeigten Tracks fertiggestellt, den ich schließlich als Teil meines Audio-Thumbnail-Projekts verwenden werde.

Ich möchte jedoch auch eine Methode, mit der die Tonhöhe einer im Laufe der Zeit angezeigten Spur ermittelt werden kann. Daher habe ich zwei Optionen, auf denen meine Recherchen basieren können.

[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

Das ist der richtige Code für die Energiemethode, und nach der Untersuchung stellte ich fest, dass ich eine diskrete Zeit-Fourier-Transformation verwenden musste, um die aktuelle Tonhöhe jedes Frames in der Schleife zu ermitteln.

Ich dachte, der Vorgang wäre so einfach wie das Ändern der letzten Zeilen des Codes, um den MATLAB-Befehl "fft" zum Berechnen von diskreten Fourier-Transformationen einzuschließen, aber alles, was ich zurückerhalte, sind Fehler über eine unausgeglichene Gleichung.

Help wäre sehr dankbar, auch wenn es nur ein allgemeiner Hinweis in die richtige Richtung ist. Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage