Я пытаюсь написать файл .m для извлечения энергии из функции звуковой дорожки, но я, кажется, возникают проблемы в ее реализации:Помощь требуется со звуком в MATLAB
% Formula for calculating RMS
[f, fs, nb] = wavread('Three.wav');
frameWidth=441; %10ms
numSamples=length(x);
numFrames=(numSamples/1);
energy(frame)=0;
for frame=1:numFrames,
startSample=(frame-1)*frameWidth+1;
endSample=startSample+frameWidth-1;
% Calculate frame energy
for i=startSample:endSample
energy(frame)=energy(frame)+x(i)^2;
end
end
Я бегу этот файл в MATLAB и получить следующую ошибку:
??? Attempted to access x(2); index out of bounds because numel(x)=1. Error in ==> myrms at 12 energy(frame)=energy(frame)+x(i)^2;
Любая помощь будет очень признательна.
Блестящий. Только что заметил ошибку, которую я сделал в начальном посте, я не должен был использовать f вообще, я даже не записал нигде на листе бумаги, где я писал исходный код. Как неловко. Благодарим за помощь в любом случае, это очень ценится. – Velocity
Я понятия не имею, получите ли вы уведомление о том, что я ответил на это, но здесь все равно. Есть ли способ применить ярлык или тег к каждому созданному кадру? Даже если это так же просто, как «Frame 1» «Frame 2» и т. Д. Я хочу выполнить несколько функций самостоятельно, чтобы найти области песни, которые я хочу извлечь, но я понятия не имею, как вызвать кадры как только у меня есть данные. Например, если я выполняю функции автокорреляции, а затем функции обнаружения пика, я затем хочу отобразить этот кадр обратно в его конкретное положение в песне, чтобы затем извлечь эскиз. – Velocity
@Velocity: Один из способов сделать это - сохранить значения 'startSample' и' endSample', которые вы вычисляете в своем цикле. Я обновил код в своем ответе, чтобы показать, как это сделать. – gnovice