2010-02-22 5 views
1

내 진폭 대 주파수 데이터가 포함 된 2 개의 800x1 배열을 가지고 있는데, 하나의 배열에는 크기가 포함되어 있고 다른 하나에는 주파수에 해당하는 값이 들어 있습니다. 진폭이 최대 값의 절반으로 줄어든 주파수를 찾고 싶습니다.Matlab에서 최대 값보다 작은 값 찾기

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내 두 가지 주요 관심사는 다음과 같습니다. '절반 진폭'값이 두 데이터 포인트 사이에 있으면 어떻게 찾을 수 있습니까? (예를 들어 내가 찾고있는 값이 5라면 4와 6 같은 두 데이터 포인트 사이에 "내 데이터에서 찾을 수 있습니까?")

그리고 '절반 진폭' 값, 어떻게 주파수에 해당하는 값을 찾을 수 있습니까?

미리 도움 주셔서 감사합니다.

답변

2

당신은

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

을 수행하여 관심 지점 근처 인덱스를 찾을 수 있습니다 그리고 당신은 당신이 더 추가 할 수 있습니다

disp(frequencies(idx)) 

을 수행하여 피크를 포함한 모든 해당 주파수를 볼 수 있습니다 조건을 idx 계산에 추가해야합니다.

그러나 정확한 주파수를 찾는 것에 대한 우려는 대답하기가 어렵습니다. 그것은 신호의 본질과 또한 lineshape of your window function에 크게 의존 할 것입니다. 일반적으로 몇 가지 포인트를 가지고 피크를 특성화 한 다음 어떤 종류의 커브 피트를 수행하는 것이 좋습니다. 혹시 공진 형 필터의 Q를 계산하려고합니까?

+0

@mtrw : 아마 idx = magnitudes <= (max (magnitude)/2)를 의미했을 것입니다. – yuk

0

괜찮 으면 간단한 선형 보간을 할 수 있습니다. 강하가 발생하는 세그먼트를 찾고 중간 값을 계산합니다. 신호에 잡음이 들리면 그것은 좋지 않을 것입니다.

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 기능을 사용할 수도 있습니다.

관련 문제