2010-08-05 9 views
1

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

Помощь была бы высоко оценена, даже если это обычный указатель в правильном направлении. Спасибо.

+0

Возможно, вам захочется приложить точные сообщения об ошибках, чтобы мы могли понять, как исправить вашу проблему. abs (fft (y (startSample: endSample))) видит мне действительный подход и не должен приводить к «неуравновешенному уравнению». – YYC

ответ

1

Определение высоты тона лот более сложный, чем просто применение ДПФ. Это также зависит от природы источника - разные алгоритмы подходят, например, для речи и музыкального инструмента. Если это музыкальный трек, как кажется в вашем вопросе, то вам, вероятно, не повезло, поскольку нет очевидного способа определить одно значение шага для нескольких музыкальных инструментов, играющих вместе (как бы вы даже определили шаг в этот контекст?). Может быть, вы можете быть более конкретными о том, что вы пытаетесь сделать - возможно, спектр мощности будет более полезен, чем попытка определить произвольный шаг?

+0

Я ищу методы, которые я мог бы использовать для извлечения аудио-функций из поп-песни. В идеале я хочу осязаемые данные, которые я могу использовать для разработки алгоритма обнаружения хоруса. – Velocity

+0

OK - у вас впереди довольно большая задача R & D - вам, вероятно, необходимо преобразовать данные во временной области в частотную область, а затем выполнить некоторую функцию извлечения, чтобы получить важные характеристики песни в какое-то пространство функций , Есть собственные алгоритмы для этого, но я ничего не имею в общественном достоянии. –

+0

Одним из способов определения «высоты тона» в этом контексте было бы вычисление Spectral Centroid. – FakeDIY

 Смежные вопросы

  • Нет связанных вопросов^_^