IQmath
Using the operator overloading features of C++, we can overload the multiplication operand "*"
such that when a particular data type is encountered, it will automatically implement the scaled
multiply operation. Lets define a data type called "iq" and assign the linear variables to this data
type:
iq Y, M, X, B // numbers are all Q24
The overloading of the multiply operand in C++ can be defined as follows:
iq operator * (const iq &M, const iq &X) { return ((int64) M * (int64) X) >> 24; }
Then the linear equation, in C++, becomes:
Y = M * X + B;
This final equation looks identical to the floating-point representation. It looks "natural". The
four approaches are summarized in the table below:
Math Implementations
Linear Equation Code
32-bit floating-point math in C
Y = M * X + B;
32-bit fixed-point "Q" math in C
Y = ((int64) M * (int64) X) + (int64) B << 24) >> 24;
32-bit IQmath in C
Y = _IQ24mpy(M, X) + B;
32-bit IQmath in C++
Y = M * X + B;
Essentially, the mathematical approach of scaling the multiplier operand enables a cleaner and a
more "natural" approach to coding fixed-point problems. For want of a better term, we call this
approach "IQmath" or can also be described as "virtual floating-point".
8 - 20
C28x - Numerical Concepts & IQmath
Summary of Contents for C28 Series
Page 64: ...Summary 3 16 C28x Peripheral Registers Header Files ...
Page 78: ...Interrupt Sources 4 14 C28x Reset and Interrupts ...
Page 218: ...Lab 9 DSP BIOS 9 22 C28x Using DSP BIOS ...
Page 244: ...Lab 10 Programming the Flash 10 26 C28x System Design ...
Page 273: ...Appendix A eZdsp F2812 C28x Appendix A eZdsp F2812 A 1 ...
Page 276: ...Appendix P2 Expansion Interface A 4 C28x Appendix A eZdsp F2812 ...
Page 277: ...Appendix P4 P8 P7 I O Interface C28x Appendix A eZdsp F2812 A 5 ...
Page 278: ...Appendix A 6 C28x Appendix A eZdsp F2812 ...
Page 279: ...Appendix P5 P9 Analog Interface C28x Appendix A eZdsp F2812 A 7 ...
Page 282: ...Appendix A 10 C28x Appendix A eZdsp F2812 TP1 TP2 Test Points ...