2012-10-09 3 views
4

MATLAB documentation examples for the spectrogram function은 주파수 축이 [0 500]으로 설정된 예제를 제공합니다. 이것을 [0 100]과 같은 것으로 변경할 수 있습니까? 분명히 axis 명령을 실행하면됩니다. 그러나 결과는 최종 결과를 조정하고 결과 플롯을 압축하여 픽셀 화합니다. 나는 기본적으로 스펙트로 그램을 구축 한 후 재조정하지 않고 0-100 사이의 주파수만을 찾는 스펙트로 그램을 만들려고합니다.스펙트럼 주파수 축을 조정할 수 있습니까?

여기에 해당 설명서에서 예제 : 350Hz 아래 Linear chirp spectrogram

모든 불필요한입니다 :

T = 0:0.001:2; 
X = chirp(T,0,1,150); 
spectrogram(X,256,250,256,1E3,'yaxis'); 

이 다음 생성합니다. 사실 후에 축을 조정하는 것보다 스펙트로 그램을 만들 때 350에서 500 사이의 모든 것을 포함하지 않는 방법이 있습니까? 문서에서

답변

6

:

[S, F, T = 스펙트로 (X는, 창, noverlap, F)는 Hz 단위의 주파수 벡터 F를 사용한다. F는 두 개 이상의 요소가있는 벡터 여야합니다. 이 경우는 Goertzel 알고리즘을 사용하여 F의 주파수에서 스펙트로 그램을 계산합니다. 지정된 주파수는 신호의 해상도에 비례하여 가장 가까운 DFT bin으로 반올림됩니다. nfft 또는 nfft의 기본값이 사용되는 다른 모든 구문 구문에서는 단시간 푸리에 변환이 사용됩니다. 반환되는 F 벡터는 반올림 된 주파수의 벡터입니다. T는 스펙트로 그램이 계산되는 시간의 벡터입니다. F의 길이는 S의 행 수와 같습니다. T의 길이는 위에 정의 된 k와 같으며 각 값은 각 세그먼트의 중심에 해당합니다.

도움이 되었습니까?

+0

아마도. 나는 함수가 무엇을하는지 이해하려고하는 문서를 보았다. 나는 신호 분석에 대한 배경 지식이 없기 때문에 이것은 나에게 모두 새로운 것이다. 출력 스펙트로 그램 플롯을 예로들 수 있습니까? –

+0

@DangKhoa 죄송합니다. 전 MATLAB이 없습니다. 아직 해결되지 않은 경우 나중에 시도해 보도록하겠습니다. 그러나 이것이 말하고자하는 것은'F = [1 10 20 50 100];과 같은 주파수의 벡터를 제공하고이를 '스펙트로 그램'함수로 전달하면 해당 스펙트로 그램 만 계산한다는 것입니다 그 주파수 (당신이 원하는 것, 내가 생각하는 것) –

+0

'spectrogram (x, window, noverlap, F, fs, 'yaxis')'형식을 사용하여 끝내었다. 고맙습니다! –

-1

FFT가 빠르기 때문에 해상도를 높이고 원치 않는 데이터를 버리는 것이 좋습니다. 더 나은 스펙트럼 해상도 (더 많은 주파수 빈)가 필요하면 FFT 크기를 늘리십시오. 시간 차원에서보다 매끄러운 스펙트럼을 얻으려면, 각 연속 FFT의 증가량을 줄이려면 noverlap 값을 늘리십시오. 이 경우 F를 지정하지 않습니다. FFT 크기가 1024이면 1024/2 + 1 주파수 빈을 얻습니다.

FFTN = 512; 
start = 512*(350/500); % Only care about freq bins above this value 
WIN_SIZE = FFTN; 
overlap = floor(FFTN*0.8); 
[~,F,T,P] = spectrogram(y, WIN_SIZE, overlap, FFTN); 
f = 0:(length(F)-1); 
f = f*((Fs/2)/length(F)); 
P = P(start:512,:); 
f = f(1,start:512); 
imagesc(T,f,10*log10(P),[-70 20]); 
+0

왜이 내려 투표 했나요? – kashiraja