From 41115f3329261bc9487b2e3c120e3f8aa89bdae4 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson <oscar.gustafsson@gmail.com> Date: Wed, 5 Apr 2023 19:33:25 +0200 Subject: [PATCH] Add simulation-based test for FIR generators --- test/test_sfg_generators.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/test/test_sfg_generators.py b/test/test_sfg_generators.py index 65c1412b..8e679b8b 100644 --- a/test/test_sfg_generators.py +++ b/test/test_sfg_generators.py @@ -1,3 +1,5 @@ +import numpy as np + from b_asic.core_operations import ( Addition, ConstantMultiplication, @@ -8,6 +10,8 @@ from b_asic.sfg_generators import ( transposed_direct_form_fir, wdf_allpass, ) +from b_asic.signal_generator import Impulse +from b_asic.simulation import Simulation from b_asic.special_operations import Delay @@ -38,7 +42,8 @@ def test_wdf_allpass(): def test_direct_form_fir(): - sfg = direct_form_fir([0.3, 0.5, 0.7]) + impulse_response = [0.3, 0.5, 0.7] + sfg = direct_form_fir(impulse_response) assert ( len( [ @@ -52,6 +57,12 @@ def test_direct_form_fir(): assert len([comp for comp in sfg.components if isinstance(comp, Addition)]) == 2 assert len([comp for comp in sfg.components if isinstance(comp, Delay)]) == 2 + sim = Simulation(sfg, [Impulse()]) + sim.run_for(4) + impulse_response.append(0.0) + assert np.allclose(sim.results['0'], impulse_response) + + impulse_response = [0.3, 0.4, 0.5, 0.6, 0.3] sfg = direct_form_fir( (0.3, 0.4, 0.5, 0.6, 0.3), mult_properties={'latency': 2, 'execution_time': 1}, @@ -59,9 +70,15 @@ def test_direct_form_fir(): ) assert sfg.critical_path_time() == 6 + sim = Simulation(sfg, [Impulse()]) + sim.run_for(6) + impulse_response.append(0.0) + assert np.allclose(sim.results['0'], impulse_response) + def test_transposed_direct_form_fir(): - sfg = transposed_direct_form_fir([0.3, 0.5, 0.7]) + impulse_response = [0.3, 0.5, 0.7] + sfg = transposed_direct_form_fir(impulse_response) assert ( len( [ @@ -75,9 +92,20 @@ def test_transposed_direct_form_fir(): assert len([comp for comp in sfg.components if isinstance(comp, Addition)]) == 2 assert len([comp for comp in sfg.components if isinstance(comp, Delay)]) == 2 + sim = Simulation(sfg, [Impulse()]) + sim.run_for(4) + impulse_response.append(0.0) + assert np.allclose(sim.results['0'], impulse_response) + + impulse_response = [0.3, 0.4, 0.5, 0.6, 0.3] sfg = transposed_direct_form_fir( (0.3, 0.4, 0.5, 0.6, 0.3), mult_properties={'latency': 2, 'execution_time': 1}, add_properties={'latency': 1, 'execution_time': 1}, ) assert sfg.critical_path_time() == 3 + + sim = Simulation(sfg, [Impulse()]) + sim.run_for(6) + impulse_response.append(0.0) + assert np.allclose(sim.results['0'], impulse_response) -- GitLab