2015-11-17 3 views
2

Использование matlab для извлечения значений из файла csv, выполняющего fft-преобразование на части данных, а затем его печать. При просмотре сюжета я вижу ясный пик (см. Рисунок прилагается) и хочу написать что-то, чтобы извлечь координату x пика.MATLAB: Извлечение координаты x, которая соответствует наибольшему значению y

Вот часть кода, который я написал.

filename=input('Enter name of a csv file, extension included : ', 's'); 
csv_file=load(filename); 

%file_rows 
rows = size(csv_file, 1); 

for i = 1:rows-256 %frames 
rh_x= csv_file(i:i+255,60); % coordinates of joint 1 
rh_y= csv_file(i:i+255,61); 

rh_x2 = csv_file(i:i+255, 12); % coordinates of joint 2 
rh_y2 = csv_file(i:i+255, 13); 

coord = [rh_x, rh_y; rh_x2, rh_y2]; 

distarray = sqrt((rh_x + rh_x2).^2 + (rh_y + rh_y2).^2); %distance formula 
meandist = mean(distarray); 

new_arr = distarray - meandist; %subtract mean 

transf_new = fft(new_arr); %FFT transform 
magn_new = abs(transf_new); %magnitude_output 


plot(magn_new(1:size(magn_new,1)/2), '-'); %****I INCLUDED EVERYTHING BUT THIS IS THE PART THAT PLOTS WHAT I WANT TO EXTRACT FROM 

if i==1 
     hold on 
end 
end 

код дает мне все правильные значения мне нужно, я только сейчас хочу, чтобы извлечь й значение очень очевидного пик на этом рисунке (эта цифра была сгенерирована с помощью одного из моих файлов CSV). Как я могу написать что-нибудь, что будет хранить/отображать координату x этого пика, который я генерирую?

enter image description here

Спасибо.

+0

Если вы просто хотите, чтобы позиция в х точки максимальной точки использовалась '[val ind] = max (data)' – bla

ответ

2

Используйте два-вывода синтаксис max:

[Y,I] = max(X) возвращает индексы максимальных значений в векторе I. Если значения по первым не-одноплодным измерениям содержат больше чем один максимальный элемент, возвращается индекс первого.

Таким образом, для данного массива magn_new(1:size(magn_new,1)/2),

[maxval, imax] = max(magn_new(1:size(magn_new,1)/2)); 

maxval будет содержать максимальное y значение, и imax будет содержать соответствующий индекс (в вашем случае, случается, x координат, так как вы неявно построили график по сравнению с 1:size(magn_new,1)/2.

Поскольку вы генерируете пакет данных пакетным путем, вы можете хранить e каждый imax и maxval для каждой партии или просто проверяйте каждый раз, будет ли новый maxval больше, чем предыдущий самый большой maxval, и если да, то перезапишите imax.