Compare commits

...

2 Commits

Author SHA1 Message Date
Patrick Hangl
80012ce7d8 4.3 2026-02-06 13:08:46 +01:00
Patrick Hangl
2c8c9cdf2d update .gitignore 2026-02-06 12:40:10 +01:00
7 changed files with 100 additions and 82 deletions

2
.gitignore vendored
View File

@@ -13,3 +13,5 @@ main.pdf
main.toc
main.run.xml
main.synctex.gz
acronyms.aux
chapter_04.aux

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -155,7 +155,7 @@
\@writefile{lof}{\contentsline {figure}{\numberline {38}{\ignorespaces Flow diagram of the code implementation of the main loop and interrupt handling on the \ac {DSP} core.}}{48}{}\protected@file@percent }
\acronymused{DSP}
\newlabel{fig:fig_dsp_logic.jpg}{{38}{48}{}{}{}}
\@writefile{toc}{\contentsline {paragraph}{Calc()-function}{48}{}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{calculate\_output()-function}{48}{}\protected@file@percent }
\acronymused{DSP}
\acronymused{ANR}
\acronymused{DSP}
@@ -180,9 +180,13 @@
\acronymused{MAC}
\acronymused{ALU}
\acronymused{DSP}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}Performance evaluation and quantization of the DSP implementation}{50}{}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}Performance quantization of the ANR calculation}{50}{}\protected@file@percent }
\acronymused{ANR}
\@writefile{toc}{\contentsline {paragraph}{write\_buffer}{51}{}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{apply\_fir\_filter}{51}{}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}Performance evaluation of different implementation variants}{51}{}\protected@file@percent }
\@setckpt{chapter_04}{
\setcounter{page}{51}
\setcounter{page}{52}
\setcounter{equation}{21}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
@@ -193,7 +197,7 @@
\setcounter{part}{0}
\setcounter{section}{4}
\setcounter{subsection}{3}
\setcounter{subsubsection}{2}
\setcounter{subsubsection}{3}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{40}
@@ -317,7 +321,7 @@
\setcounter{lstnumber}{11}
\setcounter{FancyVerbLine}{0}
\setcounter{linenumber}{1}
\setcounter{LN@truepage}{50}
\setcounter{LN@truepage}{51}
\setcounter{FancyVerbWriteLine}{0}
\setcounter{FancyVerbBufferLine}{0}
\setcounter{FV@TrueTabGroupLevel}{0}

View File

@@ -120,8 +120,8 @@ If the \ac{ARM} core requests a sample to be processed, it activates the \ac{DSP
\caption{Flow diagram of the code implementation of the main loop and interrupt handling on the \ac{DSP} core.}
\label{fig:fig_dsp_logic.jpg}
\end{figure}
\paragraph{Calc()-function}
The calc()-function at the very end of the main process loop represents the heart of the \ac{DSP}code, as it is responsible for applying the \ac{ANR} algorithm on the two input samples. As it follows the same structure as the high-level implementation described in the previous chapter, the general functionality will not be described in detail again. The technical implementation on the \ac{DSP} however will be outlined in detail in the following subchapter, as the hardware-specific optimizations, responsible for a real-time capable implementation, are a key element for the estimation of the expectable power consumption of the system.\\ \\
\paragraph{calculate\_output()-function}
The calculate\_output()-function at the very end of the main process loop represents the heart of the \ac{DSP} code, as it is responsible for applying the \ac{ANR} algorithm on the two input samples. As it follows the same structure as the high-level implementation described in the previous chapter, the general functionality will not be described in detail again. Yet, the technical implementation on the \ac{DSP} however will be outlined in detail in the following subchapter, as the hardware-specific optimizations are key elements for the estimation of the expectable power consumption of the system.\\ \\
\subsection{DSP-level implementation of the ANR algorithm}
The ability to process audio samples in real-time on the \ac{DSP} core is strongly dependent on compiler-specific optimizations and hardware-specific implementation techniques, which allow a far more efficient execution of the algorithm compared to a native C implementation.
@@ -165,8 +165,20 @@ As already mentioned during the beginning of the current chapter, the used \ac{D
To tackle this issues, the \ac{DSP} compiler provides intrinsic functions for fractional fixed-point arithmetic, such as a fractional multiplication function, which takes two 32-bit integers as input and return an already bit-shifted 64-bit output, representing the fractional multiplication result. This approach prevents the need for manual bit-shifting operations after each multiplication.\\ \\
To support such operations, a 72-bit accumulator is provided, allowing to store intermediate 64-bit results of 32-bit multiplications without losing precision - the remaining 8 bit serve as an overflow space. If needed, a saturation function is also provided, to round the 64-bit result back to a 32-bit value.
\subsubsection{Performance evaluation and quantization of the DSP implementation}
\subsubsection{Performance quantization of the ANR calculation}
As mentioned in the previous subchapter, the \ac{ANR} calucation for every sample is executed in the calculate\_output()-function. The general scheme of the calculation was already visualized in \ref{fig:fig_anr_logic} and did not change for the implemenation in C. The main focus lies now on the computational efficiency of the different parts of the function, finally resulting in the generation of a formula, able to calculate the needed cycles in dependecy of various parameters.\\ \\
The calculate\_output() functions consists out of the following four main parts, described in detail afterwards:
\begin{itemize}
\item write\_buffer
\item apply\_fir\_filter
\item update\_output
\item update\_filter\_coefficients
\end{itemize}
Some of the sub-functions feature dsp-specific operations, resulting in a minimum count of processor cycles per input samples, depending on parameters like filter length and adaption pauses.
\paragraph{write\_buffer}
\paragraph{apply\_fir\_filter}
\subsubsection{Performance evaluation of different implementation variants}

View File

@@ -1,159 +1,159 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" version="29.0.3">
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" version="29.3.4">
<diagram name="Page-1" id="biPyHR2u_nhwJtU07GTZ">
<mxGraphModel dx="-280" dy="297" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="576" dy="743" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-17" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-17" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1299.58" y="80" as="sourcePoint" />
<mxPoint x="1300" y="120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-19" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-19" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1299.58" y="160" as="sourcePoint" />
<mxPoint x="1300" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-21" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-21" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1300" y="240" as="sourcePoint" />
<mxPoint x="1300" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-23" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-23" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1299.58" y="310" as="sourcePoint" />
<mxPoint x="1300" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-25" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Accumulator +=&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Noise&lt;sub&gt;[&lt;/sub&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&lt;sub&gt;j+i]&lt;/sub&gt; * Filter&lt;sub&gt;[i]&lt;/sub&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1200" y="350" width="200" height="60" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-25" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Accumulator +=&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Noise&lt;sub&gt;[&lt;/sub&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&lt;sub&gt;j+i]&lt;/sub&gt; * Filter&lt;sub&gt;[i]&lt;/sub&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="200" x="1200" y="350" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-25" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1490" y="350" as="sourcePoint" />
<mxPoint x="1340" y="290" as="targetPoint" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-27" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-25" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="1440" y="380" />
<mxPoint x="1440" y="290" />
</Array>
<mxPoint x="1490" y="350" as="sourcePoint" />
<mxPoint x="1340" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-28" value="i++" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="H6R4VGwbr_i7cj5zOMue-27" vertex="1" connectable="0">
<mxGeometry x="-0.2439" y="3" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-28" connectable="0" parent="H6R4VGwbr_i7cj5zOMue-27" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" value="i++" vertex="1">
<mxGeometry relative="1" x="-0.2439" y="3" as="geometry">
<mxPoint y="3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-30" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="H6R4VGwbr_i7cj5zOMue-25" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-30" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="H6R4VGwbr_i7cj5zOMue-25" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1160" y="379.9999999999999" as="sourcePoint" />
<mxPoint x="1130.42" y="500" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-31" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-25" target="H6R4VGwbr_i7cj5zOMue-32" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-31" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-25" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="H6R4VGwbr_i7cj5zOMue-32" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1410" y="420" as="sourcePoint" />
<mxPoint x="1410.42" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-32" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Output&lt;sub&gt;[j]&lt;/sub&gt; = &lt;br&gt;Input&lt;sub&gt;[j]&lt;/sub&gt; - Accumulator&lt;/font&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1200" y="450" width="200" height="60" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-32" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Output&lt;sub&gt;[j]&lt;/sub&gt; = &lt;br&gt;Input&lt;sub&gt;[j]&lt;/sub&gt; - Accumulator&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="200" x="1200" y="450" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-34" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="JXUbh7mfEI0vDSi9tXp8-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-34" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="JXUbh7mfEI0vDSi9tXp8-2" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1299.8600000000001" y="510" as="sourcePoint" />
<mxPoint x="1299.8600000000001" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-35" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Correction =&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: rgb(32, 33, 34); font-family: sans-serif; text-align: start;&quot;&gt;&lt;i style=&quot;&quot;&gt;&lt;font&gt;µ&lt;/font&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;Output&lt;sub&gt;[j]&lt;/sub&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1200" y="630" width="210" height="60" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-35" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Correction =&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: rgb(32, 33, 34); font-family: sans-serif; text-align: start;&quot;&gt;&lt;i style=&quot;&quot;&gt;&lt;font&gt;µ&lt;/font&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;Output&lt;sub&gt;[j]&lt;/sub&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="210" x="1200" y="630" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-38" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Filter&lt;sub&gt;[k]&lt;/sub&gt; =&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Correction * Noise&lt;sub&gt;[j+k]&lt;/sub&gt;&lt;/font&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1490" y="350" width="170" height="60" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-38" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Filter&lt;sub&gt;[k]&lt;/sub&gt;&amp;nbsp;+=&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;Correction * Noise&lt;sub&gt;[j+k]&lt;/sub&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="170" x="1490" y="350" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-39" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Input&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[d&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, d&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... ,&amp;nbsp;dM-N]&lt;/font&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="1200" y="40" width="200" height="40" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-39" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Input&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[d&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, d&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... ,&amp;nbsp;dM-N]&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="40" width="200" x="1200" y="40" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-41" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;j = 0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1260" y="120" width="80" height="40" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-41" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;j = 0&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="80" x="1260" y="120" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-41" target="H6R4VGwbr_i7cj5zOMue-41" edge="1">
<mxCell id="H6R4VGwbr_i7cj5zOMue-42" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="H6R4VGwbr_i7cj5zOMue-41">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-43" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;i = 0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1265" y="270" width="80" height="40" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-43" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;i = 0&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="80" x="1265" y="270" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-44" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Filter&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[w&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, w&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , w&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="1200" y="200" width="200" height="40" as="geometry" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-44" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Filter&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[w&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, w&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , w&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="40" width="200" x="1200" y="200" as="geometry" />
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-45" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-35" target="H6R4VGwbr_i7cj5zOMue-41" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1440" y="610" as="sourcePoint" />
<mxPoint x="1475" y="340" as="targetPoint" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-45" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-35" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="H6R4VGwbr_i7cj5zOMue-41" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="1305" y="720" />
<mxPoint x="950" y="720" />
<mxPoint x="950" y="140" />
</Array>
<mxPoint x="1440" y="610" as="sourcePoint" />
<mxPoint x="1475" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-46" value="j++" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="H6R4VGwbr_i7cj5zOMue-45" vertex="1" connectable="0">
<mxGeometry x="0.2417" y="1" relative="1" as="geometry">
<mxCell id="H6R4VGwbr_i7cj5zOMue-46" connectable="0" parent="H6R4VGwbr_i7cj5zOMue-45" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" value="j++" vertex="1">
<mxGeometry relative="1" x="0.2417" y="1" as="geometry">
<mxPoint y="67" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="H6R4VGwbr_i7cj5zOMue-48" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-38" target="H6R4VGwbr_i7cj5zOMue-44" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1290" y="390" as="sourcePoint" />
<mxPoint x="1340" y="340" as="targetPoint" />
<mxCell id="H6R4VGwbr_i7cj5zOMue-48" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-38" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="H6R4VGwbr_i7cj5zOMue-44" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="1575" y="220" />
</Array>
<mxPoint x="1290" y="390" as="sourcePoint" />
<mxPoint x="1340" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-1" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;k = 0&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="1535" y="460" width="80" height="40" as="geometry" />
<mxCell id="n1TZPSIdfv_mN465yjPh-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;k = 0&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="80" x="1535" y="460" as="geometry" />
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-35" target="n1TZPSIdfv_mN465yjPh-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1450" y="580" as="sourcePoint" />
<mxPoint x="1460" y="530" as="targetPoint" />
<mxCell id="n1TZPSIdfv_mN465yjPh-2" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-35" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="n1TZPSIdfv_mN465yjPh-1" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="1575" y="660" />
</Array>
<mxPoint x="1450" y="580" as="sourcePoint" />
<mxPoint x="1460" y="530" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-3" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Noise&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[x&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, x&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , x&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="970" y="360" width="190" height="40" as="geometry" />
<mxCell id="n1TZPSIdfv_mN465yjPh-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Noise&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[x&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, x&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , x&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="40" width="190" x="970" y="360" as="geometry" />
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-4" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="n1TZPSIdfv_mN465yjPh-1" target="H6R4VGwbr_i7cj5zOMue-38" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="n1TZPSIdfv_mN465yjPh-4" edge="1" parent="1" source="n1TZPSIdfv_mN465yjPh-1" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="H6R4VGwbr_i7cj5zOMue-38" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1580" y="470" as="sourcePoint" />
<mxPoint x="1630" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="H6R4VGwbr_i7cj5zOMue-38" target="n1TZPSIdfv_mN465yjPh-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1460" y="380" as="sourcePoint" />
<mxPoint x="1510" y="330" as="targetPoint" />
<mxCell id="n1TZPSIdfv_mN465yjPh-5" edge="1" parent="1" source="H6R4VGwbr_i7cj5zOMue-38" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="n1TZPSIdfv_mN465yjPh-1" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="1460" y="380" />
<mxPoint x="1460" y="480" />
</Array>
<mxPoint x="1460" y="380" as="sourcePoint" />
<mxPoint x="1510" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="n1TZPSIdfv_mN465yjPh-6" value="k++" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="n1TZPSIdfv_mN465yjPh-5" vertex="1" connectable="0">
<mxGeometry x="-0.2231" y="1" relative="1" as="geometry">
<mxCell id="n1TZPSIdfv_mN465yjPh-6" connectable="0" parent="n1TZPSIdfv_mN465yjPh-5" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" value="k++" vertex="1">
<mxGeometry relative="1" x="-0.2231" y="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="JXUbh7mfEI0vDSi9tXp8-2" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Output&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[o&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, o&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , o&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="1200" y="550" width="200" height="40" as="geometry" />
<mxCell id="JXUbh7mfEI0vDSi9tXp8-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="&lt;font&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b style=&quot;&quot;&gt;Output&lt;/b&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;font style=&quot;&quot;&gt;[o&lt;sub style=&quot;&quot;&gt;1&lt;/sub&gt;, o&lt;/font&gt;&lt;sub style=&quot;&quot;&gt;2&lt;/sub&gt;, ... , o&lt;sub&gt;M-N&lt;/sub&gt;]&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="40" width="200" x="1200" y="550" as="geometry" />
</mxCell>
<mxCell id="JXUbh7mfEI0vDSi9tXp8-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxCell id="JXUbh7mfEI0vDSi9tXp8-4" edge="1" parent="1" style="endArrow=classic;html=1;rounded=0;exitX=0.462;exitY=1.333;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="1304.58" y="590" as="sourcePoint" />
<mxPoint x="1305" y="630" as="targetPoint" />
</mxGeometry>

View File

@@ -1,6 +1,6 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" version="29.3.1">
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" version="29.3.4">
<diagram name="Page-1" id="biPyHR2u_nhwJtU07GTZ">
<mxGraphModel dx="-171" dy="354" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="576" dy="743" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -184,7 +184,7 @@
<mxPoint x="1320" y="860" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yYsWn2o99izGpPgvcdo1-44" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="&lt;div&gt;&lt;span style=&quot;font-size: 14px; background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&lt;b&gt;Calculate next Sample&lt;br&gt;&lt;/b&gt;calc()&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxCell id="yYsWn2o99izGpPgvcdo1-44" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="&lt;div&gt;&lt;span style=&quot;font-size: 14px; background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;&lt;b&gt;Calculate next Sample&lt;br&gt;&lt;/b&gt;calculate_output()&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="40" width="200" x="1200" y="850" as="geometry" />
</mxCell>
<mxCell id="yYsWn2o99izGpPgvcdo1-45" edge="1" parent="1" source="yYsWn2o99izGpPgvcdo1-44" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.344;entryY=1.013;entryDx=0;entryDy=0;entryPerimeter=0;" target="yYsWn2o99izGpPgvcdo1-33" value="&lt;font style=&quot;font-size: 13px;&quot;&gt;Write Sample&lt;/font&gt;">