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.

Möchten Sie vielleicht befestigen Sie die genauen Fehlermeldungen, damit wir eine Vorstellung bekommen, wie Ihr problem zu lösen. abs(fft(y(startSample:endSample))) seesm mir eine gültige Ansatz und sollte nicht in einer "unausgeglichenen Gleichung."

InformationsquelleAutor Velocity | 2010-08-05

Schreibe einen Kommentar