This commit is contained in:
Patrick Hangl
2025-10-24 12:36:36 +02:00
parent 523110fee1
commit af2a1b3c5e
3 changed files with 155 additions and 9 deletions

BIN
Bilder/fig_anr_hybrid.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -44,7 +44,7 @@ A signal (either analog or digital) can be displayed and analyzed in two ways: t
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_fft.jpg} \includegraphics[width=0.8\linewidth]{Bilder/fig_fft.jpg}
\caption{Sampled digital signal in the time spectrum and in the frequency spectrum \cite{source_dsp_ch1}} \caption{Sampled digital signal in the time spectrum and in the frequency spectrum. \cite{source_dsp_ch1}}
\label{fig:fig_fft} \label{fig:fig_fft}
\end{figure} \end{figure}
\subsubsection{Transfer Functions and filters} \subsubsection{Transfer Functions and filters}
@@ -52,7 +52,7 @@ When we discuss signals in a mathematical way, we need to explain the term ``tra
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_transfer.jpg} \includegraphics[width=0.8\linewidth]{Bilder/fig_transfer.jpg}
\caption{Simple representation of a transfer function taking a noisy input signal and delivering a clean output signal \cite{source_dsp_ch1}} \caption{Simple representation of a transfer function taking a noisy input signal and delivering a clean output signal. \cite{source_dsp_ch1}}
\label{fig:fig_transfer} \label{fig:fig_transfer}
\end{figure} \end{figure}
\noindent In digital signal processing, especially in the design of a noise reduction algorithm, transfer functions are essential for modeling and analyzing filters, amplifiers, and the pathway of the signal itself. By understanding a systems transfer function, one can predict how sound signals are altered and therefore how filter parameters can be adapted to deliver the desired output signal.\\ \\ \noindent In digital signal processing, especially in the design of a noise reduction algorithm, transfer functions are essential for modeling and analyzing filters, amplifiers, and the pathway of the signal itself. By understanding a systems transfer function, one can predict how sound signals are altered and therefore how filter parameters can be adapted to deliver the desired output signal.\\ \\
@@ -60,7 +60,7 @@ During the description of transfer functions, the term ``filter'' was used but n
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_lowpass.jpg} \includegraphics[width=0.8\linewidth]{Bilder/fig_lowpass.jpg}
\caption{Behavior of a low-pass-filter. At the highlighted frequecny $f_c$ of 3400 Hz, the amplitude of the incoming signal is reduced to 70\% \cite{source_dsp_ch2}} \caption{Behavior of a low-pass-filter. At the highlighted frequecny $f_c$ of 3400 Hz, the amplitude of the incoming signal is reduced to 70\%. \cite{source_dsp_ch2}}
\label{fig:fig_lowpass} \label{fig:fig_lowpass}
\end{figure} \end{figure}
\subsection{Filter designs} \subsection{Filter designs}
@@ -77,7 +77,7 @@ As there are three operators present in the filter, three samples are needed bef
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_fir.jpg} \includegraphics[width=0.8\linewidth]{Bilder/fig_fir.jpg}
\caption{FIR filter example with three feedforward operators} \caption{FIR filter example with three feedforward operators.}
\label{fig:fig_fir} \label{fig:fig_fir}
\end{figure} \end{figure}
\subsubsection{Infinite Impulse Response filters} \subsubsection{Infinite Impulse Response filters}
@@ -91,7 +91,7 @@ Figure \ref{fig:fig_iir} visualizes a simple IIR filter with two feedforward coe
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_iir.jpg} \includegraphics[width=0.8\linewidth]{Bilder/fig_iir.jpg}
\caption{IIR filter example with two feedforward operators and two feedback operators} \caption{IIR filter example with two feedforward operators and two feedback operators.}
\label{fig:fig_iir} \label{fig:fig_iir}
\end{figure} \end{figure}
\subsubsection{FIR- vs. IIR-filters} \subsubsection{FIR- vs. IIR-filters}
@@ -124,10 +124,22 @@ Although active noise cancellation and adaptive noise reduction share obvious si
\end{figure} \end{figure}
\noindent Figure \ref{fig:fig_anr} shows the basic concept of an adaptive filter design, represented through a feedback filter application. The signal sensor aims to recieve the input signal $s[n]$, which consists out of the target signal and the noise signal, whereas the noise sensor aims to recieve (ideally) only the noise signa $d[n]$, which then feeds the adaptive filter. The adaptive filter removes a certain, noise-related, frequency part of the input signal and re-evaluates the output through its feedback design. The filter parameters are then adjusted and applied to the next sample to minimize the observed error $e[n]$. In reality, a signal contamination of the two sensors has to be expected, which will be illustrated in a more realistic signal flow diagram of an implanted CI system. \noindent Figure \ref{fig:fig_anr} shows the basic concept of an adaptive filter design, represented through a feedback filter application. The signal sensor aims to recieve the input signal $s[n]$, which consists out of the target signal and the noise signal, whereas the noise sensor aims to recieve (ideally) only the noise signa $d[n]$, which then feeds the adaptive filter. The adaptive filter removes a certain, noise-related, frequency part of the input signal and re-evaluates the output through its feedback design. The filter parameters are then adjusted and applied to the next sample to minimize the observed error $e[n]$. In reality, a signal contamination of the two sensors has to be expected, which will be illustrated in a more realistic signal flow diagram of an implanted CI system.
\subsubsection{Fully adaptive vs. hybrid filter design} \subsubsection{Fully adaptive vs. hybrid filter design}
The basic ANR concept illustrated in Figure \ref{fig:fig_anr} can be understood as a fully adaptive variant. A fully adaptive filter design works with a fixed number of coefficients of which everyone is updated after every sample processing. Even if this approach features the best performance in noise reduction, it also requires a relatively high amount of computing power, as every coefficient has to be updated after every sample.\\ \\ The basic ANR concept illustrated in Figure \ref{fig:fig_anr} can be understood as a fully adaptive variant. A fully adaptive filter design works with a fixed number of coefficients of which everyone is updated after every sample processing. Even if this approach features the best performance in noise reduction, it also requires a relatively high amount of computing power, as every coefficient has to be re-calculated after every sample.\\ \\
To reduce the required computing power, a hybrid static/adaptive filter design can be taken into consideration instead. In this approach, a part of the inital fully adaptive filter is split into a fixed and an adaptive part - the static filter removes a certain, known, or estimated, frequency portion of the noise signal, whereas the adaptive part only has to adapt to the remaining, unforecastable, noise parts. This approach reduces the number of required adaptation steps of the adaptive filter, therefore lowering the required computing power. Different approaches of the hybrid static/adaptive filter design will be evaluated and compared in regard of their required computing power in a later chapter of this thesis. To reduce the required computing power, a hybrid static/adaptive filter design can be taken into consideration instead. In this approach, the inital fully adaptive filter is split into a fixed and an adaptive part - the static filter removes a certain, known, or estimated, frequency portion of the noise signal, whereas the adaptive part only has to adapt to the remaining, unforecastable, noise parts. This approach reduces the number of coefficients required to be adapted, therefore lowering the required computing power.
\subsubsection{Filter optimization} \begin{figure}[H]
In the decription of the concept of adaptive filtering above, the adaption of filter coefficients due to an error metric was mentioned but not further explained. \centering
\includegraphics[width=0.8\linewidth]{Bilder/fig_anr_hybrid.jpg}
\caption{Hybrid adaptive filter design for noise reduction with a static part and an adaptive part.}
\label{fig:fig_anr_hybrid}
\end{figure}
\noindent Different approaches of the hybrid static/adaptive filter design will be evaluated and compared in regard of their required computing power in a later chapter of this thesis.
\subsection{Filter optimization}
In the decription of the concept of adaptive filtering above, the adaption of filter coefficients due to an error metric was mentioned but not further explained. The following subchapters shall cover the most important aspects of filter optimization in regard of adaptive noise reduction.
\subsubsection{Error metrics}
Adaptive filters rely on an error metric to self-reliantely evaluate their performance in real-time by adjusting their coefficients in a constant manner to minimize the recieved error signal.
The error signal $e[n]$, already illustrated in Figure \ref{fig:fig_anr} and \ref{fig:fig_anr_hybrid}, is calculated as the difference between the desired signal $d[n]$ (the noise reference) and the output signal $y[n]$ (the filtered signal). The goal of the adaptive filter is to minimize this error signal over time, thereby improving the quality of the output signal.\\ \\
\subsubsection{The Least Mean Squares algorithm}
\subsection{Signal flow diagram of an implanted cochlear implant system} \subsection{Signal flow diagram of an implanted cochlear implant system}
\subsection{Derivation of the systems transfer function based on the problem setup} \subsection{Derivation of the systems transfer function based on the problem setup}

