This invention generally relates to the inverse chirp z-transform and more particularly to methods and systems for computing the inverse chirp z-transform in O(n log n) time and O(n) memory.
The Chirp Z-Transform (CZT) extends the discrete Fourier transform (DFT) by allowing the samples to be located on a logarithmic spiral contour instead of the unit circle. More specifically, the transform distributes the samples along a logarithmic spiral contour that is defined by the formula A W−k, where k=0, 1, 2, . . . , M−1. The non-zero complex numbers A and W specify the location and the direction of the spiral contour and also the spacing of the sample points on the contour. More specifically, given an N-element input vector x, the CZT computes an M-element output vector X, where the k-th element of X is given by xk=Σj=0N−1xj(AW−k)−j.
An efficient algorithm that can compute the forward chirp z-transform has previously been described. That algorithm runs in O(n log n) time, where n is the size of the transform. Because the number of inputs N and the number of outputs M can be different, in the most general case the computational complexity of the CZT algorithm is determined by n=max(M, N).
An efficient CZT algorithm can be derived using an index substitution that was originally proposed by Bluestein in “A linear filtering approach to the computation of discrete Fourier transform,” IEEE Transactions on Audio and Electroacoustics, 18(4):451-455, 1970, which is incorporated in its entirety herein by reference, to express the transform using fast convolutions. Various useful optimizations have been proposed for the CZT algorithm. Nevertheless, its computational complexity remains fixed at O(n log n).
The Inverse Chirp Z-Transform (ICZT) is the inverse of the chirp z-transform (CZT). That is, the ICZT maps the outputs of the CZT back to the inputs. Because the CZT is a linear transform, it can be expressed using a matrix product of the CZT matrix and the input vector. This matrix can be inverted using a standard algorithm. In algorithmic form, however, this process may require up to O(n3) operations.
Even though there are efficient matrix inversion algorithms that run faster than O(n3), at least n2 operations are necessary to access each element of an n-by-n matrix. Thus, O(n2) is a lower bound for the computational complexity of any ICZT algorithm that works with a complete n-by-n matrix in memory.
To be efficient, an ICZT algorithm must have the same computational complexity as the CZT algorithm, i.e., O(n log n). This requirement rules out any method that requires storing the transform matrix in memory.
Several attempts to derive an efficient ICZT algorithm have been made. In one case (described in Frickey, “Using the inverse chirp-z transform for time-domain analysis of simulated radar signals,” Technical report, Idaho National Engineering Lab., Idaho Falls, Id., 1995, incorporated in its entirety herein by reference), a modified version of the forward CZT algorithm, in which the logarithmic spiral contour was traversed in the opposite direction, was described as the ICZT algorithm. However, this method does not really invert the CZT. It works only in some special cases, e.g., when A=1 and W=e−2πi/n. That is, in the cases when the CZT reduces to the DFT. In the general case, i.e., when A, W∈\{0}, this method generates a transform that does not invert the CZT.
Embodiments of the present disclosure describe an efficient O(n log n) method for computing the ICZT. The method uses generating vectors to represent structured matrices (e.g., diagonal, Vandermonde, Toeplitz, circulant, or skew-circulant matrices) more compactly in O(n) memory. The ICZT can be viewed as a generalization of the inverse fast Fourier transform (IFFT) off the unit circle. In other words, the complex parameters A and W of an ICZT describe a logarithmic spiral contour in the complex plane. Unlike IFFT, the ICZT can use contour points off the unit circle that correspond to exponentially growing or exponentially decaying frequency components. Embodiments of the present disclosure also describe a method for improving the numerical accuracy of a CZT or an ICZT for the case when |W|<1, which is given in Appendix A.
To the best of their knowledge, the inventors believe that this disclosure is the first description of an efficient ICZT algorithm. In particular, a working algorithm is described as well as its derivation. Further, the accuracy of the algorithm is verified using automated test cases.
The algorithm was derived by expressing the CZT formula using structured matrix multiplication and then finding a way to invert that formula. The essence of the ICZT computation reduces to inverting a specially constructed Vandermonde matrix W. This problem, in turn, reduces to inverting a specially constructed Toeplitz matrix Ŵ derived from W.
Other aspects, objectives and advantages of the invention will become more apparent from the following detailed description when taken in conjunction with the accompanying drawings.
The accompanying drawings incorporated in and forming a part of the specification illustrate several aspects of the present invention and, together with the description, serve to explain the principles of the invention. In the drawings:
While the invention will be described in connection with certain preferred embodiments, there is no intent to limit it to those embodiments. On the contrary, the intent is to cover all alternatives, modifications and equivalents as included within the spirit and scope of the invention as defined by the appended claims.
Embodiments of the present disclosure describe an efficient O(n log n) ICZT algorithm that implements the ICZT for A, W∈\{0}. The ICZT generalizes the inverse fast Fourier transform (IFFT) by making it possible to distribute the sample points on a logarithmic spiral contour in the complex plane instead of the unit circle. Two example logarithmic spiral contours are shown in
The ICZT algorithm was derived by expressing the CZT formula as a product of structured matrices and finding a way to invert the matrix equation. More specifically, computing the ICZT reduces to inverting a special case of a Vandermonde matrix W. This can be accomplished by inverting a special case of a Toeplitz matrix Ŵ derived from W.
Structured matrices are matrices that can be described with fewer parameters than their total number of elements. Examples of structured matrices include Toeplitz, Hankel, Vandermonde, and Cauchy matrices. Other examples include circulant, skew-circulant, and DFT matrices. Diagonal matrices can also be viewed as structured matrices.
Gohberg and Semencul showed that the inverse of a Toeplitz matrix can be expressed using a difference of two products of Toeplitz matrices. This work can be found in I. Gohberg et al., “On the inversion of finite Toeplitz matrices and their continuous analogs,” Mat. issued, 2(1):201-233, 1972 and William Trench, “An algorithm for inversion of finite Toeplitz matrices,” Journal of the Society for Industrial and Applied Mathematics, 12(3):515-522, 1964, both of the references are incorporated in their entirety herein by reference. In the literature, this result is often referred to as the “Gohberg-Semencul formula.” The four matrices in this formula, which are either upper-triangular or lower-triangular Toeplitz, are generated by two vectors u and v. In the case of the ICZT, the Toeplitz matrix to be inverted is also symmetric. This leads to a simplified version of the Gohberg-Semencul formula that expresses the inverse using only one generating vector, i.e., using only the vector u.
The inventors have determined that in the ICZT case it is possible to derive a formula that defines the generating vector u as a function of the complex number W. This formula led to an efficient ICZT algorithm. This algorithm includes a step of multiplying a Toeplitz matrix by a vector, which can be done in O(n log n), without storing the full Toeplitz matrix in memory. Appendices C, D and E implement three different algorithms based on these references that can compute this product. Each of these algorithms can be used as a building block of the ICZT algorithm. The Fast Fourier Transform (FFT) algorithm, which is stated in Appendix B, is used in each of these three algorithms.
Broader Impacts
The discrete Fourier transform (DFT) and its efficient implementation using the fast Fourier transform (FFT) are deeply embedded in a huge variety of modern-day applications. Because the CZT is a generalization of the DFT and the ICZT is a generalization of the inverse DFT, the number of potential applications of this invention is very large. So far, only the CZT algorithm had the same computational complexity as the FFT, i.e., O(n log n). This disclosure introduces an ICZT algorithm that has the same complexity as the inverse FFT (IFFT), which is also O(n log n).
In other words, this invention is transformative not only because it implements a transform that generalizes the inverse FFT, but also because the new algorithm has the same run-time complexity as the algorithm that it generalizes.
Logarithmic spiral contours that can be used with the ICZT include contours whose points are located outside the unit circle, inside the unit circle, start outside the unit circle and end inside it, start inside the unit circle and end outside it. Examples of such contours are shown in
Expressing the Chirp Z-Transform Using Structured Matrices
Example 4-by-4 CZT Expressed in Matrix Form
This example describes the CZT for a special case with four inputs and four outputs using the matrix notation. In this case, the CZT is defined using the following formula:
Let x=(x0, x1, x2, x3)T denote the CZT input vector and X=(X0, X1, X2, X3)T denote the output vector. Using these two vectors, the 4-by-4 CZT can also be expressed using the following matrix formula:
That is, the example CZT can be viewed as multiplying the input vector x by a diagonal matrix generated by the negative powers of the complex parameter A and multiplying the resulting vector by the Vandermonde matrix W, which is determined by the complex parameter W.
In this example, the matrix W has the following form:
Inverting the matrix W leads to the ICZT.
Expressing the CZT Using the Vandermonde Matrix W
In the general case, the CZT is typically defined using the following formula:
In this formula, A and Ware the complex parameters for the transform that define the logarithmic spiral contour and the locations of the samples on it. The parameter N is an integer that specifies the size of the input vector x. Finally, the parameter M is an integer that specifies the size of the output vector X. In general, N may not be equal to M. That is, the dimensionality of the input may not be equal to the dimensionality of the output.
The CZT can be also expressed in matrix form:
Formula (2.5) can be restated in the following shortened form:
X=W diag(A−0,A−1,A−2, . . . ,A−(N−1))x, (2.6)
where W is the following M-by-N matrix:
It can be seen that W is a Vandermonde matrix. That is, each row of W forms a geometric progression. Moreover, the common ratio of each of these progressions is equal to the corresponding integer power of the parameter W.
The negative integer powers of A in formula (2.6) scale the columns of the Vandermonde matrix W. Because the matrix W is a special case of a Vandermonde matrix, it can be expressed as a product of diagonal matrices and a Toeplitz matrix Ŵ as described below.
Deriving the Toeplitz Matrix Ŵ from the Vandermonde Matrix W
Because the matrix W is a special case of a Vandermonde matrix, it can be expressed as a product of two diagonal matrices and a Toeplitz matrix Ŵ. It is possible to express the power of the parameter Win each element of the matrix W using the following equation:
Equation (2.8) implies that the right-hand side of (2.4) can be expressed as follows:
The terms in the last formula can be rearranged so that it can be mapped to matrix products more easily:
The term
maps to an M-by-M diagonal matrix P. The term
maps to the product of two N-by-N diagonal matrices Q and A. Finally, the term
maps to an M-by-N Toeplitz matrix Ŵ, which is shown below:
This implies that a product of the matrix Ŵ and a vector can be efficiently computed using one of several O(n log n) algorithms that implement this operation (see Appendices C, D, and E). In other words, Equation (2.10) has the following matrix form:
in which all matrix-vector products can be computed in O(n log n), where n=max(M, N).
To summarize, the CZT algorithm can be viewed as an efficient implementation of the following matrix equation:
X=W A x=P Ŵ Q A x, (2.13)
where
W is a special case of a Vandermonde matrix defined in (2.7), and Ŵ is a special case of a Toeplitz matrix defined in (2.11). As described previously, x is the input vector to the CZT and X is the output vector from the CZT.
Expressing the Inverse of a Toeplitz Matrix
The Gohberg-Semencul Formula for the 4-by-4 Case
Let T be a 4-by-4 Toeplitz matrix. That is,
where a, b, c, d, f, g, and h are the seven complex numbers that generate the matrix T.
The Gohberg-Semencul formula states that a non-singular 4-by-4 Toeplitz matrix T can be inverted using the following equation:
where u=(u0, u1, u2, u3) is a four-element vector such that u0 #0 and v=(v0, v1, v2, v3) is another four-element vector such that v3≠0. These two vectors are determined by the numbers a, b, c, d, f, g, and h that generate the matrix T. However, expressing them explicitly as functions of the seven numbers that generate T can be difficult.
To summarize, formula (3.2) expresses the inverse of a 4-by-4 Toeplitz matrix T using four structured matrices: 1) a lower-triangular Toeplitz matrix generated by the vector u, 2) an upper-triangular Toeplitz matrix generated by the reverse of the vector v, 3) a lower-triangular Toeplitz matrix generated by the vector (0, v0, v1, v2), which is obtained by shifting v to the right by one element, and 4) an upper-triangular Toeplitz matrix generated by the vector (0, u3, u2, u1), which is obtained by shifting the reverse of u to the right by one element.
The General Case of the Gohberg-Semencul Formula
Let T be a n-by-n Toeplitz matrix generated by the vector r=(r0, r1, r2, . . . , rn−1) that specifies its first row and by the vector c=(c0, c1, c2, . . . , cn−1) that specifies its first column. It is assumed that r0=c0. More formally,
The inverse matrix T−1 of a Toeplitz matrix T may not be Toeplitz. Nevertheless, the Gohberg-Semencul formula makes it possible to express T−1 using upper-triangular and lower-triangular Toeplitz matrices.
That is, the Gohberg-Semencul formula states that there exist a vector u=(u0, u1, u2, . . . , un−1) and a vector v=(v0, v1, v2, . . . , vn−1) that satisfy the following matrix equation:
In other words, the inverse matrix T−1 can be viewed as a structured matrix that is generated by the vector u and the vector v. This analogy extends to multiplying T−1 by a vector. If the generating vectors u and v are determined, then the product of the matrix T−1 and a vector can be computed in O(n log n) by implementing (3.4) using structured matrix multiplication.
Expressing the ICZT Using Structured Matrices
Equation (2.13) showed that the CZT can be reduced to a sequence of matrix-vector multiplications where all matrices are diagonal except for W, which is the following Toeplitz matrix:
This implies that the ICZT can be viewed as a product of diagonal matrices, the inverse matrix Ŵ−1, and a vector (see formula (2.13)).
Let u and v be the two vectors that generate W using the Gohberg-Semencul formula, i.e.,
u=(u0,u1,u2, . . . ,un−1)T, (4.2)
v=(v0,v1,v2, . . . ,vn−1)T. (4.3)
Because the matrix Ŵ is symmetric, its inverse Ŵ−1 is also symmetric. The formula for Ŵ−1 is a special case of the Gohberg-Semencul formula. Inspection of the special cases of the inverse matrix Ŵ−1 for the first several values of n suggested making three useful assumptions. First, the vector u is equal to the first column of Ŵ−1. More formally,
u
j−1=(Ŵ−1)j,l for each j∈{1,2, . . . ,n}. (4.4)
Second, the vector v is equal to the last column of W−1, i.e.,
v
j−1=(Ŵ−1)j,n for each j∈{1,2, . . . ,n}. (4.5)
Third, the vector v is equal to the reverse of the vector u,
v
k
=u
n−1−k for each k∈{0,1,2, . . . ,n−1}. (4.6)
In other words, only the vector u needs to be determined to be able to multiply the inverse matrix Ŵ−1 by a vector using structured matrix multiplication.
One approach to deriving an explicit formula for computing the vector u is to derive it from special cases for the first several values of n. If this induction is successful, then it should be possible to use the resulting formula for each finite n. Because u determines v, this is sufficient to formulate the ICZT algorithm using the Gohberg-Semencul formula and structured matrix multiplication.
Special Cases of the Formula for Inverting the Toeplitz Matrix Ŵ
Special Case for n=1
Suppose that n=1. Then, Ŵ is a 1-by-1 matrix that consists of a single number, which is equal to 1. More formally,
This implies that the inverse matrix Ŵ−1 is also a 1-by-1 matrix that consists of a single number 1, i.e.,
Ŵ
−1=[1]. (4.8)
The first and last row of Ŵ−1 are identical: both consist of a single element that is equal to 1. More formally,
u=(u0)=(Ŵ1,1−1)=(1), (4.9)
v=(v0)=(Ŵ1,n−1)=(1). (4.10)
This leads to a degenerate special case of the Gohberg-Semencul formula:
Special Case for n=2
Suppose that n=2. Then, Ŵ is a 2-by-2 matrix that is specified by the following formula:
which is well-defined for each W∈\{0}.
In this case, the inverse matrix Ŵ−1 is also a 2-by-2 matrix, which implies that its first column u is a two-element vector, i.e., u=(u0, u1)T. Its elements can be expressed as a function of W by solving the following linear system:
Ŵu=e
0. (4.13)
In this formula, e0 denotes a vector in which the first element is set to one and the remaining elements are set to zero, i.e.,
e
0=(1,0)T. (4.14)
In other words, the dot-product of the first row of Ŵ and the vector u has to be equal to 1 and the dot product of the second row of Ŵ and u has to be equal to 0.
The linear system (4.13) can be expressed in terms of the four elements of Ŵ and the two elements of u. This leads to the following expanded form of (4.13):
The previous equation can also be viewed as a system of two scalar linear equations:
Both of these equations are well-defined whenever W≠0.
The term
can be subtracted from both sides of (4.17), which leads to a formula for the value of u1 as a function of W and u0:
The right-hand side of the previous equation can be plugged into (4.16). This results in an equation that depends only on u0 and W. More formally,
Multiplying both sides of the previous equation by
leads to a formula for the value of u0 as a function of W:
Plugging this value into the right-hand side of (4.18) results in a formula that expresses the value of u1 as a function of W. More formally,
To summarize, in the 2-by-2 case a column vector u that specifies the first column of the inverse matrix Ŵ−1 can be expressed as the following function of the parameter W:
The vector v can be obtained by reversing the elements of u, i.e.,
A closed-form expression for the inverse matrix Ŵ−1 can be derived by combining the expressions for u and v. That is,
In this special case, the Gohberg-Semencul formula can be verified using the following sequence of matrix transformations. It starts from the difference between the left-hand side and the right-hand side of the formula stated in (3.4) and shows that this difference is equal to zero:
Special Case for n=3
In this special case, Ŵ is a 3-by-3 Toeplitz matrix. Each element of Ŵ is a function of the transform parameter W. More formally,
The inverse matrix Ŵ−1 is also a 3-by-3 matrix, but it is no longer Toeplitz, in contrast to the 2-by-2 case. Let u be the first column of Ŵ−1, i.e.,
u=(u0,u1,u2)T=((Ŵ−1)1,1,(Ŵ−1)2,1,(Ŵ−1)3,1)T. (4.27)
Similarly to the 2-by-2 case, the vector u is a solution to the following linear system:
Ŵu=e
0. (4.28)
In contrast to the previous case, however, in this case e0 denotes a column vector that consists of three elements instead of two elements. The first element of e0 is equal to 1. The remaining two elements of e0 are equal to 0. In other words,
e
0=(1,0,0)T. (4.29)
The linear system (4.28) can be expressed in terms of the nine elements that constitute Ŵ and of the three elements that constitute u. A result of this expansion is shown below:
This linear system can also be expressed in scalar form using a system of three equations with three unknowns. The left-hand side of each of these three equations is equal to a dot product between a row of Ŵ and the vector u. The right-hand side is equal to the corresponding element of e0. More formally,
Solving this system of linear equations leads to a formula that expresses the vector u as a function of the parameter W, which is shown below:
The inverse matrix Ŵ−1 has the following form
Note that the vector v specifies the last column of Ŵ−1 and it is equal to the reverse of the vector u, which specifies the first column of the matrix. In other words, the previous formula confirms the three assumptions (4.4), (4.5), and (4.6).
Repeating this process for other values of n allows us to derive the general formula that determines u. The next section states this formula.
General Formula for Inverting the Toeplitz Matrix Ŵ
In the general case, the elements of the vector u, which specifies the first column of Ŵ−1, can be computed using the following formula:
For each k, the value of uk can be computed in O(l) using precomputed values of the products of the polynomials that appear in the denominator of the right-hand side of (4.36). These values are computed in a separate loop, which runs in O(n).
The resulting value of u and its reverse, which is equal to v, can be plugged into the Gohberg-Semencul formula (3.4) to compute the inverse matrix Ŵ−1. It can also be used as a generating vector for efficient algorithms that compute the products of Toeplitz matrices and vectors. These algorithms can be called in a sequence that implements multiplying the matrix Ŵ−1 by a vector without actually storing Ŵ−1 in memory. This results in the ICZT algorithm that runs in O(n log n).
The ICZT in Matrix Form
The following equation shows the ICZT in matrix form:
x=A
−1
Q
−1
Ŵ
−1
P
−1
X, (4.37)
where
That is, the formula shows how to compute the CZT input vector x from its output vector X. This equation was derived by inverting the diagonal matrices in the forward transform formula (2.13) and replacing the matrix Ŵ with its inverse Ŵ−1.
Each matrix in formula (4.37) is either a diagonal matrix or it can be expressed as a difference of products of Toeplitz matrices. Implementing the formula leads to an O(n log n) algorithm for computing the ICZT, which is given in Algorithm 5.2, below. The algorithm performs all matrix computations efficiently by using the generating vectors to compute the results of all matrix-vector operations without storing any intermediate matrices in memory. It requires O(n) memory to run.
In the 3-by-3 case, the CZT can be expressed with the following matrix equation:
In that case, the expanded matrix equation for the ICZT looks like this:
The inverse matrix Ŵ−1 is given in (4.35). The algorithm, however, does not construct this matrix explicitly. As described above, Ŵ−1 can be expressed as follows:
where the vector u=(u0, u1, u2) is given by (4.34) and the vector v=(v0, v1, v2)=(u2, u1, u0) is the reverse of u. For these values of u and v, equation (4.40) has the following form:
In addition, the matrix is equal to the transpose of the matrix and the matrix is equal the transpose of the matrix . Thus, the inverse matrix Ŵ−1 can be expressed in the following simplified form:
Furthermore, both and can be generated from the elements of the vector u.
Substituting (4.42) into (4.37) leads to the following matrix equation for the ICZT:
Instead, equation (4.43) is computed efficiently by exploiting the structure of these matrices. As described above, these four Toeplitz matrices are not constructed explicitly.
The CZT Algorithm and the ICZT Algorithm
Algorithm 5.1 gives the pseudo-code for the CZT algorithm. The algorithm uses the convolution based algorithm T
Algorithm 5.2 gives the pseudo-code for the ICZT algorithm. It implements the inverse formula (4.42) without actually storing any matrices in memory. The algorithm runs in O(n log n), where n=max(M, N). This implementation supports only the case n=M=N. As described above, the function T
The numerical accuracy was computed by performing the CZT followed by the ICZT and computing the Euclidean distance between the input of the CZT and the output of the ICZT. The final accuracy was averaged over 100 random input vectors. The second column in
Algorithm 5.3 gives the pseudo-code for the ICZT-RECT algorithm, which implements the inverse algorithm for the case when N≤M. This algorithm calls Algorithm 5.2 with the second parameter set to M and then returns only the first N elements of its output vector.
Having described the ICZT algorithm, applications for the algorithm are now provided. In that regard, the following is just a partial list of some useful applications of the ICZT algorithm. In embodiments, the ICZT algorithm is used in applications for generating or analyzing the data received from or sent to radar-based sensors. In other embodiments, the ICZT algorithm is used in applications for generating or analyzing the data received from or sent to sonar sensors. In still other embodiments, the ICZT algorithm is used in applications for generating or analyzing the data received from or sent to other range-based sensors.
In yet other embodiments, the ICZT algorithm is used in hardware implementations of the ICZT algorithm. In embodiments, the hardware implementation is a variety of systems including a memory device and a processor, e.g., a personal computer, a chip (e.g., system-on-a-chip), a system comprising an application-specific integrated circuit (ASIC), a system comprising a graphics processing unit (GPU), or a field-programmable gate array (FPGA).
In further embodiments, the ICZT algorithm is used in improving the speed of applications that need to compute the ICZT by replacing slower methods that invert the matrix explicitly or solve an explicitly-formulated linear system. Additionally, the ICZT algorithm can replace the conventionally used FFT and IFFT in whole or in part. This replacement can extend the scope of a computational system to cover points on logarithmic spiral contours that may be located inside or outside the unit circle. Still further, prior to or during computing of the ICZT, the frequency domain vector can be modified such that the time domain vector returned by the ICZT is different from the time domain vector used to generate the frequency domain vector. For example, an operation can be performed on the frequency domain vector, such as filtering certain elements or frequencies from the vector.
Further, in embodiments, the ICZT algorithm is used in medical imaging applications, e.g., CT, PET, or MRI. Additionally, the ICZT algorithm is used in applications in signal processing, signal analysis, signal synthesis, speech and audio processing, and image processing. In signal processing applications, the input vector of the CZT or FFT may be a time-domain vector derived from an audio or image signal, such as by sampling the signal. The output vector of the CZT or FFT may then be a frequency domain vector representation of those signals.
The following Appendices A-E provide additional information regarding the implementation of the ICZT algorithm.
Appendix A: Reversing the Direction of the Logarithmic Spiral Contour to Improve the Numerical Accuracy of the CZT and the ICZT
This appendix describes alternative versions of the CZT and the ICZT algorithms that improve the numerical accuracy of the computed transforms. This is achieved by reversing the direction of the chirp contour when |W|<1 and keeping the original direction when |W|≥1. The parameters for the reversed contour are W1=W−1 and A1=AW−(M−1). Depending on the concrete values of the transform parameters, the improvement of the numerical accuracy may exceed several orders of magnitude.
Algorithm A.1 gives the pseudo-code for the alternative version of the CZT algorithm that performs contour reversal when |W|<1. Algorithm A.2 gives the pseudo-code for the alternative version of the ICZT algorithm that also performs contour reversal in that case.
Using these algorithms, the numerical accuracy of both the CZT and the ICZT can be improved for chirp contours that are growing logarithmic spirals, i.e., when |W|<1. In those cases, Algorithm A.1 and Algorithm A.2 reverse the direction of the chirp contour. Furthermore, this reversal is accompanied by a reversal of the order of the elements in the vector X, which is the CZT output vector in Algorithm A.1 and the ICZT input vector in Algorithm A.2.
Appendix B: FFT and Inverse FFT Algorithms
This appendix states the FFT algorithm and the inverse FFT algorithm. Algorithm B.1 gives pseudo-code for the Fast Fourier Transform (FFT). Algorithm B.2 gives pseudo-code for the inverse Fast Fourier Transform (IFFT). Both the FFT and the IFFT run in O(n log n).
Appendix C: Multiplying a Toeplitz Matrix by a Vector
This appendix describes a popular method for multiplying a Toeplitz matrix by a vector. Let A be a n×n Toeplitz matrix and let x be a vector. The matrix A is specified by its first row r and its first column c, where it is assumed that r0 is equal to c0. The example in this appendix assumes that n is a power of 2. The approach, however, can be modified to work for other values of n. More formally,
To compute the product y=Ax efficiently using an FFT-based algorithm, it is possible to embed A into a 2n×2n circulant matrix A as shown below:
The vector x is padded with n zeros at the end, which results in a vector X of length 2n:
The product of A and X can be computed using an FFT-based algorithm in O(n log n). That is, the goal is to compute a vector ŷ of length 2n, which is equal to  {circumflex over (x)}. More formally,
The first n elements of y are equal to the corresponding elements of y, i.e., yk=ŷk for each k∈{0, 1, 2, . . . , n−1}.
It only remains to show how to multiply a (2n)-by-(2n) circulant matrix B by a vector v of length 2n using FFT and IFFT. The matrix B is generated by its first column vector b. More formally, let
This product can be computed using the DFT and the inverse DFT, which follows from the circular convolution theorem. In other words, each element (Bv)k of the product is equal to the k-th element in the circular convolution of b and v. That is,
DFT(Bv)=DFT(b)×DFT(v), (C.6)
where x denotes elementwise multiplication. Therefore,
Bv=DFT−1(DFT(b)×DFT(v)). (C.7)
The DFT and the inverse DFT can be computed using the FFT and the inverse FFT, i.e.,
Bv=FFT−1(FFT(b)×FFT(v)). (C.8)
To summarize, the product of an n-by-n Toeplitz matrix and a vector, where n is assumed to be a power of two, can be computed using the following six steps: 1) go from Toeplitz to circulant by concatenating the first column, a single zero, and the reverse of the last n−1 elements of the first row; 2) pad the vector with n zeros at the end; 3) compute the DFT of the first column of the circulant matrix; 4) compute the DFT of the padded vector; 5) multiply the two DFTs elementwise; 6) compute the inverse DFT of the elementwise product; and 7) return the first n elements of the result vector computed by the inverse DFT. Use an FFT algorithm to compute the DFT and an IFFT algorithm to compute the inverse DFT. Note that in step 1) neither the Toeplitz matrix nor the circulant matrix is explicitly computed. Instead, only their generating vectors are used to perform the necessary computations.
Algorithm C.1 gives the pseudo-code for the algorithm described above. The computational complexity of this algorithm is O(n log n). The name of the function is T
Instead of including the FFT computations in the algorithms, it is possible to use FC
for each k∈{0, 1, . . . , n−1}.
Appendix D: Toeplitz Vector Product Using Pustylnikov's Decomposition
An algorithm for multiplying a Toeplitz matrix by a vector can be formulated using Pustylnikov's decomposition. This algorithm does not embed a Toeplitz matrix into a circulant matrix as described in Appendix C. Instead, this appendix describes a different version of T
An example that illustrates this algorithm is shown below. Let A be the following 4-by-4 Toeplitz matrix, which is generated by its first row r and its first column c.
Then, A can be decomposed into the sum of two matrices as follows:
A=A′+A″, (D.2)
where A′ is a circulant matrix and A″ is an f-circulant matrix with f=−1 (i.e., a skew-circulant matrix). For this example, these two matrices have the following form:
The formula for computing the values of A′ and A″ is provided below. Let a′=(a′0, a′1, a′2, . . . , a′n−1) be the first column of A′, i.e.,
Similarly, let a″=(a″0, a″1, a″2, . . . , a″n−1) be the first column of A″. That is,
Then, the elements of a′ and a″ can be computed using the following formulas:
where r is the first row of A and c is its first column.
Algorithm D.1 gives the pseudo-code for the algorithm described above. The name of the function is T
Algorithm D.2 gives the pseudo-code for the function FC
Appendix E: Toeplitz Vector Product with FFT-based Convolution
Algorithm E.1 shows the pseudo-code for yet another algorithm for multiplying a Toeplitz matrix by a vector. The function name in this case is T
Algorithm E.2 gives the pseudo-code for an FFT-based convolution algorithm, which is an O(n log n) method for computing discrete convolution. It was used in Algorithm E.1.
All references, including publications, patent applications, and patents cited herein are hereby incorporated by reference to the same extent as if each reference were individually and specifically indicated to be incorporated by reference and were set forth in its entirety herein.
The use of the terms “a” and “an” and “the” and similar referents in the context of describing the invention (especially in the context of the following claims) is to be construed to cover both the singular and the plural, unless otherwise indicated herein or clearly contradicted by context. The terms “comprising,” “having,” “including,” and “containing” are to be construed as open-ended terms (i.e., meaning “including, but not limited to,”) unless otherwise noted. Recitation of ranges of values herein are merely intended to serve as a shorthand method of referring individually to each separate value falling within the range, unless otherwise indicated herein, and each separate value is incorporated into the specification as if it were individually recited herein. All methods described herein can be performed in any suitable order unless otherwise indicated herein or otherwise clearly contradicted by context. The use of any and all examples, or exemplary language (e.g., “such as”) provided herein, is intended merely to better illuminate the invention and does not pose a limitation on the scope of the invention unless otherwise claimed. No language in the specification should be construed as indicating any non-claimed element as essential to the practice of the invention.
Preferred embodiments of this invention are described herein, including the best mode known to the inventors for carrying out the invention. Variations of those preferred embodiments may become apparent to those of ordinary skill in the art upon reading the foregoing description. The inventors expect skilled artisans to employ such variations as appropriate, and the inventors intend for the invention to be practiced otherwise than as specifically described herein. Accordingly, this invention includes all modifications and equivalents of the subject matter recited in the claims appended hereto as permitted by applicable law. Moreover, any combination of the above-described elements in all possible variations thereof is encompassed by the invention unless otherwise indicated herein or otherwise clearly contradicted by context.
This patent application is a continuation of PCT/US2018/043468, filed Jul. 24, 2018, which claims the benefit of U.S. Provisional Patent Application No. 62/536,361, filed Jul. 24, 2017, the entire teachings and disclosure of which are incorporated herein by reference thereto.
Number | Date | Country | |
---|---|---|---|
20200159808 A1 | May 2020 | US |
Number | Date | Country | |
---|---|---|---|
62536361 | Jul 2017 | US |
Number | Date | Country | |
---|---|---|---|
Parent | PCT/US2018/043468 | Jul 2018 | US |
Child | 16750850 | US |