Вчера я доработал код для определения звуковой энергии дорожки, отображаемой с течением времени, которую я в конечном итоге буду использовать в качестве части моего проекта эскиза звука.Вычисление тональности звука в MATLAB?
Однако мне также нужен способ, который может определять высоту дорожки, отображаемой с течением времени, поэтому у меня есть два варианта, из которых можно основывать мои исследования.
[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
Это правильный код для метода энергии, и после исследования, я обнаружил, что мне нужно было бы использовать дискретное преобразование Фурье по времени, чтобы найти текущую высоту каждого кадра в цикле.
Я думал, что процесс будет таким же простым, как изменение заключительных строк кода, чтобы включить команду «fft» MATLAB для вычисления дискретных преобразований Фурье, но все, что я возвращаю, это ошибки в отношении несбалансированного уравнения.
Помощь была бы высоко оценена, даже если это обычный указатель в правильном направлении. Спасибо.
Возможно, вам захочется приложить точные сообщения об ошибках, чтобы мы могли понять, как исправить вашу проблему. abs (fft (y (startSample: endSample))) видит мне действительный подход и не должен приводить к «неуравновешенному уравнению». – YYC