PolarToCart
Converts polar coordinates to rectangular coordinates.
The formulas are as follows:


The function interface declaration is as follows:
- Operations on integers:
HmppResult HMPPS_CartToPolar_16sc_S(const Hmpp16sc *src, int16_t *dstMagn, int16_t *dstPhase, int32_t len, double magnScale, double phaseScale);
- Operations on floating point numbers:
HmppResult HMPPS_CartToPolar_32f(const float *srcRe, const float *srcIm, float *dstMagn, float *dstPhase, int32_t len);
HmppResult HMPPS_CartToPolar_64f(const double *srcRe, const double *srcIm, double *dstMagn, double *dstPhase, int32_t len);
HmppResult HMPPS_CartToPolar_32fc(const Hmpp32fc *src, float *dstMagn, float *dstPhase, int32_t len);
HmppResult HMPPS_CartToPolar_64fc(const Hmpp64fc *src, double *dstMagn, double *dstPhase, int32_t len);
Parameters
Parameter |
Description |
Value Range |
Input/Output |
|---|---|---|---|
srcMagn |
Pointer to the source vector which stores the radial distances of the vector elements |
The value cannot be NULL. |
Input |
srcPhase |
Pointer to the source vector which stores the polar angles of the vector elements |
The value cannot be NULL. |
Input |
len |
Vector length |
(0, INT_MAX] |
Input |
dst |
Pointer to the destination vector which stores the complex numbers |
The value cannot be NULL. |
Output |
dstRe |
Pointer to the source vector which stores the real parts of the complex numbers |
The value cannot be NULL. |
Output |
dstIm |
Pointer to the source vector which stores the imaginary parts of the complex numbers |
The value cannot be NULL. |
Output |
magnScale |
Scale factor of the radial distance |
scale = 2n, where n is an integer. The value is within (0, INF). |
Input |
phaseScale |
Scale factor of the polar angle |
scale = 2n, where n is an integer. The value is within (0, INF). |
Input |
Return Value
- Success: HMPP_STS_NO_ERR
- Failure: An error code is returned.
Error Codes
Error Code |
Description |
|---|---|
HMPP_STS_NULL_PTR_ERR |
Any of the specified pointers is NULL. |
HMPP_STS_SIZE_ERR |
The value of len is less than or equal to 0. |
HMPP_STS_SCALE_ERR |
The value of magnScale or phaseScale is not within the range (0, INF) or is NaN. |
HMPP_STS_MALLOC_FAILED |
The Init function failed to allocate the memory required by the algorithm model. |
Example
#define SRC_LEN 8
void PolarToCartExample(void)
{
int32_t len = SRC_LEN;
float srcMagn[SRC_LEN] = { 4.94, -2.39, -6.89, 54602.84, 8.17, 9.61, -7.003, 8.9 };
float srcPhase[SRC_LEN] = { 4.0, 2.67, -1.02, -1.23, -6.84, -5.73, 3.89, 9.54 };
float dstRe[SRC_LEN] = { 0.0f };
float dstIm[SRC_LEN] = { 0.0f };
HmppResult result = HMPPS_PolarToCart_32f(srcMagn, srcPhase, dstRe, dstIm, len);
printf("HMPPS_PolarToCart_32f result = %d\n", result);
if (result != HMPP_STS_NO_ERR) {
return;
}
int32_t i;
printf("len = %d\ndstRe =", len);
for(i = 0; i < len; ++i){
printf(" %f", dstRe[i]);
}
printf("\ndstIm =");
for(i = 0; i < len; ++i){
printf(" %f", dstIm[i]);
}
printf("\n");
}
Output:
HMPPS_PolarToCart_32f result = 0 len = 8 dstRe = -3.228999 2.129122 -3.605992 18250.328125 6.935862 8.176719 5.131613 -8.840986 dstIm = -3.738604 -1.085790 5.871024 -51462.562500 -4.317721 5.049095 4.765349 -1.023208