The present disclosure is related to wireless communications, and in particular, is related to a polar transmitter apparatus and method.
In the field of wireless telecommunication, polar transmitter architectures are known which may be used to decompose an input signal from the baseband into a magnitude signal and a phase signal, which are subjected to an envelope modulation and a phase modulation, respectively, and then combined and amplified by a power amplifier. Polar transmitters use processors for performing a rectangular-to-polar conversion of the input signal which may be an I/O signal. By means of the rectangular-to-polar conversion, the input signal is represented in its polar coordinates. The polar transmitter may use a cordic (coordination rotation digital computer) processor receiving the I/O input signal and outputting the polar signal. Digital transmitters including a cordic processor may operate at high frequencies and with high accuracy. This results in a high power consumption which will significantly increase with an increase of the clock frequency at which the cordic algorithm operates, for example, when the required clock frequency is increased in future wireless networks.
Computing devices may require the processing of data which may represent a signal in Cartesian coordinates. On the basis of such a signal it may be desired to calculate a trigonometric function. Such an operation may take place in a processor, a graphical processor and/or a mathematical coprocessor of the computing device, like a desktop computer, a laptop, a smart phone. In such environments, the cordic algorithm may be implemented, for example directly in hardware, for performing operations like addition, subtraction or bit shifting. For determining the polar coordinates on the basis of a rectangular input signal, the cordic algorithm calculates iteratively both the magnitude and the angle of the resulting vector using a “magnitude path” and an “angle” path. A significant amount of hardware elements is required for implementing the operations mentioned above which, in turn, results in a higher power consumption of the device and/or may increase latencies in case signals are processed along the respective paths at different speeds so that before entering a new iteration, a latency is introduced until all signals in the different paths have been processed for the current iteration.
A method and an apparatus for determining at least one output value on the basis of at least one input value is disclosed. The input value is provided to a processing unit, wherein a combination of intermediate values is iteratively calculated. Each intermediate value is calculated during an iteration such that the intermediate value for each iteration is buffered, using a buffer storage. Based on the combination of the buffered intermediate values a storage is accessed, the storage storing a plurality of first output values, each first output value associated with a respective combination of the buffered intermediate values, so that the first output value is output.
The mobile communication device 100 may be a portable mobile communication device in one embodiment and may be configured to perform a voice and/or data communication according to a mobile communication standard with other communication devices, like other mobile communication devices or base stations of a mobile communication network. Mobile communication devices may comprise a mobile handset, such as a mobile phone or a smart phone, a tablet PC, a broadband modem, a laptop, a notebook, a router, a switch, a repeater or a PC. Also, the mobile communication device 100 may be a base station of a communication network.
In case it is desired to provide an even more accurate version of the angular coordinate, the apparatus 300 may comprise a further processing stage 314 that receives from the signal processor 302 the radial coordinate and the angular coordinate or angle. The second stage 314 may receive from the signal processor the values of the respective Cartesian coordinates after all iterations have been completed in the signal processor 302. On the basis of the coordinates of the turned vector, the remaining angle or angular coordinate of the turned input vector is calculated and then added to the angular coordinate that has been obtained by the signal processor 302 from the storage 304. Stage 314 may be provided for calculating the remaining angular coordinate using an iterative quasi division on the basis of the Cartesian coordinates of the turned input vector. During each iteration an access value is generated in the second stage 314 so that, after all iterations for the quasi division have been completed, a set of access values or an access value word is formed which can be used for accessing a further storage 316 indicated in dotted lines in
It is noted that in
In the following, example signal processing blocks of the apparatus 300 will be described in further detail. A “modified” cordic algorithm operating in the vector mode is used.
The angle path 404 receives the input value Zi which, in the vector mode, has an initial value of zero. The value Zi is applied to the adder 416. In addition, by means of block 418 the value of arctan(2−i) is calculated (i being the number of the iteration, i starting at zero) and the result of the calculation in block 418 is applied to the multiplexer 420 directly and via the inverter 422. The output of block 418 or the inverted output thereof is selected by means of the multiplexer 420 dependent on the most significant bit Yi. The output of the multiplexer 420 is input into the adder 416 generating the Zi+1 value for the next iteration that is also stored or buffered in the buffer 414. The iteration block 400 depicted in
As can be seen from
The modified algorithm does not use the conventional iteration block as it is depicted in
Thus, when implementing the modified cordic algorithm, the angle path can be omitted, and it is only necessary to provide, in addition to the magnitude path, the buffer 502 and an additional storage element holding the respective angular coordinates or angle so that the overall number of elements and signal processing elements can be reduced. Also the current consumption can be significantly decreased when using the modified cordic iteration block as depicted in
As described above with regard to
The second stage may further include a stage for adding the results of the preceding stages.
In the following, an example modified two stage vector mode cordic algorithm for determining the polar coordinates of an input vector described in Cartesian coordinates will be described. The polar coordinates of an input vector are calculated by iteratively turning the vector such that the y-coordinate approaches zero. The turning uses a priori known angles of decreasing value so that once the y-coordinate is within a predefined range around zero the value of the x-coordinate is the desired magnitude or radial coordinate of the input vector, and the angle or the angular coordinate is determined, as described above, by accessing a table holding predefined angular coordinate values. The following example considers an input resolution of 18 bits and an output resolution of 16 bits, and the input vector or the input signal is considered to have the following values:
xin=45000 yin=45000.
When using an ideal calculation of the magnitude would be rideal=63640, and the angle would be φideal=45°=π/4 rad=32768 (considering an 18 bit phase resolution).
To obtain a 16 bit output resolution, 16 iterations are required. 8 iterations will be made using the stage of
x8=104798
y8=749,
φ=32470≈0.7783 rad≈44.59°.
On the basis of these values, the second stage is entered for carrying out the quasi-division for determining the residual angle. As described above with regard to
Following stage 600 the values for the first iteration in the second stage are as follows:
x8=104798·2−810=40910
x8=0110011001010111102>>8=01100110012
y8=74910=10111011012
These values are the starting values for the quasi-division carried out by the iteration in the second stage using stage 620 (see
y8−x8=34010=01010101002
y9=34010=01010101002 x9=x8>>1=24010=0110011002
d=1 1.
The most significant bit of the subtraction y8−x8 is zero, and the output of the subtractor 622 will be forwarded, via multiplexer 628, to the buffer 626, and the value d, in view of the inverter 630 (see
y9−x9=13610=0100010002
y10=13610=0100010002 x10=x9>>1=10210=0011001102
d=11 2.
y10−x10=3410=001000102
y11=3410=001000102 x11=x10>>1=5110=001100112
d=111 3.
y11−x11=−1710=1011112
y12=3410=01000102 x12=x11>>1=2510=0110012
d=1110 4.
As can be seen, in the fourth iteration, the new value for y is not output by the multiplexer 628 because the result of the subtraction is negative yielding the most significant bit of the subtraction y11−x11 to be “1” so that the output y12 is the same as the input y11. The remaining iterations yield the following results.
y12−x12=910=0010012
y13=910=0010012 x13=x12>>1=1210=0010102
d=11101 5.
y13−x13=−310=111012
y14=910=010012 x14=x13>>1=610=001102
d=111010 6.
y14−x14=310=00112
y15=910=00112 x15=x14>>1=310=00112
d=1110101 7.
y15−x15=010=02
y16=010=02 x16=x15>>1=110=0012
d=11101011=23510 8.
This terminates the quasi-division. Multiplying d with 2−15 yields a result that is approximately the difference between the calculated angular coordinate in rad and the result after the 8 conventional cordic iterations in the first stage, namely
d·2−15=23510·2−15=0.0072 rad.
d is supplied to the table 316, as described above, in which the values are given in the desired resolution, and this value is then added to the angular coordinate generated by the first stage, for yielding the final, more precise angular coordinate.
In the following, a further example modified cordic algorithm will be described which operates in accordance with the rotation mode. The modified rotation mode cordic algorithm is implemented in two stages, wherein the first stage, other than in the above described examples, is identical to the stage used in conventional cordic algorithms, i.e. the first number of iterations is done in the signal processor shown in
Yi is applied to a further adder 802b and Xi, in a similar manner as Yi, is applied via the bit shifter 804b, the multiplier 806b, the bit shifter 810b, the multiplexer 812b and the inverter 814b to the adder 802b that outputs the final value for the Y coordinate.
A table 814 is addressed via the multiplexer 816 either directly by the Zi or by its inverted version (see the inverter 818). The output of the table is applied to the bit shifter 820, the output signal of which is the signal 808 is multiplied with k-bit shifted Xi and k-bit shifted Yi.
The table 814 associates the values −2n to +2n to respective rad values. For example, in case of having performed 8 iterations in the first stage, the phase value, when using a 18 bit word, has only a length of 10 bit. Using the MSB of Zi the absolute value of Zi is calculated so that the length of the word of the phase is only 9 bit. In the 9 bit table the rad value is translated so that when at the input of the table the value 512 is applied, the table outputs 512/2/π. The table is a current saving version of this division. The value output by the table may be shifted (see shifter 820 which is optional) and it has been found out that the two multiplications by multipliers 806a and 806b can be carried out with less overhead when compared to the additional 8 iterations that would need to be carried out when using the conventional cordic algorithm.
In the following, the functionality of the stage shown in to
xin=45,000 yin=45,000.
The angle φin by which the vector is to be shifted is set to be 60° which is approximately 43691 when considering an 18 bit input resolution. For a 16 bit output resolution 16 iterations are needed. As described above, in the first stage 8 normal iterations using the conventional cordic iteration blocks (
xi=−26656 yi=101352 φi=193≈0.265°
On the basis of the value Zi the remaining angle is calculated in the rad format on the basis of the table:
φi=floor(193·π)=60610=10010111102
The actual calculation to obtain the rad value would be:
However, this result would be smaller than 1 and, therefore, cannot be represented by integers. Also, the remaining angle, prior to the multiplication, is reduced by m=2 digits, to maintain the multiplier as small as possible (see
φi=floor(606·22)=15110=100101112
For the multiplication the values xi and yi are reduced by the number of iterations in the first stage (k=8). This is possible, since the accuracy of the trailing digits for the desired output resolution of 16 bits is not needed. This yields, at the output of the shifters 804a and 804b, the following:
Δxi=floor(xi·2−8)=−10510=11100101112
Δyi=floor(yi·2−8)=39510=01100010112
After the multiplication by multipliers 806a and 806b the result must be shifted, since φi has not been divided by 218−1, i.e., has not yet been shifted by 18−1 digits. When performing this shifting, however, those digits that had already been shifted need to be considered, i.e., the shifting of 2−2 and 2−8, so that the number of digits which need to be shifted is as follows:
b−1−m−k=18−1−2−8=7
The shifters 810a and 810b perform this shifting and following this the adders 802a and 802b provide the final output coordinates X and Y so that turning the input vector by 60° is completed.
In the following, a further example modified using a hyperbolic CORDIC will be discussed. This calculation may be performed by using the cordic iteration block 500 shown in
xn=Kh(x02−y02)1/2
zn=z0+tan h−1y0/x0
From the same further functions may be derived, thus tan h−1 may be transformed into
If you put x0=x+1 and y0=x−1, for zn with z0=0 the following results
Thus, the natural logarithm may be calculated. Using the following relation
also any other logarithmic functions may be calculated. No additional division has to be done, the accumulated table values only have to be weighted.
Regarding its setup, the hyperbolic CORDIC is similar to the circular one, the individual iterations of
Apart from that, in each iteration for the phase always the same values tan h−1(2−1) are added or subtracted, so that a table with the accumulated values may be used.
Like in the circular CORDIC, the x value is converged after half of the necessary iterations and tan h−1y0/x0≈y0/x0, as y0/x0 is very small. This already applies after one third of the iterations. Thus, here the iterative division is used.
In contrast to the circular CORDIC, after the division iterations no conversion into the correct scale has to be executed, as the hyperbolic phase is not converted to the used word length, as same has no periodicity. Thus, the result of the two iterations may be added. This summation is illustrated by
As an example, the natural algorithm and the root of x=45000 is to be calculated, the CORDIC here has an internal word length of 18 bits and an output word length of 16 bits. Due to the small convergence radius (sum of all angles) 216 is interpreted to be 1, but as the actual logarithm is to be calculated, a conversion has to be executed, so that 216 may be interpreted as one.
ln(x)=ln(M·2E)=E·ln(2)+ln(M)
M is a number between 0.5 and 2, with 216 being 1 it is fulfilled with respect to x. E still has to be determined, as the actual logarithm is wanted. This may easily be realized with respect to hardware. For x=45000, E=16. As the output word length is 16 bits, E may also take on only 16 different values, i.e. E·ln(2) may be stored in a small table.
As indicated above, x0=x+1 and y0=x−1 have to be calculated, with 1 being 216 the following applies for the input of the hyperbolic CORDIC x0=110536 y=−20536. After eight iterations, the x value is converged and the result is x8=89949 y8=334. The accumulated tan h−1(2−i)·217 values correspond to φ8=−25125. Then, division iterations follow, and the result of the same is added to φ8 and the following results φ16=−24631.
The logarithm is not yet completed, as mentioned above, still E·ln(2) has to be included. To be able to better utilize the given word length, E·ln(2) and ln(M) are amplified differently, and this has to be noted in the addition. At the output for the logarithm the following is applied φout=87773.
If the amplification of 213 is eliminated, the following results φln=87773·2−13=10.7145.
If the natural logarithm is ideally calculated, the following results ln(45000)=10.7144.
Thus, the approximation using the hyperbolic CORDIC is very accurate. In general, only the iterations may be executed and the sign of y may be memorized and subsequently be read out of a memory, and the result would be the same.
It is noted that
Further, the modified cordic algorithms may also be implemented on the basis of hyperbolic cordics.
Also, it is noted that the adding stage of
Referring to
Although some aspects have been described in the context of an apparatus, it is clear that these aspects also represent a description of the corresponding method, where a block or device corresponds to a method step or a feature of a method step. Analogously, aspects described in the context of a method step also represent a description of a corresponding block or item or feature of a corresponding apparatus. Some or all of the method steps may be executed by (or using) a hardware apparatus, like a microprocessor, a programmable computer or an electronic circuit. Some one or more of the most important method steps may be executed by such an apparatus.
The implementation may be in hardware or in software or may be performed using a digital storage medium, for example a floppy disk, a DVD, a Blu-Ray, a CD, a ROM, a PROM, an EPROM, an EEPROM or a FLASH memory, having electronically readable control signals stored thereon, which cooperate (or are capable of cooperating) with a programmable computer system such that the respective method is performed. A data carrier may be provided which has electronically readable control signals, which are capable of cooperating with a programmable computer system, such that the method described herein is performed.
The implementation may also be in the form of a computer program product with a program code, the program code being operative for performing the method when the computer program product runs on a computer. The program code may be stored on a machine readable carrier. Bellow, an example cordic code is illustrated for the first half of the iterations:
Bellow, the code for the second half of the iterations is shown:
In general, it should be noted that the above explained principle of determining an output value by detecting a combination of intermediate values and accessing a look up table or a storage storing a plurality of output values (each output value associated with a respective combination of the intermediate values detected during a calculation iteration) based on the detected combination, is also transferable to further calculations in which an output volume is iteratively calculated. So, the above described implementations are merely illustrative, and it is understood that modifications and variations of the arrangements and the details described herein will be apparent to others skilled in the art. It is the intent, therefore, to be limited only by the scope of the impending claims and not by the specific details presented by way of description and explanation above.
Number | Name | Date | Kind |
---|---|---|---|
7545878 | Hall et al. | Jun 2009 | B1 |
8572150 | Dick | Oct 2013 | B1 |
20100008214 | Siaud et al. | Jan 2010 | A1 |
20130335853 | Li et al. | Dec 2013 | A1 |
Number | Date | Country |
---|---|---|
1492313 | Apr 2004 | CN |
101667112 | Mar 2010 | CN |
101908123 | Dec 2010 | CN |
Number | Date | Country | |
---|---|---|---|
20140164461 A1 | Jun 2014 | US |