4.3.3
This commit is contained in:
BIN
Bilder/fig_dsp_coefficient_cycle.jpg
Normal file
BIN
Bilder/fig_dsp_coefficient_cycle.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
BIN
Bilder/fig_dsp_fir_cycle.jpg
Normal file
BIN
Bilder/fig_dsp_fir_cycle.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
@@ -182,12 +182,39 @@
|
|||||||
\acronymused{DSP}
|
\acronymused{DSP}
|
||||||
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}Performance quantization of the ANR calculation}{50}{}\protected@file@percent }
|
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}Performance quantization of the ANR calculation}{50}{}\protected@file@percent }
|
||||||
\acronymused{ANR}
|
\acronymused{ANR}
|
||||||
|
\acronymused{DSP}
|
||||||
|
\acronymused{FIR}
|
||||||
|
\acronymused{FIR}
|
||||||
|
\acronymused{DSP}
|
||||||
\@writefile{toc}{\contentsline {paragraph}{write\_buffer}{51}{}\protected@file@percent }
|
\@writefile{toc}{\contentsline {paragraph}{write\_buffer}{51}{}\protected@file@percent }
|
||||||
|
\acronymused{DSP}
|
||||||
\@writefile{toc}{\contentsline {paragraph}{apply\_fir\_filter}{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 }
|
\acronymused{FIR}
|
||||||
|
\acronymused{MAC}
|
||||||
|
\acronymused{DSP}
|
||||||
|
\acronymused{DSP}
|
||||||
|
\@writefile{lof}{\contentsline {figure}{\numberline {41}{\ignorespaces Code snippet of the $apply\_fir\_filter$-function, showing the use of the dual \ac {MAC} architecture of the \ac {DSP} and the fractional multiplication function. The loop iterates through the filter coefficients and reference noise signal samples, performing two multiplications and two additions in each cycle.}}{52}{}\protected@file@percent }
|
||||||
|
\acronymused{MAC}
|
||||||
|
\acronymused{DSP}
|
||||||
|
\newlabel{fig:fig_dsp_code_apply_fir_filter}{{41}{52}{}{}{}}
|
||||||
|
\@writefile{lof}{\contentsline {figure}{\numberline {42}{\ignorespaces Visualization of the FIR filter calculation in the $apply\_fir\_filter$-function during the 2nd cyclce of a calculation loop. The reference noise signal samples are stored in the sample line, while the filter coefficients are stored in a separate memory section (filter line).}}{52}{}\protected@file@percent }
|
||||||
|
\newlabel{fig:fig_dsp_fir_cycle.jpg}{{42}{52}{}{}{}}
|
||||||
|
\@writefile{toc}{\contentsline {paragraph}{update\_output}{53}{}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\contentsline {paragraph}{update\_filter\_coefficient}{53}{}\protected@file@percent }
|
||||||
|
\acronymused{DSP}
|
||||||
|
\acronymused{MAC}
|
||||||
|
\@writefile{lof}{\contentsline {figure}{\numberline {43}{\ignorespaces Visualization of the coefficient calculation in the $update\_filter\_coefficient$-function during the 2nd cyclce of a calculation loop. The output is multiplied with the step size and the corresponding sample from the sample line, before being added to the current filter coefficient.}}{53}{}\protected@file@percent }
|
||||||
|
\newlabel{fig:fig_dsp_coefficient_cycle.jpg}{{43}{53}{}{}{}}
|
||||||
|
\newlabel{equation_computing}{{22}{54}{}{}{}}
|
||||||
|
\newlabel{equation_c_1}{{23}{54}{}{}{}}
|
||||||
|
\newlabel{equation_c_2}{{24}{54}{}{}{}}
|
||||||
|
\newlabel{equation_c_3}{{25}{54}{}{}{}}
|
||||||
|
\newlabel{equation_c_4}{{26}{54}{}{}{}}
|
||||||
|
\newlabel{equation_computing_final}{{28}{54}{}{}{}}
|
||||||
|
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}Performance evaluation of different implementation variants}{54}{}\protected@file@percent }
|
||||||
\@setckpt{chapter_04}{
|
\@setckpt{chapter_04}{
|
||||||
\setcounter{page}{52}
|
\setcounter{page}{55}
|
||||||
\setcounter{equation}{21}
|
\setcounter{equation}{28}
|
||||||
\setcounter{enumi}{0}
|
\setcounter{enumi}{0}
|
||||||
\setcounter{enumii}{0}
|
\setcounter{enumii}{0}
|
||||||
\setcounter{enumiii}{0}
|
\setcounter{enumiii}{0}
|
||||||
@@ -200,7 +227,7 @@
|
|||||||
\setcounter{subsubsection}{3}
|
\setcounter{subsubsection}{3}
|
||||||
\setcounter{paragraph}{0}
|
\setcounter{paragraph}{0}
|
||||||
\setcounter{subparagraph}{0}
|
\setcounter{subparagraph}{0}
|
||||||
\setcounter{figure}{40}
|
\setcounter{figure}{43}
|
||||||
\setcounter{table}{0}
|
\setcounter{table}{0}
|
||||||
\setcounter{float@type}{16}
|
\setcounter{float@type}{16}
|
||||||
\setcounter{tabx@nest}{0}
|
\setcounter{tabx@nest}{0}
|
||||||
@@ -318,10 +345,10 @@
|
|||||||
\setcounter{bbx:relatedcount}{0}
|
\setcounter{bbx:relatedcount}{0}
|
||||||
\setcounter{bbx:relatedtotal}{0}
|
\setcounter{bbx:relatedtotal}{0}
|
||||||
\setcounter{parentequation}{0}
|
\setcounter{parentequation}{0}
|
||||||
\setcounter{lstnumber}{11}
|
\setcounter{lstnumber}{14}
|
||||||
\setcounter{FancyVerbLine}{0}
|
\setcounter{FancyVerbLine}{0}
|
||||||
\setcounter{linenumber}{1}
|
\setcounter{linenumber}{1}
|
||||||
\setcounter{LN@truepage}{51}
|
\setcounter{LN@truepage}{54}
|
||||||
\setcounter{FancyVerbWriteLine}{0}
|
\setcounter{FancyVerbWriteLine}{0}
|
||||||
\setcounter{FancyVerbBufferLine}{0}
|
\setcounter{FancyVerbBufferLine}{0}
|
||||||
\setcounter{FV@TrueTabGroupLevel}{0}
|
\setcounter{FV@TrueTabGroupLevel}{0}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ If the \ac{ARM} core requests a sample to be processed, it activates the \ac{DSP
|
|||||||
action_required = 0;
|
action_required = 0;
|
||||||
out_pointer = cyclic_add(output_pointer, 2, output_port, 4);
|
out_pointer = cyclic_add(output_pointer, 2, output_port, 4);
|
||||||
*output_pointer = *sample_pointer;
|
*output_pointer = *sample_pointer;
|
||||||
calc(&corrupted_signal, &reference_noise_signal, mode, &input_port[1], &input_port[0], sample_pointer);
|
calculate_output(&corrupted_signal, &reference_noise_signal, mode, &input_port[1], &input_port[0], sample_pointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,18 +166,73 @@ To tackle this issues, the \ac{DSP} compiler provides intrinsic functions for fr
|
|||||||
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.
|
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 quantization of the ANR calculation}
|
\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()$-function, forms the center of the \ac{ANR} algorithm on the \ac{DSP} core and is responsbile for the actual processing of the audio samples. The general functionality of the function in C is the same as in the high-level implementation (refer to Figure \ref{fig:fig_anr_logic}), and will therefore not be described in detail again. The main focus lies now on the computational efficiency of the different parts of the function, with the goal of generating a formula by quantizizing the computational effort of the different sub-parts in relation to changeable parameters like the filter length.\\ \\
|
||||||
The calculate\_output() functions consists out of the following four main parts, described in detail afterwards:
|
The $calculate\_output()$ functions consists out of the following four main parts:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item write\_buffer
|
\item $write\_buffer$: Pointer handling and buffer management
|
||||||
\item apply\_fir\_filter
|
\item $apply\_fir\_filter$: Application of the \ac{FIR} filter on the reference noise signal
|
||||||
\item update\_output
|
\item $update\_output$: Calculation of the output sample (=error signal)
|
||||||
\item update\_filter\_coefficients
|
\item $update\_filter\_coefficients$: Update of the \ac{FIR} filter coefficients based on the error signal
|
||||||
\end{itemize}
|
\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.
|
These sub-functions feature \ac{DSP}-spefic optimizations and are partly depenend on the setable parameters like the filter length in regard of their computational cost. The following paragraphs will analyze the computational efficiency of these sub-functions in detail.
|
||||||
\paragraph{write\_buffer}
|
\paragraph{write\_buffer}The $write\_buffer$-function is responsible for managing the input line, where the samples of the reference noise signal are stored for further processing. The buffer management mainly consits out of a cyclic pointer increase operation and a pointer dereference operation to write the new sample into the buffer. The cyclic pointer increase operation is implemented using the already mentioned intrinsic function of the \ac{DSP} compiler, while the pointer dereference operation takes 15 cycles to execute. This results in a total duration of 16 cycles for the $write\_buffer$-function to process, indipentent of the filter length or other parameters.
|
||||||
\paragraph{apply\_fir\_filter}
|
\paragraph{apply\_fir\_filter} The $apply\_fir\_filter$-function is responsible for applying the coefficients of the \ac{FIR} filter on the reference noise signal samples stored in the input line. The needed cycles for this function are mainly depenendent on the lenght of the filter, as the number of multiplications and additions increase with the filter length. To increase the perdormance, the dual \ac{MAC} architecture of the \ac{DSP} is utilized, allowing two multiplications and two additions to be performed in a single cycle. Another \ac{DSP}-specific optimization is the use of the already introduced 72-bit accumulators and the fractional multiplication function, which allows to perform multiplications on two 32-bit integers without losing precision or the need for manual bit-shifting operations.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\begin{lstlisting}[language=C]
|
||||||
|
for (int i=0; i < n_coeff; i+=2) chess_loop_range(1,){
|
||||||
|
x0 = *p_x0;
|
||||||
|
w0 = *p_w;
|
||||||
|
p_w++;
|
||||||
|
p_x0 = cyclic_add(p_x0, -1, p_xstart, sample_line_len);
|
||||||
|
x1 = *p_x0;
|
||||||
|
w1 = *p_w; y
|
||||||
|
p_w++;
|
||||||
|
p_x0 = cyclic_add(p_x0, -1, p_xstart, sample_line_len);
|
||||||
|
|
||||||
|
acc_fir_1+=fract_mult(x0, w0);
|
||||||
|
acc_fir_2+=fract_mult(x1, w1);
|
||||||
|
}
|
||||||
|
\end{lstlisting}
|
||||||
|
\caption{Code snippet of the $apply\_fir\_filter$-function, showing the use of the dual \ac{MAC} architecture of the \ac{DSP} and the fractional multiplication function. The loop iterates through the filter coefficients and reference noise signal samples, performing two multiplications and two additions in each cycle.}
|
||||||
|
\label{fig:fig_dsp_code_apply_fir_filter}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=1.0\linewidth]{Bilder/fig_dsp_fir_cycle.jpg}
|
||||||
|
\caption{Visualization of the FIR filter calculation in the $apply\_fir\_filter$-function during the 2nd cyclce of a calculation loop. The reference noise signal samples are stored in the sample line, while the filter coefficients are stored in a separate memory section (filter line).}
|
||||||
|
\label{fig:fig_dsp_fir_cycle.jpg}
|
||||||
|
\end{figure}
|
||||||
|
\noindent The final result is represented in a computing effort of 1 cycle per item in the sample line buffer (which equals the filter length) plus 16 cycles for general function overhead, resulting in a total of $L+16$ cycles for the $apply\_fir\_filter$-function, with $L$ being the filter length.
|
||||||
|
\paragraph{update\_output} The $update\_output$-function is responsible for calculating the output sample based on the error signal and the accumulated filter output. The calculation is a simple subtraction and only takes 1 cycle to execute, independent of the filter length or other parameters.
|
||||||
|
\paragraph{update\_filter\_coefficient} The $update\_filter\_coefficient$-function represents the most computationally expensive part of the $calculate\_output()$-function. The calculated output from the previous function is now multiplied with the step size and the corresponding sample from the reference noise signal, which is stored in the sample line buffer. The result is then added to the current filter coefficient to update it for the next cycle. Again, \ac{DSP}-specific optimizations, like the dual \ac{MAC} architecture, are used, resulting in a computing effort of 5 cycles per filter coeffcient. Per function call, a overhead of XX cycles is added, resulting in a total of $5L+XX$ cycles for the $update\_filter\_coefficient$-function, with $L$ being the filter length.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=1.0\linewidth]{Bilder/fig_dsp_coefficient_cycle.jpg}
|
||||||
|
\caption{Visualization of the coefficient calculation in the $update\_filter\_coefficient$-function during the 2nd cyclce of a calculation loop. The output is multiplied with the step size and the corresponding sample from the sample line, before being added to the current filter coefficient.}
|
||||||
|
\label{fig:fig_dsp_coefficient_cycle.jpg}
|
||||||
|
\end{figure}
|
||||||
|
\noindent The total computing effort of the $calculate\_output()$-function in dependency of the filter length $L$ can now be calculated by summing up the computing efforts of the different sub-functions:
|
||||||
|
\begin{equation}
|
||||||
|
\label{equation_computing}
|
||||||
|
C_{total} = C_{write\_buffer} + C_{apply\_fir\_filter} + C_{update\_output} + C_{update\_filter\_coefficient}
|
||||||
|
\end{equation}
|
||||||
|
The sub-functions can now seperatly be expressed in dependency of the filter length $L$ and also in dependency of the update rate of the filter coefficients, which is represented by the parameter $1/U$ (e.g., if the coefficients are updated every 2 cycles, $1/U$ would result in a vaule of 0.5):
|
||||||
|
\begin{gather}
|
||||||
|
\label{equation_c_1}
|
||||||
|
C_{write\_buffer} = 16 \\
|
||||||
|
\label{equation_c_2}
|
||||||
|
C_{apply\_fir\_filter} = L + 16 \\
|
||||||
|
\label{equation_c_3}
|
||||||
|
C_{update\_output} = 1 \\
|
||||||
|
\label{equation_c_4}
|
||||||
|
C_{update\_filter\_coefficient} = \frac{1}{U}(5L + XX)\\
|
||||||
|
\end{gather}
|
||||||
|
\noindent By inserting the sub-function costs into the total computing effort formula, Equation \ref{equation_computing} can now be expressed as:
|
||||||
|
\begin{equation}
|
||||||
|
\label{equation_computing_final}
|
||||||
|
C_{total} = L + \frac{5L+XX}{U} + 17
|
||||||
|
\end{equation}
|
||||||
\subsubsection{Performance evaluation of different implementation variants}
|
\subsubsection{Performance evaluation of different implementation variants}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<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">
|
<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.8">
|
||||||
<diagram name="Page-1" id="V-e6ogSouhfiz4ZDr4nW">
|
<diagram name="Page-1" id="V-e6ogSouhfiz4ZDr4nW">
|
||||||
<mxGraphModel dx="983" dy="512" 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="983" dy="512" 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>
|
<root>
|
||||||
@@ -55,10 +55,10 @@
|
|||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-17" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-17" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
||||||
<mxGeometry height="25" width="25" x="278" y="217.5" as="geometry" />
|
<mxGeometry height="25" width="25" x="278" y="217.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-18" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Delay<br>x<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-18" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Sample Line<br>x<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="30" width="60" x="180" y="85" as="geometry" />
|
<mxGeometry height="30" width="70" x="180" y="85" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-19" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter<br>w<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-19" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter Line<br>w<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="40" width="60" x="340" y="80" as="geometry" />
|
<mxGeometry height="40" width="60" x="340" y="80" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-20" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-14" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-5" value="">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-20" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-14" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-5" value="">
|
||||||
@@ -289,10 +289,10 @@
|
|||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-230" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-230" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
||||||
<mxGeometry height="25" width="25" x="278" y="607.5" as="geometry" />
|
<mxGeometry height="25" width="25" x="278" y="607.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-231" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Delay<br>x<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-231" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Sample Line<br>x<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="30" width="60" x="180" y="475" as="geometry" />
|
<mxGeometry height="30" width="70" x="175" y="475" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-232" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter<br>w<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-232" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter Line<br>w<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="40" width="60" x="340" y="470" as="geometry" />
|
<mxGeometry height="40" width="60" x="340" y="470" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-233" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-227" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-218" value="">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-233" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-227" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-218" value="">
|
||||||
@@ -523,10 +523,10 @@
|
|||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-285" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-285" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
||||||
<mxGeometry height="25" width="25" x="278" y="997.5" as="geometry" />
|
<mxGeometry height="25" width="25" x="278" y="997.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-286" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Delay<br>x<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-286" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Sample Line<br>x<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="30" width="60" x="180" y="865" as="geometry" />
|
<mxGeometry height="30" width="70" x="175" y="865" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-287" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter<br>w<sub>[n]</sub>" vertex="1">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-287" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter Line<br>w<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="40" width="60" x="340" y="860" as="geometry" />
|
<mxGeometry height="40" width="60" x="340" y="860" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="GcUYTYrn2KeO2qM5n07K-288" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-282" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-273" value="">
|
<mxCell id="GcUYTYrn2KeO2qM5n07K-288" edge="1" parent="1" source="GcUYTYrn2KeO2qM5n07K-282" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="GcUYTYrn2KeO2qM5n07K-273" value="">
|
||||||
@@ -757,10 +757,10 @@
|
|||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-17" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-17" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
||||||
<mxGeometry height="25" width="25" x="861.75" y="607.5" as="geometry" />
|
<mxGeometry height="25" width="25" x="861.75" y="607.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-18" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Delay<br>x<sub>[n]</sub>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-18" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Sample Line<br>x<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="30" width="60" x="763.75" y="475" as="geometry" />
|
<mxGeometry height="30" width="76.25" x="757.5" y="475" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-19" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter<br>w<sub>[n]</sub>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-19" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter Line<br>w<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="40" width="60" x="923.75" y="470" as="geometry" />
|
<mxGeometry height="40" width="60" x="923.75" y="470" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-20" edge="1" parent="1" source="zqf6Z4ZYqrToiwcanCgf-14" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="zqf6Z4ZYqrToiwcanCgf-5" value="">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-20" edge="1" parent="1" source="zqf6Z4ZYqrToiwcanCgf-14" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="zqf6Z4ZYqrToiwcanCgf-5" value="">
|
||||||
@@ -964,10 +964,10 @@
|
|||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-117" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="0" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-117" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="0" vertex="1">
|
||||||
<mxGeometry height="30" width="80" x="753.75" y="995" as="geometry" />
|
<mxGeometry height="30" width="80" x="753.75" y="995" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-118" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="w<sub>1</sub>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-118" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="w<sub>1</sub><br><font style="font-size: 10px;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(= w<sub>1</sub> +&nbsp;</span><span style="background-color: transparent; color: rgb(32, 33, 34); font-family: sans-serif; font-style: italic; text-align: start;">µ*o2*x2)</span></font>" vertex="1">
|
||||||
<mxGeometry height="30" width="80" x="913.75" y="905" as="geometry" />
|
<mxGeometry height="30" width="80" x="913.75" y="905" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-119" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="w2<br><font style="font-size: 10px;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(=&nbsp;</span><span style="background-color: transparent; color: rgb(32, 33, 34); font-family: sans-serif; font-style: italic; text-align: start;">µ*o2*x2)</span></font>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-119" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="w<sub>2</sub><br><font style="font-size: 10px;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">(=&nbsp;</span><span style="background-color: transparent; color: rgb(32, 33, 34); font-family: sans-serif; font-style: italic; text-align: start;">µ*o2*x2)</span></font>" vertex="1">
|
||||||
<mxGeometry height="30" width="80" x="913.75" y="935" as="geometry" />
|
<mxGeometry height="30" width="80" x="913.75" y="935" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-120" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="0" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-120" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="0" vertex="1">
|
||||||
@@ -991,10 +991,10 @@
|
|||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-126" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-126" parent="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" value="x" vertex="1">
|
||||||
<mxGeometry height="25" width="25" x="861.75" y="997.5" as="geometry" />
|
<mxGeometry height="25" width="25" x="861.75" y="997.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-127" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Delay<br>x<sub>[n]</sub>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-127" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Sample Line<br>x<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="30" width="60" x="763.75" y="865" as="geometry" />
|
<mxGeometry height="30" width="76.25" x="755.5" y="865" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-128" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter<br>w<sub>[n]</sub>" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-128" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="Filter Line<br>w<sub>[n]</sub>" vertex="1">
|
||||||
<mxGeometry height="40" width="60" x="923.75" y="860" as="geometry" />
|
<mxGeometry height="40" width="60" x="923.75" y="860" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-129" edge="1" parent="1" source="zqf6Z4ZYqrToiwcanCgf-123" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="zqf6Z4ZYqrToiwcanCgf-114" value="">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-129" edge="1" parent="1" source="zqf6Z4ZYqrToiwcanCgf-123" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="zqf6Z4ZYqrToiwcanCgf-114" value="">
|
||||||
@@ -1174,6 +1174,54 @@
|
|||||||
<mxCell id="zqf6Z4ZYqrToiwcanCgf-163" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" value="Correction" vertex="1">
|
<mxCell id="zqf6Z4ZYqrToiwcanCgf-163" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" value="Correction" vertex="1">
|
||||||
<mxGeometry height="30" width="80" x="1003.75" y="1040" as="geometry" />
|
<mxGeometry height="30" width="80" x="1003.75" y="1040" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-3" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="899" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-4" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="929" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-5" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="958" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-6" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="988" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-7" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="900" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-8" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="929" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-9" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="958" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-10" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="989" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-11" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="510" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-12" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="540" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-13" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="569" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-14" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="1003.75" y="599" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-15" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="510" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-16" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="540" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-17" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="569" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="lyxZcRr64k90961b_5eU-18" parent="1" style="text;whiteSpace=wrap;html=1;" value="<div style="text-align: center;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">add</span></div>" vertex="1">
|
||||||
|
<mxGeometry height="27" width="30" x="420" y="599" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
</diagram>
|
</diagram>
|
||||||
|
|||||||
Reference in New Issue
Block a user