2013-09-30 5 views
0

Скажем, я выполнил БПФ по набору данных, и у меня есть значения частоты и амплитуды. Я хочу найти максимальную амплитуду в каждом блоке FFT. Мне нужно найти частоту и амплитуду точек, которые по крайней мере больше 0,4 раза больше максимальной амплитуды и сохранять их в массиве. Как я могу это сделать? Я попробовал следующий метод, я получаю пустую матрицу ....Как сохранить значения в массиве в MATLAB

% the code after FFT 
peak_points = []; 

    fmin = 60; 
    fmax = 1000; 
    region_of_interest = fmax>f & f>fmin; 
    froi = f(region_of_interest); 

    [p_max,loc] = max(seg_fft2(region_of_interest)); 

    p_max; 
    fpeaks = froi(loc); 

    [points, locatn] = findpeaks(seg_fft2(region_of_interest)); 

    if points > 0.4*p_max 
     peak_points = [peak_points ; points locatn] 
    end 

Im плохо с массивами .. Так что я не могу показаться, чтобы понять это. Поблагодарите чью-то помощь в этом ... Спасибо заранее ...

ответ

1

Вы намерены сделать seg_ffr2 в интересующей области логического массива или на фри?

или, возможно, указывает на это вектор, и вы должны иметь:

aboveMax = points > 0.4*p_max; 
if any(aboveMax) 
     peak_points = [peak_points ; points(aboveMax) locatn(aboveMax)] 
end 
+0

Ну мне нужно рассматривать только область между 60 Гц и 100 Гц и найти максимальную в этом регионе. Линия 'region_of_interest = fmax> f & f> fmin;' определяет эту область, поэтому seg_fft2 делается на этом ... – user2482542

+0

Спасибо. Он отлично работает при обнаружении правильных амплитуд. Однако 'locatn (aboveMax)' не дает мне частоту точки. Что я могу сделать, чтобы получить значение частоты? – user2482542

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