From 327448977cd0a0e5a602ad953699c64caf11073b Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sun, 15 Mar 2015 16:48:24 +0100 Subject: [PATCH] wavesynth/compute_samples: use set_coefficients --- artiq/wavesynth/compute_samples.py | 42 +++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/artiq/wavesynth/compute_samples.py b/artiq/wavesynth/compute_samples.py index 63b5b0d0e..834740379 100644 --- a/artiq/wavesynth/compute_samples.py +++ b/artiq/wavesynth/compute_samples.py @@ -5,8 +5,8 @@ import cairoplot class Spline: - def __init__(self, c): - self.set_coefficients(c) + def __init__(self): + self.c = [0.0] def set_coefficients(self, c): self.c = copy(c) @@ -19,17 +19,17 @@ class Spline: class SplinePhase: - def __init__(self, c): + def __init__(self): self.c = [0.0] - self.set_coefficients(c) - - def clear(self): - self.c[0] = 0.0 + self.c0 = 0.0 def set_coefficients(self, c): self.c = self.c[0:1] + c[1:] self.c0 = self.c[0] + def clear(self): + self.c[0] = 0.0 + def next(self): r = self.c[0] + self.c0 for i in range(len(self.c)-1): @@ -38,32 +38,38 @@ class SplinePhase: class DDS: - def __init__(self, c_amplitude, c_phase): - self.amplitude = Spline(c_amplitude) - self.phase = SplinePhase(c_phase) + def __init__(self): + self.amplitude = Spline() + self.phase = SplinePhase() def next(self): return self.amplitude.next()*cos(2*pi*self.phase.next()) class Wave: - def __init__(self, c_bias, c_dds_amplitude, c_dds_phase): - self.bias = Spline(c_bias) - self.dds = DDS(c_dds_amplitude, c_dds_phase) + def __init__(self): + self.bias = Spline() + self.dds = DDS() def next(self): return self.bias.next() + self.dds.next() if __name__ == "__main__": - w = Wave([0.0, 0.0, 0.0], [0.0, 0.0, 0.01], [0.0, 0.0, 0.0005]) x = list(range(400)) + w = Wave() + + w.dds.amplitude.set_coefficients([0.0, 0.0, 0.01]) + w.dds.phase.set_coefficients([0.0, 0.0, 0.0005]) y = [w.next() for i in range(100)] - w.dds.amplitude.c[2] = -0.01 + + w.dds.amplitude.set_coefficients([49.5, 1.0, -0.01]) y += [w.next() for i in range(100)] - w.dds.amplitude.c[2] = -0.01 - w.dds.phase.c[2] = -0.0005 + + w.dds.phase.set_coefficients([0.0, 0.1, -0.0005]) y += [w.next() for i in range(100)] - w.dds.amplitude.c[2] = 0.01 + + w.dds.amplitude.set_coefficients([50.5, -1.0, 0.01]) y += [w.next() for i in range(100)] + cairoplot.scatter_plot("plot.png", [x, y])