2011-10-04 4 views
0

나는 현재 실행중인 모델의 데이터를 가지고 있습니다. 그러나 데이터는 매 시간 단계마다 수집되며 시간 단계가 다양합니다. 다양한 시간 단계가 있지만 시간 단계의 변화로 보상되어 모든 실행이 동시에 실행됩니다.데이터 세트의 벡터 길이가 다른 경우 FFT

그러나 나는 길이가 200이고 길이가 900 인 벡터가있을 때 FFT를 사용하면 본질적으로 다른 주파수를 줄 것이라고 생각할 것입니다. 모든 샘플의 동일한 시간 축에 대해 FFT를 사용해야하는 것처럼 느껴집니다.

데이터가있는 방식은 행 벡터와 마찬가지로 각 항목이 시간적 공간과 관련이 없습니다.

벡터 배열의 위치가 아닌 시간 축의 위치에 따라 각 벡터의 fft를 취할 수있는 방법이 있습니까?

제 목표는 for 루프를 작성하고 많은 데이터 세트의 fft를 취한 다음 빈도 서명 비교를 비교하도록 변경하는 것입니다.

답변

3

200 샘플을 1 초 (200 Hz)로 수집하면 입력 데이터를 1 Hz (1/(1 초))에서 100 Hz로 변환 할 수 있습니다. 1 초 동안 샘플링하여 900 샘플을 수집하면 1Hz에서 450Hz까지 입력을 분석 할 수 있습니다. 따라서 두 샘플의 간격은 동일합니다 (주파수 축의 샘플링은 1Hz 임).하지만 서로 다른 최대 주파수까지 올라갑니다! 당신이 가진 모든 데이터를

totaltime=1; %# common total time of all datasets, in seconds 
minsamplenumber=200; 
figure; 
hold all; 
cutofffreq=((minsamplenumber/2+1)/totaltime); 
freqscale=0:(1/totaltime):cutofffreq; 
datasetcount=42; 
ffts=NaN(minsamplenumber,datasetcount); 
for i=1:datasetcount 
    data{i}=... %# collect your data; to make life easier always collect an even number.. 
    ffts(:,i)=fft(data{i},minsamplenumber); 
    plot(freqscale,ffts{i}(1:end/2+1)); 
end 

... 또는 현실에 살고, 줄거리 : 문제는 단지 플로팅에 대해 경우

, 당신도 모든 플롯에서 사용할 수없는 높은 주파수를 멀리 던질 수 :

totaltime=1; %# common total time of all datasets, in seconds 
figure; 
hold all; 
for i=1:42 
    data{i}=... %# collect your data; to make life easier always collect an even number.. 
    ffts{i}=fft(data{i}); 
    maxfreq(i)=((numel(ffts{i})/2+1)/totaltime); 
    freqscale{i}=0:(1/totaltime):maxfreq(i); 
    plot(freqscale{i},ffts{i}(1:end/2+1)); 
end 
0

샘플링 속도가 각 프레임에서 동일한 일정 비율 인 고정 길이 벡터로 데이터를 재 샘플링 할 수 있습니다 (필터링 된 보간법으로). 일정한 프레임 또는 창 오프셋을 얻으려면 FFT 프레임을 겹쳐 써야 할 수도 있습니다.

관련 문제