diff --git a/src/data/Signalpath.py b/src/data/Signalpath.py index aeab33b..320ab58 100644 --- a/src/data/Signalpath.py +++ b/src/data/Signalpath.py @@ -1,9 +1,37 @@ import numpy as N + class Signalpath: def phase(self, degrees): - tmp = self.y[0] + 1j*self.y[1] - tmp *= N.exp(1j*degrees*N.pi/180) - self.y[0] = tmp.real - self.y[1] = tmp.imag - del tmp + """ + rotate signal by **degrees** for phase cycling, etc. + + :param degrees: rotate signal by this value + :return: + """ + if self.get_number_of_channels() != 2: + raise Exception("rotation defined only for 2 channels") + # simple case 0, 90, 180, 270 degree + reduced_angle = divmod(degrees, 90) + if abs(reduced_angle[1]) < 1e-6: + reduced_angle = reduced_angle[0] % 4 + if reduced_angle == 0: + return + + elif reduced_angle == 1: + self.y[1] *= -1 + self.y = [self.y[1], self.y[0]] + + elif reduced_angle == 2: + self.y[0] *= -1 + self.y[1] *= -1 + + elif reduced_angle == 3: + self.y[0] *= -1 + self.y = [self.y[1], self.y[0]] + else: + sin_angle = N.sin(degrees / 180.0 * N.pi) + cos_angle = N.cos(degrees / 180.0 * N.pi) + self.y = [cos_angle * self.y[0] - sin_angle * self.y[1], + sin_angle * self.y[0] + cos_angle * self.y[1]] + return self