Нахождение определенного значения ниже максимумов в Matlab - PullRequest
1 голос
/ 22 февраля 2010

У меня есть 2 массива 800x1 в Matlab, которые содержат мои данные об амплитуде и частоте, один массив содержит величину, другой содержит соответствующие значения для частоты. Я хочу найти частоту, на которой амплитуда уменьшилась до половины своего максимального значения.

Каков наилучший способ сделать это? Я полагаю, что две мои основные проблемы: если значение «половинной амплитуды» находится между двумя точками данных, как я могу его найти? (например, если я ищу значение 5, как я могу «найти его в моих данных», если оно находится между двумя точками данных, такими как 4 и 6?)

и если я найду значение «половину амплитуды», как мне найти соответствующее значение для частоты?

Заранее спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

Вы можете найти индекс рядом с вашей достопримечательностью, выполнив

idx = magnitudes >= (max(magnitude)/2);

И затем вы можете увидеть все соответствующие частоты, включая пик, выполнив

disp(frequencies(idx))

YouВы можете добавить больше условий к расчету idx, если хотите видеть менее посторонние вещи.

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

0 голосов
/ 22 февраля 2010

Если все в порядке, вы можете сделать простую линейную интерполяцию. Найти сегменты, где происходит падение, и рассчитать промежуточные значения. Это не будет хорошо, если вы ожидаете шум в сигнале.

idx = find(magnitudes(2:end) <= (max(magnitudes)/2) & ...
    magnitudes(1:end-1) >= (max(magnitudes)/2));
mag1 = magnitudes(idx); % magnitudes of points before drop
mag2 = magnitudes(idx+1); % magnitudes of points after drop below max/2
fr1 = frequencies(idx); % frequencies just before drop
fr2 = frequencies(idx+1); % frequencies after drop below max/2
magx = max(magnitudes)/2; % max/2
frx = (magx-mag2).*(fr1-fr2)./(mag1-mag2) + fr2; % estimated frequencies

Вы также можете использовать функцию INTERP1.

...