Вчера я доработал код для определения звуковой энергии дорожки, отображаемой с течением времени, который я в конечном итоге буду использовать как часть моего проекта создания эскизов звука.
Однако мне бы также хотелось, чтобы метод, позволяющий определять высоту дорожки, отображаемой во времени, поэтому у меня есть 2 варианта, на которых можно основывать свое исследование.
[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 для вычисления дискретных преобразований Фурье, но все, что я получаю, - это ошибки о несбалансированном уравнении.
Помощь будет высоко ценится, даже если это просто общий указатель в правильном направлении. Спасибо.