[untitled]
1 pointsby Greek00 comments
def fft(x):
N = len(x)
if N == 1:
return x
assert N % 2 == 0
E = fft(x[::2])
O = fft(x[1::2])
X = [None] * N
for k in range(N // 2):
tf = np.exp(-2j * np.pi * k / N)
X[k] = E[k] + tf * O[k]
X[k + N//2] = E[k] - tf * O[k]
return X
The Wikipedia article describing it is surprisingly decent:
https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algor... Internal State: AngleX, AngleY, AngleZ
Update algorithm: AngleX + dx, AngleY + dy, AngleZ + dz
Rotation = Rotationmatrix(AngleX) * Rotationmatrix(AngleY) * Rotationmatrix(AngleZ)
With this setup it is easy to come to a situation where AngleZ performs a rotation so that the X/Y rotation vectors coincide, and you lose one degree of freedom in the resulting rotation matrix. Internal state: RotationMatrixOld
Update: RotationMatrixOld * RotationMatrix(dx, dy, dz)
With this setup there is no chance of Gimbal lock, the dx/dy/dz matrix always retains its degrees of freedom.
As additional complication, debug symbols are often removed from the binary post-build to reduce binary size. The `strip` utility either discards debug symbols entirely, or it puts them in a separate folder as .dbgsym filses. See the gdb `debug-file-directory` option and the `add-symbol-file` command.