diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index 13d8042484abd05f906b0b30d243174e12139cb2..23437891ac8dc05577d823710b3c9c687c2f4025 100644
--- a/libraries/base/common/src/vhdl/common_pkg.vhd
+++ b/libraries/base/common/src/vhdl/common_pkg.vhd
@@ -470,7 +470,16 @@ PACKAGE common_pkg IS
 
   FUNCTION COMPLEX_MULT_REAL(a_re, a_im, b_re, b_im : INTEGER) RETURN INTEGER;  -- Calculate real part of complex multiplication: a_re*b_re - a_im*b_im 
   FUNCTION COMPLEX_MULT_IMAG(a_re, a_im, b_re, b_im : INTEGER) RETURN INTEGER;  -- Calculate imag part of complex multiplication: a_im*b_re + a_re*b_im 
-  
+
+  FUNCTION COMPLEX_RADIUS(re, im : REAL)     RETURN REAL;
+  FUNCTION COMPLEX_RADIUS(re, im : INTEGER)  RETURN REAL;
+  FUNCTION COMPLEX_PHASE( re, im : REAL)     RETURN REAL;  -- in degrees
+  FUNCTION COMPLEX_PHASE( re, im : INTEGER)  RETURN REAL;  -- in degrees
+  FUNCTION COMPLEX_RE(ampl, phase : REAL)    RETURN REAL;  -- phase in degrees
+  FUNCTION COMPLEX_RE(ampl, phase : INTEGER) RETURN REAL;  -- phase in degrees
+  FUNCTION COMPLEX_IM(ampl, phase : REAL)    RETURN REAL;  -- phase in degrees
+  FUNCTION COMPLEX_IM(ampl, phase : INTEGER) RETURN REAL;  -- phase in degrees
+
   FUNCTION SHIFT_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR;  -- < 0 shift left, > 0 shift right
   FUNCTION SHIFT_SVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR;  -- < 0 shift left, > 0 shift right
 
@@ -2255,6 +2264,49 @@ PACKAGE BODY common_pkg IS
     RETURN (a_im*b_re + a_re*b_im);
   END;
   
+  FUNCTION COMPLEX_RADIUS(re, im : REAL) RETURN REAL IS
+  BEGIN
+    -- Must use ABS() with ** of real, because (negative)**2.0 yields error and value 0.0.
+    -- Must must use brackets (ABS()) to avoid compile error.
+    -- Alternative equivalent code would be: SQRT(re * re + im * im).
+    RETURN SQRT((ABS(re))**2.0 + (ABS(im))**2.0);
+  END;
+
+  FUNCTION COMPLEX_RADIUS(re, im : INTEGER) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_RADIUS(REAL(re), REAL(im));
+  END;
+
+  FUNCTION COMPLEX_PHASE(re, im : REAL) RETURN REAL IS  -- in degrees
+  BEGIN
+    RETURN ATAN2(Y => im, X => re) * 360.0 / MATH_2_PI;
+  END;
+
+  FUNCTION COMPLEX_PHASE(re, im : INTEGER) RETURN REAL IS  -- in degrees
+  BEGIN
+    RETURN COMPLEX_PHASE(REAL(re), REAL(im));
+  END;
+
+  FUNCTION COMPLEX_RE(ampl, phase : REAL) RETURN REAL IS  -- phase in degrees
+  BEGIN
+    RETURN ampl * COS(phase * MATH_2_PI / 360.0);
+  END;
+
+  FUNCTION COMPLEX_RE(ampl, phase : INTEGER) RETURN REAL IS  -- phase in degrees
+  BEGIN
+    RETURN COMPLEX_RE(REAL(ampl), REAL(phase));
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : REAL) RETURN REAL IS  -- phase in degrees
+  BEGIN
+    RETURN ampl * SIN(phase * MATH_2_PI / 360.0);
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : INTEGER) RETURN REAL IS  -- phase in degrees
+  BEGIN
+    RETURN COMPLEX_IM(REAL(ampl), REAL(phase));
+  END;
+
   FUNCTION SHIFT_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR IS
   BEGIN
     IF shift < 0 THEN