Trigonometry / CORDIC
- class tiliqua.dsp.cordic.RectToPolarCordic(*args, src_loc_at=0, **kwargs)
Iteratively compute magnitude and phase of complex numbers.
This core uses a CORDIC (Coordinate Rotation Digital Computer) approach to convert rectangular to polar complex numbers using only shifts and adds.
This is useful for extracting power spectra from frequency-domain blocks.
Given a complex number in rectangular coordinates, this core emits:
o.payload.magnitude = S*sqrt(i.payload.real**2 + i.payload.imag**2) o.payload.phase = atan2(i.payload.imag, i.payload.real) / pi S: =1 if 'magnitude_correction' is True, and =K (CORDIC gain) otherwise
- Members:
i (
In(stream.Signature(CQ(shape)))) – Stream of incoming complex numbers in rectangular coordinates.o (
Out(stream.Signature(Polar(self.internal_shape)))) – Stream of outgoing complex numbers in polar coordinates.
- K = 1.646760258121
CORDIC gain constant.
- __init__(shape, iterations=None, magnitude_correction=True)
- shapeShape
Shape of fixed-point number to use for incoming
CQstream.- iterationsint
Number of iterations of computation. Higher is better accuracy, but requires more clock cycles. This defaults to the number of bits in the provided
shape.- magnitude_correctionbool
Whether to consume an additional multiplier to correct for the CORDIC gain constant. For some applications, this is not needed and can be used to save a multiplier.