Systems and methods for synthetic aperture radar with vector processing
11644566 · 2023-05-09
Assignee
Inventors
- Ryan Haoyun Wu (San Jose, CA)
- Jayakrishnan Cheriyath Mundarath (Austin, TX, US)
- Sili Lu (Austin, TX)
- Maik Brett (Taufkirchen, DE)
Cpc classification
G01S13/9017
PHYSICS
International classification
Abstract
Embodiments are disclosed that for synthetic aperture radar (SAR) systems and methods that process radar image data to generate radar images using vector processor engines, such as single-instruction-multiple-data (SIMD) processor engines. The vector processor engines can be further augmented with accelerators that vectorize element selection thereby expediting memory accesses required for interpolation operations performed by the vector processor engines.
Claims
1. A radar system, comprising: front-end circuitry coupled to transmit radar signals, to receive return radar signals, and to output digital radar data; FFT circuits coupled to receive the digital radar data and to output interpolated FFT data based upon pixel ranges and oversampled pixel range values, the FFT circuits comprising a vector processor engine and an accelerator coupled to the vector processor engine, wherein the vector processor engine is configured to provide parallel processing of the digital radar data and the accelerator is configured to select data elements to be processed; and a processor coupled to receive the FFT data and to output radar pixel data representing a radar image, wherein the accelerator comprises logic programmed to select an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset.
2. The radar system of claim 1, wherein the vector processor engine comprises a single-instruction multiple data (SIMD) processor.
3. The radar system of claim 1, wherein the accelerator comprises a plurality of multiplexers.
4. The radar system of claim 3, wherein the selection indices are used to generate address offsets and page offsets to control the plurality of multiplexers.
5. The radar system of claim 3, further comprising an output buffer configured to hold data for the output vector.
6. The radar system of claim 5, further comprising a register coupled to receive an enable signal associated with a most significant multiplex operation, the register indicating when the output buffer is full.
7. A circuit assembly, comprising FFT circuits coupled to receive the digital radar data and to interpolated FFT data based upon pixel ranges and oversampled pixel range values, the FFT circuits comprising a vector processor engine and an accelerator coupled to the vector processor engine, wherein the vector processor engine is configured to provide parallel processing of the digital radar data and the accelerator is configured to select data elements to be processed; and a processor coupled to receive the FFT data and to output radar pixel data representing a radar image, wherein the accelerator comprises logic programmed to select an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset.
8. The circuit assembly of claim 7, wherein the vector processor engine comprises a single-instruction multiple data (SIMD) processor.
9. The circuit assembly of claim 7, wherein the accelerator comprises a plurality of multiplexers.
10. The circuit assembly of claim 9, wherein the selection indices are used to generate address offsets and page offsets to control the plurality of multiplexers.
11. The circuit assembly of claim 9, further comprising: an output buffer configured to hold data for the output vector; and a register coupled to receive an enable signal associated with a most significant multiplex operation, the register indicating when the output buffer is full.
12. A method to generate a radar image, comprising: transmitting radar signals; receiving return radar signals; converting the return radar signals to digital radar data; processing, with FFT circuits, the digital radar data to output interpolated FFT data based upon pixel ranges and oversampled pixel range values, the processing including parallel processing with a vector processor engine and selecting data elements to be processed by the vector processor engine with an accelerator; outputting radar pixel data representing a radar image based upon the FFT data; and with the accelerator, selecting an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset.
13. The method of claim 12, further comprising, with the vector processor engine, issuing single instructions that return multiple data outputs.
14. The method of claim 12, wherein the accelerator comprises a plurality of multiplexers.
15. The method of claim 14, further comprising generating address offsets and page offsets using the selection indices and controlling the plurality of multiplexers with the address offsets and page offsets.
16. The method of claim 14, further comprising holding data for the output vector in an output buffer.
17. The method of claim 16, further comprising storing an enable signal associated with a most significant multiplex operation in a register and indicating that an output buffer is full when the enable signal is asserted.
Description
DESCRIPTION OF THE DRAWINGS
(1) It is noted that the appended figures illustrate only example embodiments and are, therefore, not to be considered as limiting the scope of the present invention. Elements in the figures are illustrated for simplicity and clarity and have not necessarily been drawn to scale.
(2)
(3)
(4)
(5)
(6)
(7)
DETAILED DESCRIPTION
(8) Systems and methods are disclosed for synthetic aperture radar (SAR) that process radar image data to generate radar images using vector processor engines. The vector processor engines can be further augmented with accelerators to expedite memory accesses required for vectoring operations performed by the vector processor engines. A variety of embodiments can be implemented and different features and variations can be implemented while still taking advantage of the techniques described herein.
(9) It is noted that
(10) As described above, the formation of SAR images typically requires that the relative motion between each antenna and any hypothesized point target, on which a pixel is to be constructed, to be precisely known. From this hypothesized range and range rate information, radar data across multiple frames is combined. If a target is indeed present at a hypothesized pixel position and has motion that matches the assumed motion, the energy of the echoes or returns radar signals for this target will add up coherently. On the other hand, if a target is not present at the pixel under test or has motion that does not match the assumed motion, only noise is added up in a non-coherent fashion. As such, over a number (X) of integrations, the signal-to-noise power ratio (SNR) will be enhanced by up to a factor of X, and an image is formed for the target that is indeed present. However, adequate resolution with FFT computations is achieved in prior solutions by zero-padding the original samples by four-times or eight-times or more. Unfortunately, these prior SAR solutions are computationally intensive and impractical for low-cost automotive radar applications.
(11) The SAR processing described herein with respect to
(12) As described further below, the disclosed SAR systems of
(13)
(14) It is noted that one or more components of the SAR system 105 including the FFT circuits 104 and the processor 106 can be implemented using one or more application specific integrated circuits (ASICs), microcontrollers, microprocessors, programmable logic devices, or other programmable circuits that execute hardware instructions or program instructions stored in one or more non-volatile data storage mediums to carry out the functions described herein. In addition, the SAR system 105 can be implemented in whole or in part as a system-on-chip (SoC) integrated circuit. Further, the memory 108 and other memories used by the SAR system 105 can be implemented as one or more data storage mediums configured to store the data described herein. Other variations can also be implemented while still taking advantage of the adaptive sub-tile techniques described herein.
(15)
(16) In operation, the SAR system 105 implements efficient radar image processing as described further below with respect to
(17) Looking now to
(18) In operation, the example embodiment of
(19) The alternative SAR processing and efficient FFT interpolators described herein are based on the following formulations. For the case of weighted oversampled FFT of {x.sub.n} that evaluates the following DFT expression:
(20)
where Y.sub.k represents the FFT interpolated data; n=0, 1, . . . , N−1; k=0, 1, . . . , K−1; γ=2π/K; w.sub.n represents a weight value; and x.sub.n represents a sample value.
(21) When K/N is an integer, the above equation can be evaluated by computing K/N instances of an N-point FFT operation and by combining their outputs thereby reducing the complexity from O(K log K) to O(K log N) and reducing the required FFT length from K to N. Further, denoting
(22)
where η=0, 1, ⋅ ⋅ ⋅ , K/N−1, for a given k and η:
(23)
where e.sup.−jγnη is the modulation term; Y.sub.k represents the FFT interpolated data; η represents the remainder of k divided by K/N; n=0, 1, N−1; k=0, 1, . . . , K−1; γ=2π/K; w.sub.n represents a weight value; x.sub.n represents a sample value; and K, N, and K/N are integers with K>N. In general, K/N instances are needed for FFT computations for all K output samples of Y.sub.k. For an example of K/N=4 (such that η=0, 1, 2, 3), the 4 instances of the N-point DFT are:
(24)
where each instance is evaluated using an N-point FFT. Further, it is noted that
(25)
represents the remainder (rem) of k divided by K/N.
(26) The above formulas show the output (Y) of the process can be implemented using multiple shorter (i.e., fewer number of samples) DFT operations. More specifically, looking at the N elements of the output Y:Y[1], Y[2], . . . Y[K], . . . Y[K], the elements with indices k such that rem(k,K/N)=0 will form a group. The indices k such that rem(k,K/N)=1 will form another group, and so on. This continues to form a total K/N groups. Each of these K/N groups is computed using the DFT formula with the N-sample (x) as an input. Although the formula above is written using a DFT expression, it is recognized that FFT is simply a faster implementation of DFT, and it is understood that this DFT expression can be implemented using FFT operations. As such, the above process leads to K/N instances of N-sample FFT operations.
(27) Looking back to
ω.sub.m=k.sub.m_to_Hz√{square root over ((x.sub.pixel−x.sub.radar).sup.2+(y.sub.pixel−y.sub.radar).sup.2)}
where k.sub.m_to_Hz is a scaling constant converting meters to Hz according to the chirp de-ramp mixing effect; [x.sub.pixel, y.sub.pixel] are the pixel's x and y positions relative to a global frame of reference; and [x.sub.radar, y.sub.radar] are the antenna's x and y positions relative to a global frame of reference. For the above equation, it is assumed that the transmit and receive antennas are co-located, and this expression can be extended to cases where the transmit and receive antennas are not co-located.
(28) Finally, phase compensation can have a complexity of O{M}. As a result, the total complexity amounts to O{N+K+K log N+5M}. It can be seen that if K(1+log N)<NM the efficient oversampled FFT approach described herein is more efficient than a traditional DFT-based approach. It can also be seen if K log N+K<K log K+M, the efficient oversampled FFT approach described herein is more efficient than a conventional oversampled FFT SAR approach where K samples are used. Because K is multiple times larger than N by definition and where M (e.g., number of pixel, a 200×200 image results in M=40,000) is usually much larger than K, the efficient oversampled FFT approach described herein is almost always more efficient.
(29) In addition to the algorithmic improvement of the oversampled FFT processing provided by the FFT circuits 104, the FFT circuits 104 can be carried out in one or more ASIC-based N-point FFT accelerators. In contrast to the N-point FFT solution in
(30) In addition to FFT computations, one main contributor to the computational complexity of prior SAR solutions is the calculation of pixel ranges. For example, when the number of pixels increases in a SAR solution, the pixel range calculations become a dominant factor increasing complexity in the computational requirements. In addition to reducing the complexity through the efficient oversampled FFT processes described in
(31) Looking now to
(32) Initially, upon the examination of the following simplistic range equation, it can be concluded that the complexity of the standard computation is O{3M.sub.xM.sub.y} for an SAR image consisting of M.sub.x horizontal positions and M.sub.y vertical positions.
pixel range=√{square root over ((x.sub.m.sub.
Looking again to
(33) Upon a closer examination, it is noted for the disclosed embodiments that, if the imaged area is arranged in a rectangular grid fashion, the y-axis components (i.e., (y.sub.m.sub.
(34) In addition to the algorithmic enhancement of the pixel range determinations, the implementation of
(35) It is noted that the radar position for the SAR system 105 is assumed to be changing at each chirp start due to the movement of the vehicle 130. As such, the pixel range computation is performed for each chirp. Because the processing is performed on a chirp-by-chirp basis, the movement of SAR system 105 does not need to be constant for the SAR processing to work. The radar position information is assumed to be estimated by a position sensor, such as a GPS-IMU sensor, and this position information is provided to the SAR system 105. Because the instruction and loaded constant values are identical to each of the multiple x.sub.m.sub.
(36) It is further noted that combining the pixel range determination processes of
(37) As indicated above, example embodiments for SAR systems are described above with respect to
(38) As indicated above, most of the mathematical operations above can be mapped conveniently on to a vector processor, such as a SIMD processor, by vectorizing along one of the M.sub.x or M.sub.y dimensions. One exception to this relatively easy vector mapping, however, is the selection of elements of the FFT based on an index derived from the calculated range for each pixel. As described below, this selection can be implemented by building a two-dimensional (2D) array in memory corresponding to the pixel grid. Each element can then be selected arbitrarily from a contiguously placed FFT output vector.
(39) Conventional SIMD/MIMD/vector processors rely on a vectorized arrangement of the input data units in memory. That is, the input data vector is assumed to be in contiguous element units with widths corresponding to the size of the vector data path. However, the selection step in the algorithm as described above, stipulates grabbing data for a vector operation in a non-contiguous manner. Therefore, the bottleneck of implementation becomes the memory access step required to construct a vector to be consumed by the vector data path. A brute force selection algorithm would have a worst case computational complexity of M.sub.x*M.sub.y because each element is arbitrarily accessed based on dynamically generated indices. The embodiment below describes an accelerator for the selection step that can attach to any SIMD/MIMD/vector processor engine to enable efficient selection of elements in memory based on a random selection index thereby reducing the computational complexity. In one embodiment, the worst case complexity can be reduced to min(M.sub.x, M.sub.y)*ceil(N/N.sub.AU) where N is the FFT size, where N.sub.AU is the width of the vector processor engine in number of ALUs, where the “min” function returns the smaller of M.sub.x and M.sub.y, and where the “ceil” function returns the smallest integer that is greater than or equal to N/N.sub.AU.
(40) In selected embodiments, the accelerator exploits the non-decreasing or non-increasing property of the range for the pixels along one of the dimensions (M.sub.x, M.sub.y). The FFT outputs are loaded to the accelerator, one vector at a time. At each load, the logic selects the subset of the currently loaded vector that is required by the “next” indices along one of the pixel grid dimensions. Thus, per parsing of the entire FFT output vector (that is, a load of the whole FFT output vector from memory in ceil(N/N.sub.AU) cycles), a number of elements equal to max(M.sub.x, M.sub.y) are selected, where the “max” function returns the larger of M.sub.x and M.sub.y.
(41)
(42)
(43)
(44) The N element input data set for the selection accelerator described herein (which is the output of the FFT operation) is partitioned into J pages where J=ceil(N/N.sub.elem) and where each page has N.sub.elem contiguous elements. In each cycle of operation, a page of the input vector 610 is fetched from memory. The page offset represents the page currently loaded and corresponds to the MS (most significant) ceil(log 2(K)) bits of the load address. This input vector 610 includes a page of input elements from an input element 602 in the lowest location (LL) of the page to an input element 604 in the highest location (HL) of the page. The LL input element 602 represents the element x(j*N.sub.elem+0), where N.sub.elem represents the number of elements in each memory row, and where j=0, 1, . . . ceil(N/N.sub.elem)−1 with N representing the total number elements in the input vector 610 and j representing the page index. The HL input element 604 represents the element x(j*N.sub.elem+N.sub.elem−1). The number of multiplexers 620 is equal to N.sub.elem with a LL multiplexer 620 being designated MUX[0] and a HL multiplexer 620 being designated MUX[N.sub.elem−1]. The LL multiplexer 620 receives the LL enable signal EN[0] and the LL address ADDR[0]. The HL multiplexer 620 receives the HL enable signal EN[N.sub.elem−1] and the HL address ADDR[N.sub.elem−1]. The HL enable signal EN[N.sub.elem−1] is also stored in the register 640, which will transition when the HL enable signal EN[N.sub.elem−1] is asserted. The output of the multiplexers 620 are stored in the output vector 630, which includes a range of output elements from a LL output element 632 to a HL output element 634. The LL output element 632 represents the element y(q*N.sub.elem+0), where q=0, 1, . . . M/N.sub.elem−1, and where M represents the total number of indices as described in further detail below. The HL output element 634 represents the location y(q*N.sub.elem+N.sub.elem−1).
(45)
(46) The input vector 610 is a subset of the N element full input vector sitting in memory. The idea is that in each cycle of operation, a new set of N.sub.elem of the N element vector is fetched, as represented by input vector 610, and the MUX logic is executed. Thereafter, the next set of N.sub.elem elements is fetched and so on. This process repeats until all F elements have been loaded and parsed. This will complete in N/N.sub.elem cycles.
(47) During operation of the accelerator 504 as shown in
(48) For one example embodiment, a state machine can be implemented in logic to implement the embodiment 500. One example set of instructions for such a state machine is the set forth below. For this state machine, term “N.sub.AU” represents the number of accelerators 504 or complex arithmetic units (AUs) used for the vector processing. The term “N.sub.RAU” represents N.sub.AU*4. The term “N.sub.elem” represents the number of data elements per line stored in data memory (DMEM). For 16-bit data, N.sub.elem=N.sub.AU*4. For 32-bit data, N.sub.elem=N.sub.AU*2. For 64-bit data, N.sub.elem=N.sub.AU for 64 bit data. The register “R_IN” represents a vector input register that can hold N.sub.elem elements from the data input vector 610. The register “R_VIND” represents a vector index register that can hold N.sub.RAU selection indices 660. The register “R_IND” represents an index register that can hold N.sub.elem indices. A register “R_OUT” represents an output register that can hold N.sub.elem data elements within the data output vector 630. A 16-bit counter 656 maintains the current page (CURR_PG) of the data vector currently loaded into the input register (R_IN). The bit register (W) 640 signals that the output register (R_OUT) is full. The entire operation will complete within {N/N.sub.elem+M/N.sub.elem+M/N.sub.RAU} cycles.
(49) TABLE-US-00001 TABLE INSTRUCTIONS FOR EXAMPLE STATE MACHINE Instruction Action 1 Initialize CURR_PG = 0, IND_PG = 0, LAST_PG = N/N.sub.elem −1 2 Load [x(j*N.sub.elem + 0), ..., x (j*N.sub.elem + N.sub.elem −1)] from DMEM to R_IN, where j = CURR_PG 3 Load [p.sub.k (r*N.sub.RAU + 0), ..., p.sub.k (r*N.sub.RAU + N.sub.RAU −1)] from DMEM to R_VIND, where r = IND_PG 4 Set s = 0 5 Copy/Move R_VIND[s*N.sub.elem: s*N.sub.elem + N.sub.elem −1] to R_IND 6 Run VINX-MUX (for i = 0, 1, ..., N.sub.elem −1 ): Define ELEM_OFF[i] = LS b.sub.1 bits of R_IND[i] Define PG_OFF[i] = MS b.sub.2 bits of R_IND[i] Generate signal EN[i] such that EN[i] = 1, if PG_OFF[i] = CURR_PG, and, EN[i] = 0, otherwise Generate ADDR[i] = ELEM_OFF[i] as the address selector for the multiplexer If EN[i] is 1, the MUX[i] selects element in R_IN[ELEM_OFF[i]], and writes it to R_OUT[i] Set W = EN[N.sub.elem −1] 7 If W = 1 Store R_OUT to DMEM (maintained by a store address pointer) Clear: W = 0 s = s + 1 If S < N.sub.RAU/N.sub.elem, go to Step 5 Update IND_PG = IND_PG + 1, and, go to step 3 8 CURR_PG = CURR_PG + 1 9 If CURR_PG ≤ LAST_PG Load [x (j*N.sub.elem + 0), ..., x (j*N.sub.elem + N.sub.elem −1)] from DMEM to R_IN, where j = CURR_PG Go to step 6 10 DONE
(50) For the example state machine in the TABLE above, the first N.sub.elem elements of the input vector (x) is loaded in one DMEM line per cycle. Next, the first N.sub.elem indices from index vector (p.sub.k) is loaded one DMEM line per cycle. An intermediate output buffer can be maintained having a size of one DMEM line. As the input vector (x) is loaded one DMEM line at a time, elements from the input vector (x) are copied to locations in the output buffer corresponding to the first subset of indices until the output buffer is full as indicated by register 640. Once the output buffer is full, the contents of the output buffer are stored memory. The process then restarts with an empty output vector (to be eventually appended to the previously stored output vector), and the “next” segment of indices. Data loads are continued. Because the indices are constrained to be non-decreasing or non-increasing, there is no need to “look back” at previously loaded data, and one sequence of loads covering the entire input vector (x) will populate the output vector in its entirety.
(51) As described herein, a variety of embodiments can be implemented and different features and variations can be implemented, as desired.
(52) For one embodiment, a radar system is disclosed including front-end circuitry, FFT circuits, and a processor. The front-end circuitry is coupled to transmit radar signals, to receive return radar signals, and to output digital radar data. The FFT circuits are coupled to receive the digital radar data and to output interpolated FFT data based upon pixel ranges and oversampled pixel range values, and the FFT circuits include a vector processor engine and an accelerator coupled to the vector processor engine. The vector processor engine is configured to provide parallel processing of the digital radar data, and the accelerator is configured to select data elements to be processed. The processor is coupled to receive the FFT data and to output radar pixel data representing a radar image. In further embodiments, the vector processor engine includes a single-instruction multiple data (SIMD) processor.
(53) In additional embodiments, the accelerator includes logic programmed to select an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset. In further embodiments, the accelerator comprises a plurality of multiplexers. In still further embodiments, the selection indices are used to generate address offsets and page offsets to control the plurality of multiplexers.
(54) In additional embodiments, the radar system includes an output buffer configured to hold data for the output vector. In further embodiments, the radar system includes a register coupled to receive an enable signal associated with a most significant multiplex operation, and the register is configured to indicate when the output buffer is full.
(55) For one embodiment, a circuit assembly is disclosed including FFT circuits and a processor. The FFT circuits are coupled to receive the digital radar data and to interpolated FFT data based upon pixel ranges and oversampled pixel range values, and the FFT circuits include a vector processor engine and an accelerator coupled to the vector processor engine. The vector processor engine is configured to provide parallel processing of the digital radar data, and the accelerator is configured to select data elements to be processed. The processor is coupled to receive the FFT data and to output radar pixel data representing a radar image. In further embodiments, the vector processor engine includes a single-instruction multiple data (SIMD) processor.
(56) In additional embodiments, the accelerator includes logic programmed to select an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset. In further embodiments, the accelerator comprises a plurality of multiplexers. In still further embodiments, the selection indices are used to generate address offsets and page offsets to control the plurality of multiplexers.
(57) In additional embodiments, the circuit assembly includes an output buffer configured to hold data for the output vector. In still further embodiments, the circuit assembly includes a register coupled to receive an enable signal associated with a most significant multiplex operation, and the register is configured to indicate when the output buffer is full.
(58) For one embodiment, a method to generate a radar image is disclosed including transmitting radar signals, receiving return radar signals, converting the return radar signals to digital radar data, processing the digital radar data with FFT circuits to output interpolated FFT data based upon pixel ranges and oversampled pixel range values, and outputting radar pixel data representing a radar image based upon the FFT data. The processing further includes parallel processing the radar data with a vector processor engine and selecting data elements to be processed by the vector processor engine with an accelerator. In further embodiments, issuing single instructions with the vector processor engine that return multiple data outputs.
(59) In additional embodiments, the method includes, with the accelerator, selecting an arbitrary subset of data elements from an input vector of data elements based upon a user-configured and ordered vector of selection indices to generate a continuous output vector comprising the subset. In further embodiments, the accelerator comprises a plurality of multiplexers. In still further embodiments, the method includes generating address offsets and page offsets using the selection indices and controlling the plurality of multiplexers with the address offsets and page offsets.
(60) In additional embodiments, the method includes holding data for the output vector in an output buffer. In further embodiments, the method includes storing an enable signal associated with a most significant multiplex operation in a register and indicating that an output buffer is full when the enable signal is asserted.
(61) It is further noted that the functional blocks, components, systems, devices, or circuitry described herein can be implemented using hardware, software, or a combination of hardware and software along with analog circuitry as needed. For example, the disclosed embodiments can be implemented using one or more integrated circuits that are programmed to perform the functions, tasks, methods, actions, or other operational features described herein for the disclosed embodiments. The one or more integrated circuits can include, for example, one or more processors or configurable logic devices (CLDs) or a combination thereof. The one or more processors can be, for example, one or more central processing units (CPUs), control circuits, microcontroller, microprocessors, hardware accelerators, ASICs (application specific integrated circuit), or other integrated processing devices. The one or more CLDs can be, for example, one or more CPLDs (complex programmable logic devices), FPGAs (field programmable gate arrays), PLAs (programmable logic array), reconfigurable logic circuits, or other integrated logic devices. Further, the integrated circuits, including the one or more processors, can be programmed to execute software, firmware, code, or other program instructions that are embodied in one or more non-transitory tangible computer-readable mediums to perform the functions, tasks, methods, actions, or other operational features described herein for the disclosed embodiments. The integrated circuits, including the one or more CLDs, can also be programmed using logic code, logic definitions, hardware description languages, configuration files, or other logic instructions that are embodied in one or more non-transitory tangible computer-readable mediums to perform the functions, tasks, methods, actions, or other operational features described herein for the disclosed embodiments. In addition, the one or more non-transitory tangible computer-readable mediums can include, for example, one or more data storage devices, memory devices, flash memories, random access memories, read only memories, programmable memory devices, reprogrammable storage devices, hard drives, floppy disks, DVDs, CD-ROMs, or any other non-transitory tangible computer-readable mediums. Other variations can also be implemented while still taking advantage of the techniques described herein.
(62) Unless stated otherwise, terms such as “first” and “second” are used to arbitrarily distinguish between the elements such terms describe. Thus, these terms are not necessarily intended to indicate temporal or other prioritization of such elements.
(63) Further modifications and alternative embodiments of the described systems and methods will be apparent to those skilled in the art in view of this description. It will be recognized, therefore, that the described systems and methods are not limited by these example arrangements. It is to be understood that the forms of the systems and methods herein shown and described are to be taken as example embodiments. Various changes may be made in the implementations. Thus, although the invention is described herein with reference to specific embodiments, various modifications and changes can be made without departing from the scope of the present invention. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and such modifications are intended to be included within the scope of the present invention. Further, any benefits, advantages, or solutions to problems that are described herein with regard to specific embodiments are not intended to be construed as a critical, required, or essential feature or element of any or all the claims.