2013-12-03 2 views
0

MathWorks 웹 사이트의 예제 코드를 실험하여 MatLab에서 FFT를 처음 수행했습니다. 내가 가지고있는 코드를 가져와 x axis을 선형이 아닌 로그 스케일 표현으로 변환 할 수 있는지 궁금합니다. 나는 대부분의 코드를 이해하지만, x axis 라인의 코드는 라인 끝 부분의 +1을 제외하고는 정확히 100 % 확신 할 수 없다. MatLab의 인덱싱 구조가 그다지 중요하지 않다는 사실이다. 시작은 0입니다.MatLab을 사용하여 로그 스케일 FFT를 생성하는 방법

내 코드는 지금까지 있습니다 :

[y,fs] = wavread('Wav/800Hz_2sec.wav'); 
NFFT = 4096; 
Y = fft(y,NFFT)/length(y); 
f = fs/2*linspace(0,1,NFFT/2+1); 
plot(f,2*abs(Y(1:NFFT/2+1)) 

답변

1

주파수는 일반적으로 변환 이산 푸리에에서 선형 스케일에서 나온다. 당신이 원한다면, 당신은 이미 npts 새 주파수 벡터의 길이

fnew=fs/2.*logspace(log10(fs/length(y)),0,npts); 
Ynew= interp1(f,Y(1:NFFT/2+1),fnew); 

이 로그 스케일의 새로운 주파수 벡터를 확인하고 그 결과를 보간 할 수 있습니다. 실제 신호의 FFT는 스펙트럼 강한 최고점과 최저점을 생산하기 때문에 당신이 먼저 스펙트럼을 원활하게하지 않는, 그래서 그냥 정직하게 IMO

loglog(f,2*abs(Y(1:NFFT/2+1)); 

을 플로팅, 보간 것은 매우 잘 작동하지 않습니다, 보간 된 스펙트럼은 보이지 않는 것 as nice

+4

단지 x 축이 로그되도록하려면'loglog' 대신'semilogx'를 사용하십시오. – craigim

+1

또는 'plot'줄 다음에'set (gca, 'xscale', 'log')'를 동등하게 사용하십시오 –

관련 문제