Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/deepc/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from .math import linear_chirp
from .lti import DiscreteLTI, RandomNoiseDiscreteLTI
from .deepc import deePC
from .controller import Controller

__all__ = ["linear_chirp", "DiscreteLTI", "RandomNoiseDiscreteLTI", "deePC", "Controller"]
__all__ = ["DiscreteLTI", "RandomNoiseDiscreteLTI", "deePC", "Controller"]
18 changes: 0 additions & 18 deletions src/deepc/math.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,21 +54,3 @@ def projected_gradient_method(
return x_new
x_old = x_new
return x_old


def linear_chirp(f0: float, f1: float, samples: int, phi: float = 0) -> list[float]:
"""
Generate a linear chirp signal.
Args:
f0: Start frequency in Hz.
f1: End frequency in Hz.
samples: Number of samples.
phi: Phase offset in radians.
"""
return [
math.sin(
phi
+ 2 * math.pi * (f0 * (i / (samples - 1)) + 0.5 * (f1 - f0) * (i / (samples - 1)) ** 2)
)
for i in range(samples)
]
13 changes: 0 additions & 13 deletions src/deepcpp/algorithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,3 @@ VectorXd projected_gradient_method(
}
return x_old;
}

std::vector<double> linear_chirp(double f0, double f1, int samples, int phi)
{
double Pi = 3.14159265358979323846;
std::vector<double> res;
res.reserve(samples);
for (int i = 0; i < samples; ++i)
{
double t = i / (samples - 1.0);
res.push_back(std::sin(phi + 2 * Pi * (f0 * t + 0.5 * (f1 - f0) * t * t)));
}
return res;
}
3 changes: 0 additions & 3 deletions src/deepcpp/algorithm.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,3 @@ VectorXd projected_gradient_method(
std::function<VectorXd(const VectorXd&)> projection,
int max_iterations = 300,
double tolerance = 1e-6);


std::vector<double> linear_chirp(double f0, double f1, int samples, int phi = 0);
9 changes: 3 additions & 6 deletions tests/deepc/helpers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from deepc import DiscreteLTI, linear_chirp
import numpy as np
from deepc import DiscreteLTI


def create_1D_in_1D_out_LTI() -> DiscreteLTI:
Expand Down Expand Up @@ -36,10 +37,6 @@ def create_2D_in_3D_out_LTI() -> DiscreteLTI:


def gather_offline_data(system: DiscreteLTI, samples: int) -> tuple:
if system.input_dim == 1:
u_d = linear_chirp(0, samples / 2, samples)
else:
chirps = [linear_chirp(0, samples / 2, samples, 0.1 * i) for i in range(system.input_dim)]
u_d = list(zip(*chirps)) # Transpose the list of chirp signals
u_d = np.random.uniform(-1, 1, (samples, system.input_dim))
y_d = system.apply_multiple(u_d)
return u_d, y_d
21 changes: 1 addition & 20 deletions tests/deepc/test_math.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import unittest
import numpy as np
from deepc.math import linear_chirp, left_pseudoinverse, right_pseudoinverse, hankel_matrix
from deepc.math import left_pseudoinverse, right_pseudoinverse, hankel_matrix


class TestLeftPseudoinverse(unittest.TestCase):
Expand Down Expand Up @@ -77,24 +77,5 @@ def test_size_3_and_3_rows(self):
np.testing.assert_array_equal(hankel_matrix(3, [(1, 2), (3, 4), (5, 6)]), [[1], [2], [3], [4], [5], [6]])


class TestLinearChirp(unittest.TestCase):
def test_len(self):
chirp = linear_chirp(0, 100, 1000)
self.assertEqual(len(chirp), 1000)

def test_start(self):
chirp = linear_chirp(0, 100, 1000)
self.assertAlmostEqual(chirp[0], 0)

def test_end(self):
chirp = linear_chirp(0, 100, 1000)
self.assertAlmostEqual(chirp[-1], 0)

def test_symmetry(self):
chirp1 = linear_chirp(0, 100, 1_000)
chirp2 = [-x for x in reversed(linear_chirp(100, 0, 1_000))]
np.testing.assert_allclose(chirp1, chirp2, atol=1e-12)


if __name__ == "__main__":
unittest.main()
26 changes: 0 additions & 26 deletions tests/deepcpp/test_algorithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,29 +182,3 @@ TEST(Algorithm, ProjectedGradientMethod)

EXPECT_EQ(res, Vector(0, 0));
}

TEST(LinearChirp, Size)
{
auto chirp = linear_chirp(0, 100, 1'000);
EXPECT_EQ(chirp.size(), 1'000);
}

TEST(LinearChirp, Start)
{
auto chirp = linear_chirp(0, 100, 1'000);
EXPECT_NEAR(chirp[0], 0, 1e-12);
}

TEST(LinearChirp, End)
{
auto chirp = linear_chirp(0, 100, 1'000);
EXPECT_NEAR(chirp[999], 0, 1e-12);
}

TEST(LinearChirp, Symmetry)
{
auto chirp1 = linear_chirp(0, 100, 1'000);
auto chirp2 = linear_chirp(100, 0, 1'000);
for (int i = 0; i < 1'000; ++i)
EXPECT_NEAR(chirp1[i], -chirp2[999 - i], 1e-12);
}
10 changes: 3 additions & 7 deletions tests/deepcpp/test_deepc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,9 @@ DiscreteLTI lti_2D_input_3D_output()
std::tuple<std::vector<VectorXd>, std::vector<VectorXd>> gather_offline_data(DiscreteLTI &system)
{
const int samples = 1'000;
std::vector<VectorXd> u_d(samples, VectorXd::Zero(system.input_dim()));
for (int i = 0; i < system.input_dim(); ++i)
{
std::vector<double> chirp = linear_chirp(0, samples / 2, samples, 0.1 * i);
for (int j = 0; j < samples; ++j)
u_d[j](i) = chirp[j];
}
std::vector<VectorXd> u_d;
for (int i = 0; i < samples; ++i)
u_d.push_back(VectorXd::Random(system.input_dim()));
std::vector<VectorXd> y_d = system.apply_multiple(u_d);
return {u_d, y_d};
}
Expand Down