diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index 23437891ac8dc05577d823710b3c9c687c2f4025..98085930720f4bbdfe088f1323d2114f72b802ee 100644
--- a/libraries/base/common/src/vhdl/common_pkg.vhd
+++ b/libraries/base/common/src/vhdl/common_pkg.vhd
@@ -471,14 +471,24 @@ 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 
 
+  -- Convert between polar and rectangular coordinates
   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 COMPLEX_PHASE( re, im : REAL;    radians : BOOLEAN) RETURN REAL;  -- phase in radians or degrees
+  FUNCTION COMPLEX_PHASE( re, im : INTEGER; radians : BOOLEAN) RETURN REAL;  -- phase in radians or degrees
+  FUNCTION COMPLEX_PHASE( re, im : REAL)                       RETURN REAL;  -- phase in degrees
+  FUNCTION COMPLEX_PHASE( re, im : INTEGER)                    RETURN REAL;  -- phase in degrees
+
+  FUNCTION COMPLEX_RE(ampl, phase : REAL;    radians : BOOLEAN) RETURN REAL;  -- phase in radians or degrees
+  FUNCTION COMPLEX_RE(ampl, phase : INTEGER; radians : BOOLEAN) RETURN REAL;  -- phase in radians or 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;    radians : BOOLEAN) RETURN REAL;  -- phase in radians or degrees
+  FUNCTION COMPLEX_IM(ampl, phase : INTEGER; radians : BOOLEAN) RETURN REAL;  -- phase in radians or 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
@@ -2263,6 +2273,7 @@ PACKAGE BODY common_pkg IS
   BEGIN
     RETURN (a_im*b_re + a_re*b_im);
   END;
+
   
   FUNCTION COMPLEX_RADIUS(re, im : REAL) RETURN REAL IS
   BEGIN
@@ -2277,36 +2288,79 @@ PACKAGE BODY common_pkg IS
     RETURN COMPLEX_RADIUS(REAL(re), REAL(im));
   END;
 
-  FUNCTION COMPLEX_PHASE(re, im : REAL) RETURN REAL IS  -- in degrees
+  FUNCTION COMPLEX_PHASE(re, im : REAL; radians : BOOLEAN) RETURN REAL IS
   BEGIN
-    RETURN ATAN2(Y => im, X => re) * 360.0 / MATH_2_PI;
+    IF radians = TRUE THEN
+      RETURN ATAN2(Y => im, X => re);
+    ELSE
+      RETURN ATAN2(Y => im, X => re) * 360.0 / MATH_2_PI;
+    END IF;
   END;
 
-  FUNCTION COMPLEX_PHASE(re, im : INTEGER) RETURN REAL IS  -- in degrees
+  FUNCTION COMPLEX_PHASE(re, im : INTEGER; radians : BOOLEAN) RETURN REAL IS
   BEGIN
-    RETURN COMPLEX_PHASE(REAL(re), REAL(im));
+    RETURN COMPLEX_PHASE(REAL(re), REAL(im), radians);
   END;
 
-  FUNCTION COMPLEX_RE(ampl, phase : REAL) RETURN REAL IS  -- phase in degrees
+  FUNCTION COMPLEX_PHASE(re, im : REAL) RETURN REAL IS
   BEGIN
-    RETURN ampl * COS(phase * MATH_2_PI / 360.0);
+    RETURN COMPLEX_PHASE(re, im, FALSE);
   END;
 
-  FUNCTION COMPLEX_RE(ampl, phase : INTEGER) RETURN REAL IS  -- phase in degrees
+  FUNCTION COMPLEX_PHASE(re, im : INTEGER) RETURN REAL IS
   BEGIN
-    RETURN COMPLEX_RE(REAL(ampl), REAL(phase));
+    RETURN COMPLEX_PHASE(REAL(re), REAL(im), FALSE);
   END;
 
-  FUNCTION COMPLEX_IM(ampl, phase : REAL) RETURN REAL IS  -- phase in degrees
+  FUNCTION COMPLEX_RE(ampl, phase : REAL; radians : BOOLEAN) RETURN REAL IS
   BEGIN
-    RETURN ampl * SIN(phase * MATH_2_PI / 360.0);
+    IF radians = TRUE THEN
+      RETURN ampl * COS(phase);
+    ELSE
+      RETURN ampl * COS(phase * MATH_2_PI / 360.0);
+    END IF;
   END;
 
-  FUNCTION COMPLEX_IM(ampl, phase : INTEGER) RETURN REAL IS  -- phase in degrees
+  FUNCTION COMPLEX_RE(ampl, phase : INTEGER; radians : BOOLEAN) RETURN REAL IS
   BEGIN
-    RETURN COMPLEX_IM(REAL(ampl), REAL(phase));
+    RETURN COMPLEX_RE(REAL(ampl), REAL(phase), radians);
   END;
 
+  FUNCTION COMPLEX_RE(ampl, phase : REAL) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_RE(ampl, phase, FALSE);
+  END;
+
+  FUNCTION COMPLEX_RE(ampl, phase : INTEGER) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_RE(REAL(ampl), REAL(phase), FALSE);
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : REAL; radians : BOOLEAN) RETURN REAL IS
+  BEGIN
+    IF radians = TRUE THEN
+      RETURN ampl * SIN(phase);
+    ELSE
+      RETURN ampl * SIN(phase * MATH_2_PI / 360.0);
+    END IF;
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : INTEGER; radians : BOOLEAN) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_IM(REAL(ampl), REAL(phase), radians);
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : REAL) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_IM(ampl, phase, FALSE);
+  END;
+
+  FUNCTION COMPLEX_IM(ampl, phase : INTEGER) RETURN REAL IS
+  BEGIN
+    RETURN COMPLEX_IM(REAL(ampl), REAL(phase), FALSE);
+  END;
+
+
   FUNCTION SHIFT_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR IS
   BEGIN
     IF shift < 0 THEN