빠른 코사인 변환을 구현하고 싶습니다. 나는 Wikipedia 에서 FFT와 유사하게 계산되는 DCT의 빠른 버전이 있다고 읽었습니다 . 나는 인용 읽으려고 Makhoul을 * 종이,도에서 사용되는 FTPACK 및 FFTW 구현 Scipy ,하지만 실제 알고리즘을 추출 할 수 없었다. 이것이 내가 지금까지 가진 것입니다.
FFT 코드 :
def fft(x):
if x.size ==1:
return x
N = x.size
x0 = my_fft(x[0:N:2])
x1 = my_fft(x[0+1:N:2])
k = numpy.arange(N/2)
e = numpy.exp(-2j*numpy.pi*k/N)
l = x0 + x1 * e
r = x0 - x1 * e
return numpy.hstack([l,r])
DCT 코드 :
def dct(x):
k = 0
N = x.size
xk = numpy.zeros(N)
for k in range(N):
for n in range(N):
xn = x[n]
xk[k] += xn*numpy.cos(numpy.pi/N*(n+1/2.0)*k)
return xk
FCT 시험 :
def my_fct(x):
if x.size ==1:
return x
N = x.size
x0 = my_fct(x[0:N:2]) # have to be set to zero?
x1 = my_fct(x[0+1:N:2])
k = numpy.arange(N/2)
n = # ???
c = numpy.cos(numpy.pi/N*(n+1/2.0)*k)
l = x0 #???
r = x0 #???
return numpy.hstack([l,r])
*제이. Makhoul, "1 차원과 2 차원의 빠른 코사인 변환"IEEE Trans. 아쿠 스트. 연설 시그. Proc. 28 (1), 27-34 (1980).