From e8faeb947d0e1fd4ab471a3c7aec9e9f34a463ef Mon Sep 17 00:00:00 2001 From: Simon Bjurek <simbj106@student.liu.se> Date: Mon, 27 Jan 2025 16:57:23 +0100 Subject: [PATCH] work in progress, seems like feed-forward part of direct-form I is working --- b_asic/sfg_generators.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/b_asic/sfg_generators.py b/b_asic/sfg_generators.py index df1bf401..96fcdfdc 100644 --- a/b_asic/sfg_generators.py +++ b/b_asic/sfg_generators.py @@ -275,6 +275,7 @@ def direct_form_I_iir( input_op = Input() output = Output() + # construct the feed-forward part muls = [ConstantMultiplication(b[0], input_op, **mult_properties)] delays = [] prev_delay = input_op @@ -284,10 +285,27 @@ def direct_form_I_iir( if i < len(b) - 1: muls.append(ConstantMultiplication(coeff, prev_delay, **mult_properties)) - # mul_pairs = [(muls[i], muls[i+1]) for i in range(len(muls)-1)] - for i in range(len(muls)): - Addition(muls[i], delays[i], **add_properties) + op_a = muls[-1] + for i in range(len(muls) - 1): + op_a = Addition(op_a, muls[-i - 2], **add_properties) + # construct the feedback part + tmp_add = Addition(op_a, None, **add_properties) + muls = [ConstantMultiplication(a[0], tmp_add, **mult_properties)] output <<= muls[0] + delays = [] + prev_delay = muls[0] + for i, coeff in enumerate(a[1:]): + prev_delay = Delay(prev_delay) + delays.append(prev_delay) + if i < len(a) - 1: + muls.append(ConstantMultiplication(coeff, prev_delay, **mult_properties)) + + op_a = muls[-1] + for i in range(len(muls) - 1): + op_a = Addition(op_a, muls[-i - 2], **add_properties) + + tmp_add.input(1).connect(op_a) + return SFG([input_op], [output], name=Name(name)) -- GitLab