大家好,在此先感谢您的帮助和协助?
我正在尝试在python中对以下方程式执行正向和反向余弦变换。但是我一直收到这个错误,说索引超出了反弹范围。我已经尝试了所有方法来纠正此问题,但是它不起作用。请在下面找到我用python编写的程序。您的帮助将有很大的不同。谢谢
F_k = .5*[f_0 + ((-1)**k)*f_N] + f_j*cos(pi*j*k/N) j=[1 N-1]
import numpy as np
import matplotlib.pyplot as plt
def dct(f_j):
n = len(f_j)
F_k = np.zeros(n, dtype=float)
for k in range(n):
out = f_j[0]
for j in range(1, n + 1):
out += 0.5*f_j[1]+0.5*f_j[k+1]*(-1)**(n-1) + f_j[j] * np.cos(np.pi * k * j/n)
F_k = out
return F_k
def idct(F_k):
N = len(F_k)
f_j = np.zeros(N, dtype=float)
for j in range(N):
output = F_k[0]
for k in range(1, N + 1):
output += .5*F_k[1]+0.5*F_k[j+1]*(-1)**(N-1) + F_k[k]*np.cos(np.pi * k * j / N)
f_j = output * (2 / N)
return f_j
离散余弦变换有几个定义。似乎您正在尝试使用Wikipedia中的DCT-I定义。如果是这种情况,则您希望代码看起来像这样,
def dct( f_j ):
n = len(f_j)
F_k = np.zeros(n)
for k in range(n):
F_k[k] = 0.5 * ( f_j[0] + (-1)**k * f_j[n-1] )
for j in range(1, n - 1):
F_k[k] += f_j[j] * np.cos(np.pi * j * k / (n-1))
return F_k
我认为您只是对DCT的数学定义和从开始的Python中的索引感到困惑0
。还要注意,for k in range(n)
将产生k
从0
到的值,n-1
而for j in range(1, n-1)
将产生j
从1
到的值n-2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句