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