파이썬에서 신호의 에너지 스펙트럼 밀도를 배열로 그리는 이산 푸리에 변환 함수를 쓰려고합니다 (그래픽으로 출력합니다). 내가 행렬 곱셈을 사용하여 이것을하고있다. 내 코드는 작은 데이터 세트에서 작동하는 것처럼 보이지만 처리하는 데 오랜 시간이 걸립니다. 예를 들어. 작업을 완료하지 못하는 wav 파일 함수는 현재 :이산 퓨리에 변환이 작동하지 않습니다/매우 비효율적 인 파이썬에서
from scipy.io import wavfile
import numpy as np
import matplotlib.pyplot as plt
데프 ESD (데이터 FS)
데이터가 설정 데이터가 fsa=[]
for i in range(int(np.size(data)/100)):
dt = 1/(fs)
fvec = np.arange(100*i , 100+(100*i) , 1)
nvec = np.arange(0 , np.size(data) , 1)
Wconst = np.exp(-1j*2*np.pi/np.size(data))
ematrix = Wconst**(np.outer(fvec,nvec))
b = (dt**2)*(abs(np.inner(ematrix , data))**2)
a = np.concatenate((a,b))
return a
샘플링 주파수이다. 이 기능이 너무 느리거나 비효율적 인 이유가 있습니까? 그렇지 않으면 매트릭스가 매우 커질 수 있으므로 100 블럭의 주파수로 신호를 처리하도록 설계되었습니다.
대부분의 사람들은 numpy 또는 scipy fft 루틴을 사용한다고 생각합니다. fft는 2 ** n 레코드 크기에서 가장 빠릅니다. – f5r5e5d
DFT는 O (n^2)이고 FFT는 O (n log n)입니다. n이 클 때 DFT는 FFT보다 훨씬 느리므로 FFT의 첫 번째 F는 "빠름"을 의미합니다. –