2017-12-09 25 views
1

here과 같이 짧은 시간 푸리에 변환을 수행합니다. 한국인 난 다음 개체를 얻을 이해SciPy에서 단시간 푸리에 변환으로 주파수 그리드를 설정하는 방법은 무엇입니까?

from scipy.signal import stft 
f, t, Zxx = stft(data) 

(1) 주파수의 값을 격납하는 1 차원 어레이 (2)의 1D 시간 값을 포함하는 어레이 (3)의 강도를 포함하는 2 차원 배열 주어진 순간의 주어진 주파수.

제 질문은 주파수 그리드를 제어/수정하는 방법에 관한 것입니다. 기본적으로 129 개의 주파수 격자가 있습니다. 내가하고 싶은 첫 번째 일은 주파수의 수를 늘리는 것입니다 (보다 세분화 된 그리드를 가짐).

그 외에도 사용할 주파수 범위를 지정할 수 있으면 좋을 것입니다.

+0

키워드'fs'의 기본값은 1.0이지만 샘플링 빈도는 제어 할 수 있지만 주파수와 시간 스케일 만 조정할 수 있습니다. 당신이 찾고있는 것은 키워드'nperseg = 256'입니다. 이 게임을하면 시간 세그먼트와 주파수 세그먼트 간의 균형을 조정할 수 있습니다. 주파수 범위를 지정하는 것이 가능한지 잘 모르겠다. :( – Uvar

답변

0

Uvar가 말했듯이, 관찰 가능한 주파수의 범위는 nperseg 매개 변수에 의해 제한됩니다. n 샘플이 주어지면 fs*k/n의 주파수는 k = 0,1,2,...,n/2이고 fs은 샘플링 주파수이며 n은 인 n/2 + 1 주파수 만 관찰 할 수 있습니다. aliasing으로 인해 더 높은 값이 손실됩니다. 이것은 수학적 한계이며 SciPy가 할 수있는 일은 아닙니다. 충분히 세부적인 주파수 목록을 얻으려면 nperseg을 늘리십시오. 기본값 nperseg = 256은 (256/2) + 1 = 129 개의 주파수를 제공합니다.

이산 푸리에 변환은 모든 관찰 가능한 주파수를 한 번에 제공하므로 사용자 지정 범위를 선택할 수 없습니다. 물론 출력 f을 슬라이딩하여 원하는 주파수 범위를 선택할 수 있습니다.