134
drawio/ANR_hybrid.drawio Normal file
View File

@@ -0,0 +1,134 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" version="28.2.7">
<diagram name="Seite-1" id="BWOSVWQKrhK0Pcg9Olm2">
<mxGraphModel dx="983" dy="512" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="8LSkbo7Ni411-_OUStLd-5" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="639.5" y="270" as="sourcePoint" />
<mxPoint x="510" y="460" as="targetPoint" />
<Array as="points">
<mxPoint x="640" y="560" />
<mxPoint x="440" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-1" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="430" y="230" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-2" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="410" y="380" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-4" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="510" y="269.5" as="sourcePoint" />
<mxPoint x="720" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-3" value="Static&lt;br&gt;Filter" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=15;" parent="1" vertex="1">
<mxGeometry x="440" y="385" width="60" height="50" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-6" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="8LSkbo7Ni411-_OUStLd-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="460" as="sourcePoint" />
<mxPoint x="560" y="320" as="targetPoint" />
<Array as="points">
<mxPoint x="600" y="460" />
<mxPoint x="600" y="360" />
<mxPoint x="470" y="360" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-7" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="197.5" y="240" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-8" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="195" y="430" width="125" height="60" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-9" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="8LSkbo7Ni411-_OUStLd-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="317.5" y="270.5" as="sourcePoint" />
<mxPoint x="392.5" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-10" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="8LSkbo7Ni411-_OUStLd-8" target="8LSkbo7Ni411-_OUStLd-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="340" y="520" as="sourcePoint" />
<mxPoint x="345" y="459.5" as="targetPoint" />
<Array as="points">
<mxPoint x="360" y="460" />
<mxPoint x="360" y="410" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-11" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="1" target="8LSkbo7Ni411-_OUStLd-7" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="120" y="270" as="sourcePoint" />
<mxPoint x="183" y="269.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;exitX=0.967;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="uwalZ4GZDBHuo1GNIbxM-1" target="8LSkbo7Ni411-_OUStLd-8" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="120" y="460" as="sourcePoint" />
<mxPoint x="190" y="459.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-13" value="Signal&lt;br&gt;Sensor" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=15;" parent="1" vertex="1">
<mxGeometry x="222.5" y="245" width="70" height="50" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-14" value="Noise&lt;br&gt;Sensor" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=15;" parent="1" vertex="1">
<mxGeometry x="222.5" y="435" width="70" height="50" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-16" value="&lt;font style=&quot;font-size: 20px;&quot;&gt;Σ&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="450" y="250" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="8LSkbo7Ni411-_OUStLd-17" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;e[n]&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="640" y="390" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="uwalZ4GZDBHuo1GNIbxM-1" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;d[n]&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="60" y="440" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="uwalZ4GZDBHuo1GNIbxM-2" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;s[n]&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="70" y="250" width="70" height="50" as="geometry" />
</mxCell>
<mxCell id="uwalZ4GZDBHuo1GNIbxM-6" value="&lt;div&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;y[n]&lt;/span&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="730" y="250" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="MhP5AWCPjLuPs093GbxM-1" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="410" y="480" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="MhP5AWCPjLuPs093GbxM-2" value="Adaptive&lt;br&gt;Filter" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=15;" vertex="1" parent="1">
<mxGeometry x="430" y="485" width="80" height="50" as="geometry" />
</mxCell>
<mxCell id="MhP5AWCPjLuPs093GbxM-3" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="MhP5AWCPjLuPs093GbxM-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="360" y="460" as="sourcePoint" />
<mxPoint x="370" y="490" as="targetPoint" />
<Array as="points">
<mxPoint x="360" y="510" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MhP5AWCPjLuPs093GbxM-5" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeWidth=2;" edge="1" parent="1" source="8LSkbo7Ni411-_OUStLd-2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="510" y="440" as="sourcePoint" />
<mxPoint x="560" y="460" as="targetPoint" />
<Array as="points">
<mxPoint x="560" y="410" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MhP5AWCPjLuPs093GbxM-6" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeWidth=2;" edge="1" parent="1" source="MhP5AWCPjLuPs093GbxM-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="520" as="sourcePoint" />
<mxPoint x="560" y="460" as="targetPoint" />
<Array as="points">
<mxPoint x="560" y="510" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>