У меня есть информация (20 000 кадров данных) об аудиодорожке, которую я автоматически коррелировал с помощью:
[r,lags] = xcorr(XX,XX,'biased');
И это выглядит так:
альтернативный текст http://a.imageshack.us/img809/3775/plot.jpg
Что, надеюсь, пока хорошо. В идеале я хотел бы иметь возможность взять номер кадра, который соответствует самой высокой части второго пика. Я прочитал и попробовал множество различных методов, но я просто не могу получить его, чтобы получить информацию для меня.
Кто-нибудь сможет пролить свет на то, что я должен делать?
Большое спасибо!
edit1:
Я пытался использовать findpeaks
, но мне это не помогло. Я не уверен, что это потому, что я использую неправильные данные или нет.
edit2: В настоящее время я тестирую метод для использования только с этой звуковой дорожкой, но вскоре я хочу расширить его, чтобы я мог выполнить этот метод для целого каталога файлов, поэтому я Нужен скрипт, который может обнаруживать пики, а не находить информацию сам.
edit3: Мой .M файл:
[y, fs, nb] = wavread('Three.wav'); %# Load the signal into variable y
frameWidth = 441; %# 10ms
numSamples = length(y); %# Number of samples in y
numFrames = floor(numSamples/frameWidth); %# Number of full frames in y
energy = zeros(1,numFrames); %# Initialize energy
startSample = zeros(1,numFrames); %# Initialize start indices
endSample = zeros(1,numFrames); %# Initialize end indices
for frame = 1:numFrames %# Loop over frames
startSample(frame) = (frame-1)*frameWidth+1; %# Starting index of frame
endSample(frame) = frame*frameWidth; %# Ending index of frame
frameIndex = startSample(frame):endSample(frame); %# Indices of frame samples
energy(frame) = sum(y(frameIndex).^2); %# Calculate frame energy
end %# End loop
XX = filtfilt(ones(1,10)/10, 1, energy); %# Smooths signal
[r,lags] = xcorr(XX,XX,'biased'); %# Auto-correlates the data
plot(lags,r), xlabel('lag'), ylabel('xcorr') %# Plots data