From 1cab407f88e72fc7d1b40adf509d9fac909c0e5e Mon Sep 17 00:00:00 2001
From: Oscar Gustafsson <oscar.gustafsson@gmail.com>
Date: Fri, 1 Jul 2022 16:01:50 +0200
Subject: [PATCH] Add third-order BLWDF example

---
 examples/thirdorderblwdf.py | 38 +++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 examples/thirdorderblwdf.py

diff --git a/examples/thirdorderblwdf.py b/examples/thirdorderblwdf.py
new file mode 100644
index 00000000..e3bd53cf
--- /dev/null
+++ b/examples/thirdorderblwdf.py
@@ -0,0 +1,38 @@
+"""
+Small bireciprocal lattice wave digital filter.
+"""
+from b_asic.core_operations import Addition, SymmetricTwoportAdaptor
+from b_asic.special_operations import Delay, Input, Output
+from b_asic.signal_flow_graph import SFG
+from b_asic.simulation import Simulation
+from b_asic.schedule import Schedule
+
+in0 = Input("x")
+D0 = Delay(in0)
+D1 = Delay()
+D2 = Delay(D1)
+s = SymmetricTwoportAdaptor(-0.375, in0, D2)
+D1 << s.output(1)
+a = s.output(0) + D0
+out0 = Output(a, "y")
+
+sfg = SFG(inputs=[in0], outputs=[out0],
+          name="Third-order BLWDF")
+
+# Set latencies and exection times
+sfg.set_latency_of_type(SymmetricTwoportAdaptor.type_name(), 4)
+sfg.set_latency_of_type(Addition.type_name(), 1)
+sfg.set_execution_time_of_type(SymmetricTwoportAdaptor.type_name(), 1)
+sfg.set_execution_time_of_type(Addition.type_name(), 1)
+
+sim = Simulation(sfg, [lambda n: 0 if n else 1])
+sim.run_for(1000)
+
+import scipy.signal
+w, h = scipy.signal.freqz(sim.results['0'])
+
+import numpy as np
+import matplotlib.pyplot as plt
+plt.plot(w, 20*np.log10(np.abs(h)/2))
+
+schedule = Schedule(sfg, cyclic=False)
-- 
GitLab