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