1
1
# Given the following paper: https://www.nature.com/articles/s41598-019-50234-9
2
2
3
- #TODO: Implimentand test functions
3
+ # TODO: Implimentand test functions
4
4
# Found function implementation: ToeplitzMultiplyE
5
5
# Suplemental paper (at bottom of previous link):
6
6
# https://static-content.springer.com/esm/art%3A10.1038%2Fs41598-019-50234-9/MediaObjects/41598_2019_50234_MOESM1_ESM.pdf
13
13
#
14
14
# Depends on FFT and IFFT (import fftw)
15
15
16
- def CZT (x ,M ,W ,A ):
16
+
17
+ def CZT (x , M , W , A ):
17
18
N = len (x )
18
- X , r , c = [] * N , [] * N , [] * M
19
+ X , r , c = [] * N , [] * N , [] * M
19
20
for k in range (0 , N - 1 ):
20
21
k2 = k * k
21
22
X [k ] = W [((k2 ) >> 1 )] * A [- k ] * x [k ]
22
23
r [k ] = W [- ((k2 ) >> 1 )]
23
- for k in range (0 ,M - 1 ):
24
+ for k in range (0 , M - 1 ):
24
25
c [k ] = W [- ((k * k ) >> 1 )]
25
- X = ToeplitzMultiplyE (r ,c , X )
26
+ X = ToeplitzMultiplyE (r , c , X )
26
27
for k in range (0 , M - 1 ):
27
28
X [k ] = W [((k * k ) >> 1 )] * X [k ]
28
29
return X
29
30
30
- def ICZT (X ,N ,W ,A ):
31
+
32
+ def ICZT (X , N , W , A ):
31
33
M = len (X )
32
34
if M != N :
33
- raise ("M must == to N" )
35
+ raise ("M must == to N" )
34
36
n = N
35
37
x , p , u , z = [] * n , [] * n , [] * n , [] * n
36
38
for k in range (0 , n - 1 ):
37
39
x [k ] = W [((k * k ) >> 1 )] * X [k ]
38
40
p [0 ] = 1
39
- for k in range (0 ,n - 1 ):
41
+ for k in range (0 , n - 1 ):
40
42
p [k ] = (p [k - 1 ]) * (W [k ] - 1 )
41
- for k in range (0 , n - 1 , 2 ):
42
- u [k ] = ((W [((k * k ) << 1 ) - ((n << 1 ) - 1 ) + n * (n - 1 )]) / (p [n - k - 1 ] * p [k ]))
43
- for k in range (1 , n - 1 , 2 ):
44
- u [k ] = ((W [((k * k ) << 1 ) - ((n << 1 ) - 1 ) + n * (n - 1 )]) / (p [n - k - 1 ] * p [k ])) * - 1
45
- for j = range (n - 1 ,0 ,- 1 ):
43
+ for k in range (0 , n - 1 , 2 ):
44
+ u [k ] = (W [((k * k ) << 1 ) - ((n << 1 ) - 1 ) + n * (n - 1 )]) / (
45
+ p [n - k - 1 ] * p [k ]
46
+ )
47
+ for k in range (1 , n - 1 , 2 ):
48
+ u [k ] = (
49
+ (W [((k * k ) << 1 ) - ((n << 1 ) - 1 ) + n * (n - 1 )]) / (p [n - k - 1 ] * p [k ])
50
+ ) * - 1
51
+ for j in range (n - 1 , 0 , - 1 ):
46
52
u1 [k ] = u [k - j ]
47
53
u2 = u [0 ] + [0 ] * (n - 1 )
48
54
x1 = ToeplitzMultiplyE (u1 , z , x )
@@ -54,5 +60,3 @@ def ICZT(X,N,W,A):
54
60
for k in range (0 , n - 1 ):
55
61
x [k ] = A [k ] * W [- ((k * k ) >> 1 )] * x [k ]
56
62
return x
57
-
58
-
0 commit comments