aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNao Pross <np@0hm.ch>2021-11-21 10:40:53 +0100
committerNao Pross <np@0hm.ch>2021-11-21 10:40:53 +0100
commit2a3b0ef715d83c97ccb0c2b1eb63707a62ffe7a5 (patch)
treef45e5b6f5ec5a88456d94abc0a63173f355d2571
parentChange chapter title (diff)
parentMerge branch 'master' of github.com:NaoPross/Fading (diff)
downloadFading-2a3b0ef715d83c97ccb0c2b1eb63707a62ffe7a5.tar.gz
Fading-2a3b0ef715d83c97ccb0c2b1eb63707a62ffe7a5.zip
Merge branch 'master' of github.com:NaoPross/Fading
-rw-r--r--doc/slides/slides.pdfbin0 -> 10248 bytes
-rw-r--r--doc/thesis/Makefile2
-rw-r--r--doc/thesis/chapters/implementation.tex148
-rw-r--r--doc/thesis/chapters/theory.tex17
-rw-r--r--doc/thesis/tex/docstyle.sty3
-rw-r--r--notebooks/BSP_FIR_Filter.ipynb182
-rw-r--r--notebooks/FIRDelay.ipynb199
-rw-r--r--notebooks/FIR_mehrere.ipynb247
-rw-r--r--notebooks/FrameSynchronization.ipynb73
-rw-r--r--notebooks/Untitled.ipynb40
-rw-r--r--notebooks/Untitled1.ipynb33
-rw-r--r--notebooks/Untitled2.ipynb182
-rw-r--r--simulation/QAM_Fading/epy_block_0.py50
-rwxr-xr-xsimulation/QAM_Fading/qam_fading.py55
-rw-r--r--simulation/QAM_Fading/qam_fading_V2.grc12
-rw-r--r--simulation/QAM_Fading/qam_fading_V2_eigerner_block.grc1646
-rw-r--r--simulation/QAM_Fading/qam_fading_V2_mehrere.grc1623
-rw-r--r--src/gr-fadingui/grc/CMakeLists.txt4
-rw-r--r--src/gr-fadingui/grc/fadingui_datasource.block.yml28
-rw-r--r--src/gr-fadingui/grc/fadingui_deframer.block.yml39
-rw-r--r--src/gr-fadingui/grc/fadingui_frame_obj.block.yml31
-rw-r--r--src/gr-fadingui/grc/fadingui_xor_frame_sync.block.yml33
-rwxr-xr-xsrc/gr-fadingui/install.sh (renamed from src/gr-fadingui/build.sh)0
-rw-r--r--src/gr-fadingui/python/CMakeLists.txt5
-rw-r--r--src/gr-fadingui/python/__init__.py2
-rw-r--r--src/gr-fadingui/python/datasource.py105
-rw-r--r--src/gr-fadingui/python/deframer.py26
-rw-r--r--src/gr-fadingui/python/frame_obj.py91
-rw-r--r--src/gr-fadingui/python/logger.py14
-rw-r--r--src/gr-fadingui/python/xor_frame_sync.py86
-rwxr-xr-xtests/fadingui/QAM/hammingtest.py14
-rw-r--r--tests/fadingui/QAM/qam_nogui.grc226
-rwxr-xr-xtests/fadingui/QAM/qam_nogui.py164
33 files changed, 4810 insertions, 570 deletions
diff --git a/doc/slides/slides.pdf b/doc/slides/slides.pdf
new file mode 100644
index 0000000..9e7e104
--- /dev/null
+++ b/doc/slides/slides.pdf
Binary files differ
diff --git a/doc/thesis/Makefile b/doc/thesis/Makefile
index c207a17..be2b4bb 100644
--- a/doc/thesis/Makefile
+++ b/doc/thesis/Makefile
@@ -47,7 +47,7 @@ all: $(PDF)
biber $(basename $(MAIN))
$(TEX) $(TEXARGS) $<
# embed fonts
- gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=$@_font_embedded.pdf -f $@
+ # gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=$@_font_embedded.pdf -f $@
.PHONY: clean cleanall
clean:
diff --git a/doc/thesis/chapters/implementation.tex b/doc/thesis/chapters/implementation.tex
index 1052f6b..21235ea 100644
--- a/doc/thesis/chapters/implementation.tex
+++ b/doc/thesis/chapters/implementation.tex
@@ -2,11 +2,72 @@
\chapter{Implementation}
-\section{Simulaton}
-%%TO DO: quelle https://wiki.gnuradio.org/
+\section{Overview}
+% TODO: quelle https://wiki.gnuradio.org/
For the simulation task and after for the Hardware part, the open-source Software GNU Radio has been chosen. This software uses toolboxes for signal processing systems too simulate or/and implement a software-defined radio, based on Python and some C++ implementations for some rapid-application-development environments. The toolboxes can simply, with the help of the graphical user interface, used by drag-and-drop. The Boxes are used to write applications, to receive or to transmit date for a digital system. Some blocks like different filters, channel codes or demodulator elements and a lot more are already implemented. For missing application new elements can be added by coding own blocks. With the help of the GNU Radio software those toolboxes can easily get connected to each other, creating data streams.
+\section{Sender chain}
+\subsection{Data source}
+
+%% TODO: replace with file file
+In this simulation a random source has been chosen.
+
+\subsection{Modulation}
+
+The constellation modulator block is used for a root-raised-cosine-filtered basis modulation. The block gives an input of a byte stream as complex modulated signal in the baseband back.
+Further more it's possible to chose the modulation type here, in this example it is 16QAM, but QPSK, 8PSK and BPSK would also be possible.
+
+\section{Receiver chain}
+
+\subsection{Envelope detector}
+
+\paragraph{Polyphase Clock Sync}
+%% To Do : nochmals anschauen ob dieese erklärung verständlich ist und richtig interpretiert wurde.
+With the the polyphase clock sync the symbols can be synchronized by preforming a time synchronization with the help of multiple filterbanks. For that the derivation of the filtered signal should be minimized whish turns to a better SNR. This works with the help of two filterbanks, one of them contains the filters of the signal adapted to the pulse shaping with several phases. The other contains its derivative. So in the time domain it has a sinc shape, for the output Signal the sinc peak should be on a sample, with the fact that sinc(0) = 1 and sinc(0)' = 0 an error signal can be generated which tells how far away from the peak it is. This error Signal should be zero this is possible with the help of a loop second order whish constants the number of the filterbank and the rate. This rate is generated because of the clock difference between the transmitter and reviver to synchronies the receiver the filter goes through the phases. For the output one sample per symbol is enough.
+
+\paragraph{Equalizer}
+
+\paragraph{Costas Loop}
+
+The Costas Loop is used for frequency and phase adjustment it locks the center frequency of the signal additional it converts it back to de baseband. For different modulation types different orders of the loop had to be chosen
+
+\paragraph{Constellation decoder}
+
+From the complex space the constellation points are decode to bits.
+
+\subsection{Frame synchronization}
+
+\section{Channel simulations}
+
+Here its possible to add some AWGN noise in the channel line. Different parameters can be changed like the noise voltage, time or the frequency offset.
+
+\skelpar[5]{
+ Discuss the multitap FIR model we used. How it is possible to set the delay etc. Also mathematics for the interpolation.
+}
+
+To get a basic line for further simulations a 16QAM has been made. The results of this simulation are shown in \figref{fig:simul16QAM} and \figref{fig:simul16QAM_1} as the red Signal. In \tabref{tab:modulation_settings} some importer Parameter settings for a different modulation scheme are mentioned.
+
+A FIR-Filter was added in the Channel to create a time delay between tow paths. In \figref{fig:simul16QAM} the result includes a direct path and a delayed one. In the plot of \figref{fig:simul16QAM_1} the transmission line dosn't include a direct path. It's impotent to mention that the delay should be smaller than the symbol rate or a multiple of it.
+
+For the a first simulation with some fading the 16QAM simulation model has been extended with a FIR-Filter in the Chanel. The results of this simulation are shown in \figref{fig:simul16QAM} and \figref{fig:simul16QAM_1} as the blue Signal.
+
+
+\section{Hardware}
+
+As Hardware we chosen the USRP B210 from Ettus Research, with the following specifications shown in \tabref{tab:USRP B210 specifications}. Because this SDR is more than enough for our requires.
+
+For the Hardware setup up some changes are made in the file from the 16QAM simulation to fit with the SDRs. For the first test a coaxial cable was used as transmission line, after the cabel were been replaced with two antennas. The gnu radio block scheme is shown in \figref{fig:simul16QAM_Hardware_Aufbau}. The results for s anntena set uo with a transmission line of 20cm are plotted in \figref{fig:simul16QAM__Hardware}.
+
+Instead of the channel modeling block the USRP blocks are used. The sink as transmitter and the source as resiver. The Signal is sended on a center frequency of 2.4GHz.
+
+\subsection{Empirical BER}
+\subsection{Measurements}
+
+%
+%
+%
+
\begin{figure}
\includegraphics[width=\linewidth]{./figures/pdfs/qam_nogui.pdf}
\caption{GNU Radio Blocks}
@@ -25,9 +86,6 @@ For the simulation task and after for the Hardware part, the open-source Softwar
\label{fig:simul16QAM_1}
\end{figure}
-\subsection{16QAM Simulation}
-To get a basic line for further simulations a 16QAM has been made. The results of this simulation are shown in \figref{fig:simul16QAM} and \figref{fig:simul16QAM_1} as the red Signal. In \tabref{tab:modulation_settings} some importer Parameter settings for a different modulation scheme are mentioned.
-
\begin{table}[]
\centering
\caption{Modulation settings for different scheme}
@@ -44,59 +102,6 @@ To get a basic line for further simulations a 16QAM has been made. The results o
\label{tab:modulation_settings}
\end{table}
-
-\subsubsection{Transmitter}
-\paragraph{Source}
-In this simulation a random source has been chosen.
-\paragraph{Modulator}
-The constellation modulator block is used for a root-raised-cosine-filtered basis modulation. The block gives an input of a byte stream as complex modulated signal in the baseband back.
-Further more it's possible to chose the modulation type here, in this example it is 16QAM, but QPSK, 8PSK and BPSK would also be possible.
-
-\subsubsection{Channel}
-\paragraph{Channel Mode}
-Here its possible to add some AWGN noise in the channel line. Different parameters can be changed like the noise voltage, time or the frequency offset.
-
-\subsubsection{Receiver}
-\paragraph{Polyphase Clock Sync}
-%% To Do : nochmals anschauen ob dieese erklärung verständlich ist und richtig interpretiert wurde.
-With the the polyphase clock sync the symbols can be synchronized by preforming a time synchronization with the help of multiple filterbanks. For that the derivation of the filtered signal should be minimized whish turns to a better SNR. This works with the help of two filterbanks, one of them contains the filters of the signal adapted to the pulse shaping with several phases. The other contains its derivative. So in the time domain it has a sinc shape, for the output Signal the sinc peak should be on a sample, with the fact that sinc(0) = 1 and sinc(0)' = 0 an error signal can be generated which tells how far away from the peak it is. This error Signal should be zero this is possible with the help of a loop second order whish constants the number of the filterbank and the rate. This rate is generated because of the clock difference between the transmitter and reviver to synchronies the receiver the filter goes through the phases.
-
-For the output one sample per symbol is enough.
-
-\paragraph{Equalizer}
-?
-
-
-\paragraph{Costas Loop}
-
-The Costas Loop is used for frequency and phase adjustment it locks the center frequency of the signal additional it converts it back to de baseband. For different modulation types different orders of the loop had to be chosen
-
-\paragraph{Decoder}
-
-From the complex space the constellation points are decode to bits.
-
-
-
-\subsection{Simulation Fading}
-For the a first simulation with some fading the 16QAM simulation model has been extended with a FIR-Filter in the Chanel. The results of this simulation are shown in \figref{fig:simul16QAM} and \figref{fig:simul16QAM_1} as the blue Signal.
-
-\subsubsection{Channel}
-\subsubsection{FIR-Filter}
-A FIR-Filter was added in the Channel to create a time delay between tow paths. In \figref{fig:simul16QAM} the result includes a direct path and a delayed one. In the plot of \figref{fig:simul16QAM_1} the transmission line dosn't include a direct path. It's impotent to mention that the delay should be smaller than the symbol rate or a multiple of it.
-
-\newpage
-\section{Hardware}
-
-As Hardware we chosen the USRP B210 from Ettus Research, with the following specifications shown in \tabref{tab:USRP B210 specifications}. Because this SDR is more than enough for our requires.
-
-
-\subsection{16QAM Hardware setup}
-For the Hardware setup up some changes are made in the file from the 16QAM simulation to fit with the SDRs. For the first test a coaxial cable was used as transmission line, after the cabel were been replaced with two antennas. The gnu radio block scheme is shown in \figref{fig:simul16QAM_Hardware_Aufbau}. The results for s anntena set uo with a transmission line of 20cm are plotted in \figref{fig:simul16QAM__Hardware}.
-
-\subsubsection{Channel}
-\paragraph{UHD: USRP Sink and Source}
-Instead of the channel modeling block the USRP blocks are used. The sink as transmitter and the source as resiver. The Signal is sended on a center frequency of 2.4GHz.
-
\begin{figure}
\includegraphics[width=\linewidth]{./figures/pdfs/qam_Hardware_1711.pdf}
\caption{GNU Radio Blocks Hardware}
@@ -109,34 +114,21 @@ Instead of the channel modeling block the USRP blocks are used. The sink as tran
\label{fig:simul16QAM__Hardware}
\end{figure}
-
-
% To Do: Picture of the setup
-
\begin{table}[]
%To DO sepzifikationen ampssen / genauer? https://www.ettus.com/wp-content/uploads/2019/01/b200-b210_spec_sheet.pdf
%https://kb.ettus.com/B200/B210/B200mini/B205mini#FAQ
\centering
\caption{USRP B210 specifications}
- \begin{tabular}{ccc}
- \midrule
- Dimensions & 9.7 x 15.5 x 1.5 cm \\
- Ports &
- 2 TX , 2 RX, Half or Full Duplex\\
- RF frequencies & from 70MHz to 6GHz\\
- Bandwidth & 200kHz-56MHz\\
- External reference input & 10 MHz \\
+ \begin{tabular}{ll}
+ \toprule
+ Dimensions & \(9.7 \times 15.5 \times 1.5\) cm \\
+ Ports & 2 TX, 2 RX, Half or Full Duplex \\
+ RF frequencies & from 70MHz to 6GHz \\
+ Bandwidth & 200kHz -- 56MHz \\
+ External reference input & 10 MHz \\
\bottomrule
\end{tabular}
\label{tab:USRP B210 specifications}
\end{table}
-
-
-
-
-\section{Measurements}
-
-
-
-\section{Results}
diff --git a/doc/thesis/chapters/theory.tex b/doc/thesis/chapters/theory.tex
index 9d61b60..92dea24 100644
--- a/doc/thesis/chapters/theory.tex
+++ b/doc/thesis/chapters/theory.tex
@@ -314,20 +314,3 @@ Because as mentioned earlier it is difficult to estimate the time-dependent para
\sim \mathcal{N} \left( \frac{A_l}{\sqrt{2}}, \frac{1}{2} \sigma_l^2 \right)
\end{equation}
\skelpar[4]
-
-\section{Receiver DSP chain}
-
-\skelpar[3]{Overview of the DSP chain.}
-
-\begin{figure}
- \centering
- \skelfig[width = .8\linewidth]
- \caption{
- Signal processing chain of the receiver.
- \label{fig:rx-dsp-chain}
- }
-\end{figure}
-
-\paragraph{Synchronization} \skelpar[4]{Polyphase filter bank.}
-\paragraph{Equalization} \skelpar[4]{CMA Equalizer.}
-\paragraph{Fine tuning} \skelpar[4]{Costas Loop.}
diff --git a/doc/thesis/tex/docstyle.sty b/doc/thesis/tex/docstyle.sty
index c191829..1ea4a90 100644
--- a/doc/thesis/tex/docstyle.sty
+++ b/doc/thesis/tex/docstyle.sty
@@ -47,6 +47,7 @@
\RequirePackage{roboto}
% Bera for monospaced font
\setmonofont[Path=misc/,
+ Scale=0.85,
BoldFont = VeraMoBd,
ItalicFont = VeraMoIt,
BoldItalicFont = VeraMoBI,
@@ -118,7 +119,7 @@
language = TeX,
showstringspaces = false,
% font
- basicstyle = \ttfamily\small,
+ basicstyle = \ttfamily,
identifierstyle = \color{black},
keywordstyle = \bfseries \color{blue!70!black},
commentstyle = \color{gray},
diff --git a/notebooks/BSP_FIR_Filter.ipynb b/notebooks/BSP_FIR_Filter.ipynb
new file mode 100644
index 0000000..decc757
--- /dev/null
+++ b/notebooks/BSP_FIR_Filter.ipynb
@@ -0,0 +1,182 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "966080dc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 3 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#!python\n",
+ "\n",
+ "from numpy import cos, sin, pi, absolute, arange\n",
+ "from scipy.signal import kaiserord, lfilter, firwin, freqz\n",
+ "from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show\n",
+ "\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Create a signal for demonstration.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "sample_rate = 100.0\n",
+ "nsamples = 400\n",
+ "t = arange(nsamples) / sample_rate\n",
+ "x = cos(2*pi*0.5*t) + 0.2*sin(2*pi*2.5*t+0.1) + \\\n",
+ " 0.2*sin(2*pi*15.3*t) + 0.1*sin(2*pi*16.7*t + 0.1) + \\\n",
+ " 0.1*sin(2*pi*23.45*t+.8)\n",
+ "\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Create a FIR filter and apply it to x.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "# The Nyquist rate of the signal.\n",
+ "nyq_rate = sample_rate / 2.0\n",
+ "\n",
+ "# The desired width of the transition from pass to stop,\n",
+ "# relative to the Nyquist rate. We'll design the filter\n",
+ "# with a 5 Hz transition width.\n",
+ "width = 5.0/nyq_rate\n",
+ "\n",
+ "# The desired attenuation in the stop band, in dB.\n",
+ "ripple_db = 60.0\n",
+ "\n",
+ "# Compute the order and Kaiser parameter for the FIR filter.\n",
+ "N, beta = kaiserord(ripple_db, width)\n",
+ "\n",
+ "# The cutoff frequency of the filter.\n",
+ "cutoff_hz = 10.0\n",
+ "\n",
+ "# Use firwin with a Kaiser window to create a lowpass FIR filter.\n",
+ "taps = firwin(N, cutoff_hz/nyq_rate, window=('kaiser', beta))\n",
+ "\n",
+ "# Use lfilter to filter x with the FIR filter.\n",
+ "filtered_x = lfilter(taps, 1.0, x)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the FIR filter coefficients.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "figure(1)\n",
+ "plot(taps, 'bo-', linewidth=2)\n",
+ "title('Filter Coefficients (%d taps)' % N)\n",
+ "grid(True)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the magnitude response of the filter.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "figure(2)\n",
+ "clf()\n",
+ "w, h = freqz(taps, worN=8000)\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlabel('Frequency (Hz)')\n",
+ "ylabel('Gain')\n",
+ "title('Frequency Response')\n",
+ "ylim(-0.05, 1.05)\n",
+ "grid(True)\n",
+ "\n",
+ "# Upper inset plot.\n",
+ "ax1 = axes([0.42, 0.6, .45, .25])\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlim(0,8.0)\n",
+ "ylim(0.9985, 1.001)\n",
+ "grid(True)\n",
+ "\n",
+ "# Lower inset plot\n",
+ "ax2 = axes([0.42, 0.25, .45, .25])\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlim(12.0, 20.0)\n",
+ "ylim(0.0, 0.0025)\n",
+ "grid(True)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the original and filtered signals.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "# The phase delay of the filtered signal.\n",
+ "delay = 0.5 * (N-1) / sample_rate\n",
+ "\n",
+ "figure(3)\n",
+ "# Plot the original signal.\n",
+ "plot(t, x)\n",
+ "# Plot the filtered signal, shifted to compensate for the phase delay.\n",
+ "plot(t-delay, filtered_x, 'r-')\n",
+ "# Plot just the \"good\" part of the filtered signal. The first N-1\n",
+ "# samples are \"corrupted\" by the initial conditions.\n",
+ "plot(t[N-1:]-delay, filtered_x[N-1:], 'g', linewidth=4)\n",
+ "\n",
+ "xlabel('t')\n",
+ "grid(True)\n",
+ "\n",
+ "show()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "650a8b16",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/FIRDelay.ipynb b/notebooks/FIRDelay.ipynb
index 099fc25..4576f88 100644
--- a/notebooks/FIRDelay.ipynb
+++ b/notebooks/FIRDelay.ipynb
@@ -3,6 +3,7 @@
{
"cell_type": "code",
"execution_count": 1,
+ "id": "acccd8cc",
"metadata": {},
"outputs": [],
"source": [
@@ -13,130 +14,53 @@
},
{
"cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([-4, -3, -2, -1, 0, 1, 2, 3])"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "tau = 1/2\n",
- "freq = np.arange(-4,4)\n",
- "freq"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
+ "id": "bee9dae9",
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([6.12323400e-17+1.j , 3.82683432e-01+0.92387953j,\n",
- " 7.07106781e-01+0.70710678j, 9.23879533e-01+0.38268343j,\n",
- " 1.00000000e+00+0.j , 9.23879533e-01-0.38268343j,\n",
- " 7.07106781e-01-0.70710678j, 3.82683432e-01-0.92387953j])"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "f_tabs = np.exp((-2j*np.pi*freq*tau)/8)\n",
- "f_tabs"
- ]
+ "outputs": [],
+ "source": []
},
{
- "cell_type": "code",
- "execution_count": 4,
+ "cell_type": "markdown",
+ "id": "405fcd96",
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
"source": [
- "plt.plot(f_tabs.real)\n",
- "plt.plot(f_tabs.imag)\n",
- "plt.show()"
+ "# Delay as a Convolution System"
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 2,
+ "id": "7210e2de",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "array([ 0.62841744+0.125j, 0.62841744-0.125j, -0.18707572+0.125j,\n",
- " 0.08352233-0.125j, -0.02486405+0.125j, -0.02486405-0.125j,\n",
- " 0.08352233+0.125j, -0.18707572-0.125j])"
+ "[0, 0, 0, 1]"
]
},
- "execution_count": 5,
+ "execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "i_tabs = ifft(fftshift(f_tabs))\n",
- "i_tabs"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA6P0lEQVR4nO3dd3hUZfbA8e9JAxJCDyEQOqF3Ir0oGgVFsYBSBEFZimBh3XVd3V23/VbXXXVFlCYIKooogihYABHpJPQeOhkSSCACoae8vz/ugAETEphJ7pTzeZ55ZubOLQcIOXPfcl4xxqCUUsp/BdgdgFJKKXtpIlBKKT+niUAppfycJgKllPJzmgiUUsrPBdkdwM2oVKmSqVWrlt1hKKWUV1m/fv1xY0zEtdu9MhHUqlWLhIQEu8NQSimvIiKH8tquTUNKKeXnNBEopZSf00SglFJ+ThOBUkr5OU0ESinl59ySCERkmoikisi2fD4XERknIntFZIuItM71WQ8R2e387AV3xKOUUqrw3HVHMB3ocZ3PewIxzsdwYAKAiAQC7zg/bwz0F5HGbopJKaVUIbhlHoEx5icRqXWdXXoDHxir5vUaESknIlFALWCvMWY/gIjMcu67wx1xXWvJzmPsST1DwyrhNIoqQ+XwEohIUVxKKfdJ2QIHl0PlRhDZFEpXtjsi5WOKa0JZNSAp13uHc1te29vldQIRGY51N0GNGjVuKohliWl8sPqX+RTlQ4NpWKUMDaPCaeR8rh8ZTsngwJs6v1JF4vs/wYFlv7wPqwyRTZyPptZzRAMIKmFfjMqrFVciyOtrt7nO9l9vNGYyMBkgNjb2plbT+XvvpjwX14BdR0+z62gGu46eZmdKBrPWJXE+MxuAAIFalcKsxOC8c2gYFU61cqX07kEVv5xsOLIeWvS3Hse2Ox/bYN0UyL5o7SeBUKn+rxNEmaqgP7eqAMWVCBxA9Vzvo4FkICSf7UWmbGgw7epUpF2dile25eQYDqefu5IYdh09zbbkUyzYmnJln/ASQTSMCr9yB9GwShkaVAmndAmvrNKhvEXaLrh0BurcBnW6WY/LsrMgfb+VFC4niKR1sO3zX/YpWe6XpBDZBKo0hYhGEBJa7H8U5bmK67fYfGCMsw+gHXDKGJMiImlAjIjUBo4A/YABxRTTFQEBQq1KYdSqFEaPplFXtp+5mMVu553DLmeCmLfxCBlrsq7sU6NCKA2rhNMwqgyNnM81K4QSEKDfwpQbOOKt5+jYX38WGAQR9a1H0wd/2X7+JKTuvDpBbPwIMs86dxCoWPfqO4fIJlC2BgToiHJ/5JZEICKfALcClUTEAbwMBAMYYyYCC4G7gb3AOWCo87MsERkDfAcEAtOMMdvdEZM7lC4RRJua5WlTs/yVbcYYjpw8fyUx7Dyawa6U0yzeeYwcZ4NVqeBA6lcJp/HlO4gq1nPZ0GCb/iTKazniIbQiVKhT+GNKlYOaHazHZTk5cPLg1U1LR7fCjvlcaY0NCYfIxlc3L1VuDCXLuPEPpDyReOPi9bGxscbTqo9eyMxmz7Ez7Mx197Az5TQ/n8u8sk/VsiVpGFXmqjuI2pXCCArUb2EqH+PbQoXaMODTojn/xTNW81Puu4dj2+DCqV/2KVcDIptdnSAq1IYAHVThbURkvTHmV7eX2sDtJiWDA2kWXZZm0WWvbDPGkJZx8cpdw66jGexMOc3yPWlkZlsJOCQogJjKpWlYpQyNcvVBVCqtI0D83vmTcHw3NO9bdNcoUdpqdsrd9GQMnD7yS1K4nCASvwVjDaogqJRzOOs1zUuhFYouVlVkNBEUIRGhcpmSVC5Tkm71f1kL4lJWDvvSzlzpe9h5NIPle9KYs8FxZZ9KpUvQKCqcvrHV6dUsSvsc/NGR9dZz9C3Fe10RKBttPerf9cv2zAtWYsp957D7G9j44S/7hFeFKs2gzRBo0FNHLLnRqn3HGf/DXv7btwVVy5Vy67k1EdggJCiARlFlaBRVBlr9sv3EmYvsPppx5Q4i4dDPPP3JRt75YS9j42K4q0kVHcLqTxzxgEC1NnZHYgkuCVEtrEduZ1KvvnM4uBJm9YeqreG2l6De7ZoQXJBwMJ3Xv09k9f4TRJYpwaET59yeCLSPwIPl5Bi+3prC/xYnsj/tLE2qluG3cfXp3rCyJgR/8NFDcDoFnlxldyQ3JjsLNn8Cy16DU4ehenvo/hLU7mp3ZF5lc9JJXl+UyE+JaVQqHcKoW+sxsF0Nlya85tdHoInAC2Rl5/DlpmTeWrKHw+nnaFm9HM/dWZ/O9SppQvBVOTnwWm1o3BvuG2d3NDcn65LVbPTTfyEjGWp1ge5/ghrt7Y7Mo21PPsWbixJZvDOV8qHBjOhWl8EdahIa4noDjiYCH5CZncOc9Q7e/mEvR06ep22tCvz2zvq0zzU5TvmItER45xa4bzy0HmR3NK7JvADr34flb8DZVKh7u3WH4ClNXh5iz7EM3lycyMKtRylTMojfdKnD0M613TppVROBD7mYlc3s+CTe/mEvqRkX6VSvIr+Na3DVfAfl5TbOhC+fhNHrrDpCvuDSOYifAiv+B+fToX5PuO1FiGpud2S22p92hreW7GH+5mRCgwN5onNtnuhSh7Kl3D/vSBOBD7qQmc1Haw4xcdk+jp+5xK0NIngursFVQ1iVl/rqWdj2BfzhoO/N9r2YAWsnwqq3rfkKjXvDrX+0hqP6kaT0c7y1ZA9zNx4hJDCAwR1rMqJrXSqEhRTZNTUR+LBzl7KYseoQk37ax8lzmdzZOJKxcfWtUUnKO03oZJWbHjTX7kiKzvmTsOZdWP2uVU+pWR/o9gJUqmd3ZEUq+eR5xi/dy+z4JAIChEfb1WTUrXWJCC/6uUOaCPxAxoVM3l95kCnL95NxIYt7mkcx9o4Y6lUOtzs0dSMuZsCrNaDr83DbH+2OpuidS4eVb8G6yZB1EVr0g27PQ/ladkfmVqmnL/Duj/v4eO1hDIZ+t9Rg9G31qFK2ZLHFoInAj5w6l8mU5ft5f+UBzmdm07tlNZ65PYZalcLsDk0VxoGfYMa9MHAOxNxhdzTF50yq1X+QMBVysqDVo9D199bENi924sxFJi7bx4drDpGZbejbJpox3esRXb74K8BqIvBD6WcvMWnZPmasPkhmtuGh1tV4qnsM1StoCWKP9tN/4Yd/WP0DpfxwAMDpFFj+Oqyfbk1EazMUuvwWwqvYHdkNOXnukvML2UEuZGZzfyvrC1nNivZ9IdNE4MdSMy4w4cd9zFx7GGMMj9xSnTG3xRTrLam6AR/3g/R9MCbe7kjsdTIJfvqPVUI7MBhuGQadx0JYJbsju67TFzKZtuIAU5cfIONiFr2aR/HsHfWpV7m03aFpIlCQcuo87yzdy6fxSYgIA9vVYNStdakcrgnBYxgD/6ln1fi5/127o/EM6futWcpbPrWK3bUbAR2f8rgCd2cvZjF91UEm/7SfU+czuauJNWijYRXPGbShiUBdkZR+jrd/2MOcDUcIDhQe61CLEd2KdtiaKqT0AzCuJfR6E2Iftzsaz5KWCMtetYbVlgiHDqOh/Sgoae9w6cvDuCf8uI8TZy/RvWFlfhtXn6bVPG8YtyYC9SsHj5/lrSV7mLfpCKHBgQztVJvfdKmjC+jYacts+OI3MHKltayk+rVjO+DHf8HOr6ylODs9DW1HWCW1i9HFrGxmrUvinaXWxM4uMZUYG1ef1jU8t19HE4HK197UDN5cvIcFW1IIvzy1vVMtwktqQih2C39vzSr+Y5Iu/FKQ5E2w9F+w5zsIrQSdn7X6EYLdW5nzWpnZOXyW4GD8D3tIPnWBtrUr8Fxc/avWQfdURZoIRKQH8BbWcpPvGWNevebz3wMDnW+DgEZAhDEmXUQOAhlANpCVV5DX0kRQNHYkn+bNxYks2nGMcqHBjOhal8c6uqfYlSqkybdCSGkY8rXdkXiPpHhY+n+wfymUjoQuv4M2j0GQeydoZWXnMG9TMm8tSSQp/TytapTjubgGdKpX0WuKPxZZIhCRQCARiAMcQDzQ3xizI5/97wXGGmO6O98fBGKNMccLe01NBEVri+MkbyxK5MfdVvnbkd3q8mj7mi6Vv1WFkHkeXomGjk/DHS/bHY33ObQKfvg/OLQCykRD199ZcxECXbuzzckxfLUlmbcW72H/8bM0rVaG5+IacGuDCK9JAJfllwjcUcSkLbDXGLPfGHMJmAX0vs7+/YFP3HBdVUSaR5dj+tC2zBnVkQZVwvnngp10+89SPlx9kItZ2XaH57uSN1kTqaq3tTsS71Szo3UnNfhLKFMVvn4W3m5jNbVlZ93w6XJyDN9sTaHHWz/xzKxNhAQFMGlQG74a05nbfGxNEHfcEfQBehhjhjnfDwLaGWPG5LFvKNZdQz1jTLpz2wHgZ8AAk4wxk/O5znBgOECNGjXaHDp0yKW4VeGt3neCNxbtJv7gz1QrV4qnutfjoTbRBAf6WDE0u60cB4v+DL/bC6UjCt5f5c8Y2LPIajJK2QQV61l1jJo+WGDfizGGH3al8vr3iexIOU3diDDGxtXn7qbev2RsUTYN9QXuuiYRtDXGPJXHvo8Ajxpj7s21raoxJllEKgOLgKeMMT9d75raNFT8jDEs33Oc1xclsjnpJDUrhvJ09xjub1WNQC//z+ExPn0Ujm6FZzbbHYnvMAZ2LbA6lVO3Q0Qjq35Tw3t/VdX18s/4G4sS2eT8GX/m9hh6t/Sdn/H8EoE7egEdQPVc76OB5Hz27cc1zULGmGTnc6qIzMVqarpuIlDFT0ToWj+CLjGV+GFXKm8sSuS5zzbzzo97GXtHfe5p5v3flmxljNXpqcs5upcINOoFDe6GHfPgx1dg9mCo0sxaT7l+DxD51V3vvx9qxoOt/eeu1x13BEFYncW3A0ewOosHGGO2X7NfWeAAUN0Yc9a5LQwIMMZkOF8vAv5ujPn2etfUOwL7GWP4bvtR3liUSOKxMzSsEs4fejTktoaV7Q7NO51ywJtNoOd/oN1wu6PxXTnZsPVzKyH8fIBzES15nYFMTapGZJkSjOkewyOx1QkJ8s0EUGSdxcaYLGAM8B2wE5htjNkuIiNFZGSuXR8Avr+cBJwigRUishlYBywoKAkozyAi9GgaxTfPdGVc/1Zcys5h6PR4/v7VDi5l5dgdnvdJWmc9Rxc4elq5IiAQWjyCGb2OlY1fJj3VwUtpz/NFo2Use64rg9rX9NkkcD06oUy5xaWsHF75ZifvrzxI6xrleGdga6LKFu3EHp/y7YtW+eU/Olwe7qiu78zFLF6Ys4Wvt6TQs34Z3gr/kJDtn0Ld7vDgexDm+RPDblZRDh9VipCgAF6+twnjB7Ri99EM7hm3guV70uwOy3s44qFqK00CRSzxWAa9x69g4dYUnu/RgHeGdCakzyS49y04uBImdbH6avyMJgLlVr2aV+XLMZ2pVDqEwdPW8dbiPeTkeN9dZ7HKumgNcdRmoSI1b+MReo9fyanzWcwc1p4nb61nDXAQgTZD4InvISAI3u8BayZaHfh+QhOBcrt6lUszb3Qn7m9ZjTcXJzJkejzpZy/ZHZbnOroVsi9BtE4kKwoXMrN5ae5Wnv10E82iy7Lw6c50qJtH80/VljBiGcTcCd/+AT4bAhdOF3e4ttBEoIpEaEgQbzzcgn890Iw1+07Qa9xyNh7+2e6wPJPD2RQRfYu9cfigpPRz9J24mplrDzOiWx0+HtaOymWus/5GqfLQ72O4429WddMpt8Gx7fnv7yM0EagiIyIMaFeDOaM6EhAgPDxpNdNXHsAbBygUKUe8VRunTJTdkfiUJTuP0evtFRw8cZbJg9rwx56NCCrMvAARq5LpY/PhYgZMuR02zyryeO2kiUAVuWbRZVnwVBe6xkTw16928NQnGzlz8cZrv/ispHjtH3CjrOwcXvt2F0/MSCC6fCkWPNWFO5vcxHrHtTrDiOXWv83cEfDVM5B5wf0BewBNBKpYlA0NZsrgWP7QoyELt6Zw3/gVJB7LsDss+2UchVOHtdCcm6RmXODRqWt598d99G9bnTmjOlKjYujNnzA8EgbNs9ZKXj8dpsZZq8j5GE0EqtgEBAijbq3LzGHtOX0+i97jVzJ3o8PusOzlcM6H0f4Bl63df4Je41awKekk/+3bglcebO6e0umBQXDHX6H/LDh5CCZ3g10LXT+vB9FEoIpdh7oVWfh0Z5pFl2Xsp5t5ce5WLmT6aXlrxzoICIYqze2OxGsZY5i0bB8D3ltLWIkg5o3uRJ820e6/UIOeMOInKF8LZvWHRS/fVHlrT6SJQNmicpmSfDysHSO71eXjtYfpO3E1Senn7A6r+DkSIKoFBF9nJIvK16nzmQz/cD2vfLOLu5pEMn9MJxpWKVN0FyxfCx7/HmIfh5X/gw/us5r3vJwmAmWboMAAXujZkCmDYzl44iz3jFvO4h3H7A6r+GRnwZEN2ix0k7YdOcW9b69g6a5U/tKrMe8MaF0862wHl4Reb8IDkyB5I0zsAgeWF/11i5AmAmW7uMaRLHiqCzUqhjLsgwT+/e0usrL9oHDdsW2QdV5HDN0gYwyz1h3mwQmryMzO4dMRHXi8c+3iXzGsRT8YtgRKlrXuDFa8CTne+XOriUB5hBoVQ/l8ZEf6t63BhB/38ejUtaRm+OZQvSsuTyTTEUOFdv5SNr/7bAsvfLGVdrUr8PVTnWlTs7x9AUU2huFLoXFvWPxXmDUAznvfxElNBMpjlAwO5JUHm/F63xZsSjrJPeNWsHb/CbvDKjqOBCgdCWWrF7yvYn/aGR54dyVfbHTwzO0xTB/aloqlS9gdFpQIhz7vW2tJ7F0Mk7pZ6097EU0EyuM81CaaeaM7EV4iiAHvrWXSsn2+ORvZsc7qH/ChRdCLijX3ZCXHTl9g+tC2jI2r71nLR4pYCwoN/cZa/GbqnZDwvtcUrtNEoDxSwypl+HJMJ+5qEskr3+xi+IfrOXU+0+6w3OfsCUjfrx3FBcjMzuEfX+/gyZkbqFe5NAue7kK3+hF2h5W/6rdYQ0xrdYKvn4W5I+HS2QIPs5tbEoGI9BCR3SKyV0ReyOPzW0XklIhscj7+Uthjlf8KLxnMOwNa85dejVm6K5V7317BtiOn7A7LPY7oRLKCpJw6T7/Ja5i64gBDOtZi9ogOVC3nBYsdhVWEgZ/DrS/Clk/hvTvg+B67o7oulxOBiAQC7wA9gcZAfxFpnMeuy40xLZ2Pv9/gscpPiQiPd67NpyM6kJmdw4MTVjFr3WHvbypKWgcSaJU+Vr+yfE8a94xbwa6U04wf0Iq/3tfEu5aQDAiEW/8Ag76AM8dg8q2w7Qu7o8qXO/5m2wJ7jTH7jTGXgFlA72I4VvmRNjXL8/VTnWlXuwIvfLGV3322hfOXvHg2siMeIptASJjdkXiUnBzDW4v3MHjaOiqVDuHLMZ3p1byq3WHdvLrdraaiyo3h86HwzR8gy/PW5nBHIqgGJOV673Buu1YHEdksIt+ISJMbPFYpKpYuwfShbXnm9hi+2OjggXdXsj/tjN1h3bicbGsimQ4bvUr62UsMmR7Pm4sTub9lNeaN7kS9yqXtDst1ZaNhyAJo/ySsnQjT74ZTnlVjyx2JIK+u+2vv2zcANY0xLYC3gXk3cKy1o8hwEUkQkYS0NF0L118FBghj4+ozfWhbjp2+wH3jV7Jwa4rdYd2YtN1wKUP7B3LZePhneo1bzpp9J/jXA8144+EWhIYE2R2W+wSFQI9XoO8MSN1lzUbeu9juqK5wRyJwALkHQkcDybl3MMacNsaccb5eCASLSKXCHJvrHJONMbHGmNiICA8eNaCKRbf6ESx4ugsxkaV5cuYG/v7VDi5lecmsTsc661kTAcYYpq88wMOTVhMQIMwZ1ZEB7WoU/yzh4tLkfhj+I4RHwUd9YOkr1h2izdyRCOKBGBGpLSIhQD9gfu4dRKSKOP9lRaSt87onCnOsUvmpWq4Unw7vwNBOtZi28gD9Jq8m5dR5u8MqmCMeSlWACnXsjsRWZy5m8dQnG/nrVzvoGhPBgqe60Cy6rN1hFb1K9WDYYqtExbJXYWYfOHvc1pBcTgTGmCxgDPAdsBOYbYzZLiIjRWSkc7c+wDYR2QyMA/oZS57HuhqT8h8hQQG8fG8Txg9oxe6jGdwzbgXL93h406Ejwe8nkiUey+C+8StYuDWFP/SwCg+WDS2GgnGeIiQU7p8A946DgythUldrJJlNxBuH4cXGxpqEhAS7w1AeZl/aGUZ9tJ49qWd49vb6PNW9HgGeNPsU4PxJ+HdNuO1P0O33dkdji7kbHbz4xTbCSgTxdv9WdKhb0e6Q7JWyGWYPtjqQ7/wntBtZZF8SRGS9MeZXVQ69aGCuUtdXN6I080Z34oGW1XhzcSJDpseTftbDhuodWW89V/e//oELmdm8OHcrYz/dTLPosix8urMmAbDWoxi+DGLugm9fgM+GwIXTxRqCJgLlU0JDgnj94Rb864FmrNl3gl7jlrPxsAdVg3QkAAJVW9sdSbFKSj9H34mr+XjtYWsxomHtqFxGF+O5olQ56DcT4v4OO7+CKbfBseJrJddEoHyOiDCgXQ3mjOpIYKDw8KTVTF95wDNmIzvWQeVGULIIV9HyMEt2HqPX2ys4eOIsUwbH8kLPhgQF6q+eXxGBTs/AY1/BxQyYcjtsnlUsl9Z/DeWzmkWX5esxVpGyv361g6c+2ciZizauMZuT80tHsR/Iys7htW938cSMBKpXKMWCp7oQ1zjS7rA8X61OMGK5tWDR3BHw1TOQWbRrc2giUD6tbGgwkwfF8oceDZ2ljFeQeCzDnmDS98GFk36RCFIzLvDo1LW8++M++retzucjO1KjYqjdYXmP8EgYNA86j4X102FqHKQfKLLLaSJQPi8gQBh1a11mDmvP6fNZ9B6/krkbbZjin+QfE8nW7j9Br3Er2JR0kv/2bcErDzanZHCg3WF5n8AguOOv0H8WnDwEk7vBroVFcilNBMpvdKhbkYVPd6ZZdFnGfrqZV77ZWbz9Bo54KFEWKtUvvmsWs9kJSQx4by1hJYKYN7oTfdpE2x2S92vQ0ypcV74WzOoPO9w/51YTgfIrlcuU5ONh7Xi0fQ0mLdvPc59tJjO7mEpTOBIgug0E+N5/O2MM7yzdy/Ofb6Fj3YrMH9OJhlX8p0O8yJWvBY9/D93/BDFxbj+9D1V1UqpwggID+EfvplQOL8kbixJJP3uJdwe2LtoiZxczIHU7NPS9SWQ5OYa/f72D6asOcn/LqrzWp4V3rR3gLYJLQtei+fnRfy3ll0SEp2+P4ZUHm/FTYhoDpqwt2slnyRvB5Phc/8DFrGyenrWR6asOMqxzbd54uKUmAS+k/2LKr/VvW4MJj7ZhZ8pp+kxchePnc0VzIUe89VytTdGc3wYZFzJ5fHo8X29J4cW7G/KnXo09r6SHKhRNBMrv3dWkCh8+0Y7jGRd5aMIqdh0tgun9jgSoGAOhFdx/bhukZVyk3+Q1rNmfzut9WzC8a127Q1Iu0ESgFNC2dgU+G9kRgL4TV7N2/wn3ndwYa+iojzQLHTx+locmrGJ/2lneeyyWh3RkkNfTRKCUU4Mq4cwZ1ZGI8BIMmraOb7cddc+Jfz4I5477RKG5bUdO0WfiKjIuZPLxb9pxW4PKdoek3EATgVK5RJcP5fORHWkcVYYnZ65n5tpDrp/U4SyZ7uV3BCv2HOeRSaspERTI56M60qpGebtDUm6iiUCpa1QIC+Hj37SjW/0IXpq7jbcW73Ft4pljHQSHQUQj9wVZzOZvTmbo9HVElw9lzqiO1I3wgUXl1RWaCJTKQ2hIEJMHx/JQ62jeXJzIn+ZtIzvnJpOBIx6qtbZKBnih91ce4OlPNtKqRnlmj+xAlbJaPtrXuCURiEgPEdktIntF5IU8Ph8oIlucj1Ui0iLXZwdFZKuIbBIRXXZMeYzgwAD+27e5Vado7WFGz9zAhcwbXGg88zwc3eqVzULGGP797S7+9tUO7moSyQePt6VsKT9aTtKPuJwIRCQQeAfoCTQG+otI42t2OwB0M8Y0B/4BTL7m89uMMS3zWkJNKTuJCH/o0ZA/92rMt9uP8ti0dZw6n1n4EyRvgpwsr0sEWdk5PP/5Fib8uI8B7Wrw7sA2WjjOh7njjqAtsNcYs98YcwmYBfTOvYMxZpUx5vIyUWsAHW+mvMoTnWvzVr+WbDj8M49MWs2x04WsD395IpkXJYLzl7IZ8eF6Plvv4Nk7Yvi/+5sSqBPFfJo7EkE1ICnXe4dzW36eAL7J9d4A34vIehEZnt9BIjJcRBJEJCEtLc2lgJW6Gb1bVmPakFtISj/Hg++uYn/amYIPcsRbBcNKRxR5fO7w89lLDHxvDUt3p/LP+5vy7B31kSJaSF15Dnckgrx+SvLsVROR27ASwR9ybe5kjGmN1bQ0WkS65nWsMWayMSbWGBMbEeEd/6mU7+kSE8Gs4R24kJlNn4mr2ZR0Mv+djbESgZfcDSSfPE/fSavZlnyadwe25tH2Ne0OSRUTdyQCB1A91/toIPnanUSkOfAe0NsYc2XapjEm2fmcCszFampSymM1iy7L56M6ElYikAFT1rAsMZ871NNHICPFKxJB4rEMHnx3FcdOXeCDx9vSo2mU3SGpYuSORBAPxIhIbREJAfoBV62cICI1gC+AQcaYxFzbw0Qk/PJr4E5gmxtiUqpI1a4UxpxRHalVMYwnpsfnveKZl/QPJBxMp8+EVeQYw+yRHWhfp6LdIali5nIiMMZkAWOA74CdwGxjzHYRGSkiI527/QWoCLx7zTDRSGCFiGwG1gELjDHfuhqTUsWhcnhJPh3RnltqVWDsp5uZ8tP+q3dIioegkhDZ1J4AC2HRjmMMfG8tlUqXYM6ojjSK0sVk/JEU61J9bhIbG2sSEnTKgfIMF7Oy+e2nm1mwNYXfdKnNH3s2ssoxvxcHEgBPfGd3iHmate4wL87dSrPockx7LJaKpUvYHZIqYiKyPq9h+t451VEpD1IiKJBx/VtRsXQIU5Yf4PiZS7x2fwOCUzZDu3wHwtnGGMP4H/by+qJEutaPYMLA1oSV0F8F/kz/9ZVyg8AA4W/3NaFyeAn++30iZdO38Nfsix7XP5CdY/jbV9v5YPUhHmhVjdf6NCc4UCvN+DtNBEq5iYgwpnsMlUqXIHH+axAEP5dvgafU6LyYlc3YTzexcOtRhnetwws9GuqKYgrQonNKuV2/tjUYXjudZFORB2ceJCm9iJa/vAGnL2QyZFo8C7ce5aW7G/Hi3Y00CagrNBEoVQSqZGylZO12pJ+9xEMTVrEzpQiWvyyk1IwL9Ju0hviD6fzvkZb8pmsd22JRnkkTgVLulnEMTh6mQv1OfDayA4EBwsMTV7PGnctfFtIB57KSB0+cZeqQW7i/1fWqvyh/pYlAKXfLNZGsfqS1/GVk2ZIMnraOb7elFFsYWxwn6TNhFWcvZvPJb9rTrb6WZlF500SglLs54iEgGKKsZTeqlivF5yM70LRqGUbN3MBHa9yw/GUBlu9Jo9/kNZQKCeTzkR1oUb1ckV9TeS9NBEq5myMeoppD8C8reZULDWHmsPZ0b1CZP83bxpuLEl1b/vI6vtx0hMenx1OjQihfjOpIHV1WUhVAE4FS7pSdBUc25Dl/oFRIIJMGtaFvm2jeWrKHF+e6sPxlPqauOMAzszbR2rmsZOUyuqykKpjOI1DKnVK3Q9b5fCeSBQUG8Fqf5kSEl+DdH/eRfvYib/Vr5fLqX9aykruZuGwfPZtW4c1HWuqKYqrQ9I5AKXdKWmc9X2dGsYjwfI+GvHxvY77fcYzBU29w+ctrZGbn8LvPtjBx2T4ebV+D8QNaaxJQN0QTgVLu5EiAsMpQrkaBuw7tVJtx/VqxMcla/vLoqUIuf5nLuUtZDP8ggTkbHPw2rj7/6K3LSqobp4lAKXdyxEP1tlDI5R3vbVGV94e0JSn9HA9NWMXe1EIsf+mUfvYSA6asZVliGv96oBlP3x6jy0qqm6KJQCl3OXsC0vdB9K+q/F5X55hKfDqiAxezsuk7cRUbD/9c4DGOn8/RZ+IqdqScZsKjbRjQruA7EKXyo4lAKXc54lwj4yYqjjatVpY5ozoSXjKYAVPWsnR3ar777jp6mocmrCIt4yIfPt6Wu5pUudmIlQI0ESjlPo54kECo2uqmDq9Z0Vr+sk5EGMNmJDBn/a+Xv1x3IJ2+E1cD8NnIDrTTZSWVG7glEYhIDxHZLSJ7ReSFPD4XERnn/HyLiLQu7LFKeQ1HPEQ2gZCwmz5FRHgJZg1vT/s6FXjus81MWrbvysSz77Yf5dGpa4kIt5aVbFhFl5VU7uHyPAIRCQTeAeIABxAvIvONMTty7dYTiHE+2gETgHaFPNa9cnIgQG+ElJvlZINjPTR/2OVThZcMZtqQW3hu9mZe+WYXqRkXqRMRxp/nbaN5dDmmDbmFCmEhbghaKYs7JpS1BfYaY/YDiMgsoDeQ+5d5b+ADY321WSMi5UQkCqhViGPdJ34qJH4HfadDSGiRXEL5qbTdcCnDbSuSlQgKZFy/VlQqXYKpKw4AcFuDCN4Z2JrQEJ0HqtzLHT9R1YCkXO8dWN/6C9qnWiGPBUBEhgPDAWrUuMkREhIAexfBB/fBgNkQWuHmzqPUtS5XHK3e1m2nDAgQXr63MbUqhpJy6gK/u6uBLiupioQ7EkFeA5evLaCS3z6FOdbaaMxkYDJAbGzszRVoiR0KYZXg8ydg2l3w6BdQrvpNnUqpqzjWQanyUMG9i76ICEM61XbrOZW6lju+XjiA3L9No4HkQu5TmGPdq9G9MGiutXjI1Dg4VnTdEcqPOBKsZiGd0KW8kDsSQTwQIyK1RSQE6AfMv2af+cBg5+ih9sApY0xKIY91v1qd4PFvrNfv94BDq4r8ksqHnT8Jabsg2n3NQkoVJ5cTgTEmCxgDfAfsBGYbY7aLyEgRGencbSGwH9gLTAGevN6xrsZUKJFN4InvrbowHz4AuxYUy2WVDzqy3nq+wRnFSnkKKarFMYpSbGysSUhIcM/Jzp6Ajx+G5A3Q601oM8Q951X+48d/w4+vwAuHoaSO7VeeS0TWG2N+9Y1FhyCEVYTH5kPd2+GrZ2DZa+CFyVHZyBEPlRtpElBeSxMBWDNB+38CLfrD0v+Dhb+zJggpVZCcHCsRaLOQ8mI6M+WywGC4fwKUrgwr34KzafDA5KvWnVXqV9L3wYWTbptIppQdNBHkJgJxf4fSkfDdi3AuHfrNhJJl7Y5MearLE8l0xJDyYto0lJcOo+HBKXB4Nbx/D2QctTsi5amS1kGJMlCpvt2RKHXTNBHkp/nDVhmK9P3WxLMT++yOSHkiRwJUa6OFDJVX05/e66l3Owz5Ci6dtZLB5fHiSgFcPAOp291aX0gpO2giKEi1NvD499bIoun3wt7FdkekPEXyRjA52lGsvJ4mgsKoVA+eWGQVFPv4Edgy2+6IlCdwrLOeq7WxNw6lXKSJoLDCq8DQBVCjA3zxG1g13u6IlN0cCVCxnpYzV15PE8GNKFkWHp0DjXvD9y/B93+2JhQp/2OMcyKZ9g8o76eJ4EYFlYA+78Mtv4FV42DeKMjOtDsqVdx+PmhNOtQZxcoH6ISymxEQCHf/x5p4tvSfcO4EPDzDpUXLlZdxOIseakex8gF6R3CzRKDb7+HecbBvCcy416pkqvyDIx6Cw6ByY7sjUcplmghc1eYxeOQjOLbdWv7y5GG7I1LFwbEOqrWGQL2pVt5PE4E7NLwHBs2Ds6kw9U4rKSjflXkejm7V/gHlMzQRuEvNDjD0W0BgWk84uNLuiFRRSdkMOVk6Ykj5DJcSgYhUEJFFIrLH+Vw+j32qi8hSEdkpIttF5Jlcn/1VRI6IyCbn425X4rFdZGNr+cvwSGv5y51f2R2RKgpJzolkekegfISrdwQvAEuMMTHAEuf7a2UBzxljGgHtgdEikruH7U1jTEvnY6GL8divXHV4/DuIag6zB0PCNLsjUu7miIdyNa21K5TyAa4mgt7ADOfrGcD91+5gjEkxxmxwvs7AWqS+movX9WyhFWDwl1AvDr4eCz++qstf+hJHghaaUz7F1UQQaYxJAesXPnDdr0giUgtoBazNtXmMiGwRkWl5NS3lOna4iCSISEJaWpqLYReDkDBrUZuWA62Fzb8eq8tf+oJTDshI1vkDyqcUmAhEZLGIbMvj0ftGLiQipYE5wLPGmNPOzROAukBLIAV4Pb/jjTGTjTGxxpjYiIiIG7m0fQKDofc70Pm3sP59+OwxyLxgd1TKFVdWJNP+AeU7ChwEbYy5I7/PROSYiEQZY1JEJApIzWe/YKwkMNMY80Wucx/Ltc8U4OsbCd4riMAdL1vtyd++AB89CP0+hlLl7I5M3QxHAgSVhMhmdkeilNu42jQ0H3jM+fox4MtrdxARAaYCO40xb1zzWVSutw8A21yMx3O1HwUPTbVGnLx/N5xOsTsidTMc8RDVEoJC7I5EKbdxNRG8CsSJyB4gzvkeEakqIpdHAHUCBgHd8xgm+pqIbBWRLcBtwFgX4/FszfrAwM/g5CFr4tnxPXZHpG5E1iVI3qTNQsrnuDQ/3hhzArg9j+3JwN3O1ysAyef4Qa5c3yvVvQ2GfA0z+1rJYODnEK0Lm3iFo1sh+6J2FCufozOL7VC1lTXXoGQZmNEL9ujyl17hckexDh1VPkYTgV0q1rXWQq5YFz55BDbPsjsiVRDHOihTDcpUtTsSpdxKE4GdwiNhyEKo2RHmjoCV4+yOSF2PI177B5RP0kRgt5JlrH6CJg/Aoj/Ddy/p8peeKOOYVWJcC80pH6TF1D1BUAl4aBqERcDq8XAm1ZqIpkMUPceViWTaUax8jyYCTxEQAD1fs5a//OEfcO44PPwhlChtd2QKrEQQEAxRLeyORCm306YhTyICXX8H970N+3+0lr88k+dkbVXcHAlWRdngknZHopTbaSLwRK0HW2UoUnfCpK5waLXdEfm37CxI3qDNQspnaSLwVA16wrBFEFwKpt8Dq97WUtZ2Sd0Omec0ESifpYnAk1VpBsN/hIZ3w/d/gk8fhQun7I7K/2jFUeXjNBF4upJlrU7ju/4Fid/CpG6QssXuqPxLUjyEVbZWJVPKB2ki8AYi0GE0DFkAWRdgahxs+NDuqPyHI95qFpI8S2Yp5fU0EXiTGu1hxHKo3g7mj4F5o+HSObuj8m3n0iF9nzYLKZ+micDblI6AQXOh6/Ow6SPr7uDEPruj8l2OBOtZC80pH6aJwBsFBEL3l6zSFKePwORbYcd8u6PyTY51IAFWxVilfJQmAm8WE2c1FVWKgdmDrDpF2Zl2R+VbHPEQ2QRCwuyORKki41IiEJEKIrJIRPY4n8vns99B50pkm0Qk4UaPV9dRrjoM/QbaDrfqFE3vBaeT7Y7KN+Rkg2O9FppTPs/VO4IXgCXGmBhgifN9fm4zxrQ0xuTudbuR41V+gkrA3f+x1kQ+uhUmdrFKVCjXpO2GSxk6kUz5PFcTQW9ghvP1DOD+Yj5e5dasDwxfCmGV4MMH4Kf/aElrV2jFUeUnXE0EkcaYFADnc+V89jPA9yKyXkSG38TxiMhwEUkQkYS0tDQXw/ZhEQ1g2BJo+hD88E/4+GFrCKS6cY54KFXeWkVOKR9WYCIQkcUisi2PR+8buE4nY0xroCcwWkS63migxpjJxphYY0xsRETEjR7uX0qUhgenwD2vw4FlVuE6x3q7o/I+OpFM+YkCE4Ex5g5jTNM8Hl8Cx0QkCsD5nGfNZGNMsvM5FZgLXO59K9Tx6iaIwC3D4PFvAYFpd8G6KVq4rrDOn4S0XdospPyCq01D84HHnK8fA768dgcRCROR8MuvgTuBbYU9XrmoWhsYsQzqdoeFv4M5w+DiGbuj8nzJG6xnnVGs/ICrieBVIE5E9gBxzveISFURWejcJxJYISKbgXXAAmPMt9c7XrlZaAXoPwtu/wts/wKmdIfUXXZH5dmS4gGxEqlSPk6MFzYVxMbGmoSEhIJ3VL+2fxnMeQIunYV7x0HzvnZH5Jk+6gOnHDB6jd2RKOU2IrL+miH8gM4s9j91ulmzkaNawBfDYMFzkHXR7qg8izHOjmJtFlL+QROBPyoTBY99BR2fhvj3rI7knw/ZHZXnOLEXLpzUQnPKb2gi8FeBwXDnP+CRmVb10kldIfE7u6PyDDqRTPkZTQT+rlEva1RRuerW5LMl/7Bq7PgzRzyUKAOVGtgdiVLFQhOBggp14IlF0HowLP8vfHg/nPHjKR2OeGu0UID+91D+QX/SlSW4FNz3NvR+F5LWWYXrDq2yO6rid/EMHNuuzULKr2giUFdrNdCqVRQSapW0XvW2f81GTt4IJkcTgfIrmgjUr1VpCsN/hIb3wPd/gk8fhQun7I6qeFzpKNaho8p/aCJQeStZFh7+AO76FyR+C5O6QcoWu6Mqeo54qFjPmo2tlJ/QRKDyJwIdRsOQBZB1AabGwYYP7Y6q6FyZSKbNQsq/aCJQBavR3pqNXL0dzB8D80bDpXN2R+V+Jw/B2TRtFlJ+RxOBKpzSETBoLnR9HjZ9ZN0dnNhnd1TulXS5f0BnFCv/oolAFV5AIHR/CQZ+DqePwORbYcd8u6NyH0c8BIdC5cZ2R6JUsdJEoG5cTJzVVFQpBmYPgu9eguxMu6NynSMeqraGwCC7I1GqWGkiUDenXHUY+g20HQ6rx1tzDk4n2x3Vzcs8D0e3QHXtKFb+RxOBunlBJeDu/8BDU+HoVninHSx9xTvnHKRshpwsHTGk/JImAuW6Zn1gxE/WWgfLXoX/NYflr3vXkphacVT5MZcSgYhUEJFFIrLH+Vw+j30aiMimXI/TIvKs87O/isiRXJ/d7Uo8ykaV6sEjH8HwZdYw0yV/h7daWCUqvGGoadI6KFcTSle2OxKlip2rdwQvAEuMMTHAEuf7qxhjdhtjWhpjWgJtgHPA3Fy7vHn5c2PMwmuPV16maksYOBueWAxVmlklKsa1hLWTPHslNEeC3g0ov+VqIugNzHC+ngHcX8D+twP7jDG6HJavq34LDJ5ndShXjIFvnodxrSBhGmRdsju6q506AhnJmgiU33I1EUQaY1IAnM8F3Vf3Az65ZtsYEdkiItPyalq6TESGi0iCiCSkpaW5FrUqPjU7wpCvYfCXUKYafD0WxreBjTMhO8vu6CyX+wd0xJDyUwUmAhFZLCLb8nj0vpELiUgIcB/wWa7NE4C6QEsgBXg9v+ONMZONMbHGmNiIiIgbubSymwjUuRWe+B4GfAalKsCXT8K77WDLZ/aviOaIh8ASENnM3jiUskmBM2eMMXfk95mIHBORKGNMiohEAddb1qonsMEYcyzXua+8FpEpwNeFC1t5JRGof6c1IW3XAlj6L/himLUq2q1/hEb32bMqmCPe6tsICin+ayvlAVz9XzcfeMz5+jHgy+vs259rmoWcyeOyB4BtLsajvIGItVbyyBXQ531rIZjPHoNJXWHXwuJdCCfrEiRv0v4B5ddcTQSvAnEisgeIc75HRKqKyJURQCIS6vz8i2uOf01EtorIFuA2YKyL8ShvEhAATR+EJ9fAA5Mh8yzM6g9TusOexcWTEI5uheyLmgiUX3OpqIox5gTWSKBrtycDd+d6fw6omMd+g1y5vvIRAYHQ4hFo+hBs/gSWvQYzH4Lq7a0id7W7Ft21dSKZUjqzWHmQwCBoPQieWg/3vAEnD8OMe606RofXFM01HfEQXhXKViua8yvlBTQRKM8TFAK3PAFPb4Qer0Labph2F3z4IBxZ795rOdbpsFHl9zQRKM8VXBLaj4JnNkHc3yF5o9V/8HE/96yfnHHMuuvQZiHl5zQRKM8XEgadnoFnt0D3P8HhVTCpC8weDKk7b/68RxKsZ00Eys9pIlDeo0Q4dP09PLPFWjJz7w/wbgeYMwyO773x8yWtg4BgiGrh/liV8iKaCJT3KVXOGk307BbrTmHXAninLcx7En4+WPjzOBKswnjBpYoqUqW8giYC5b1CK0Dc3+CZzdBuJGz9HN5uA189A6cc1z82OwuSN2izkFJoIlC+oHRl6PEvKyG0GWoVtBvXChY+DxlH8z4mdTtknoPqbYs3VqU8kCYC5TvKRME9/4WnN0CLfhD/nrU4zncvwdnjV+97ZSJZbPHHqZSH0USgfE+5GnDf2/BUAjR5ANa8ay2fufhvcC7d2seRAGER1qpkSvk5TQTKd1WoAw9MhCfXQoMesOJN6w5h6StweLXVPyBid5RK2U4TgfJ9EfWhzzQYtQrqdINlr1qji7SjWCnAxaJzSnmVyMbwyEeQshk2fQwt+tsdkVIeQROB8j9RLXQSmVK5aNOQUkr5OU0ESinl5zQRKKWUn3MpEYhIXxHZLiI5IpLvzBwR6SEiu0Vkr4i8kGt7BRFZJCJ7nM/lXYlHKaXUjXP1jmAb8CDwU347iEgg8A7QE2gM9BeRxs6PXwCWGGNigCXO90oppYqRS4nAGLPTGLO7gN3aAnuNMfuNMZeAWUBv52e9gRnO1zOA+12JRyml1I0rjj6CakBSrvcO5zaASGNMCoDzuXJ+JxGR4SKSICIJaWlpRRasUkr5mwLnEYjIYqBKHh+9ZIz5shDXyGsOvynEcVcfYMxkYDJAbGzsDR+vlFIqbwUmAmPMHS5ewwFUz/U+Gkh2vj4mIlHGmBQRiQJSC3PC9evXHxeRQzcZTyXgeIF7eQ5vitebYgXvitebYgXvitebYgXX4s2zymJxzCyOB2JEpDZwBOgHDHB+Nh94DHjV+VyYOwyMMRE3G4yIJBhjvKb2sDfF602xgnfF602xgnfF602xQtHE6+rw0QdExAF0ABaIyHfO7VVFZCGAMSYLGAN8B+wEZhtjtjtP8SoQJyJ7gDjne6WUUsXIpTsCY8xcYG4e25OBu3O9XwgszGO/E8DtrsSglFLKNf44s3iy3QHcIG+K15tiBe+K15tiBe+K15tihSKIV4zRAThKKeXP/PGOQCmlVC6aCJRSys/5VSLIr/idJxKRaSKSKiLb7I6lICJSXUSWishOZxHCZ+yOKT8iUlJE1onIZmesf7M7poKISKCIbBSRr+2OpSAiclBEtorIJhFJsDuegohIORH5XER2OX9+O9gdU15EpIHz7/Ty47SIPOu28/tLH4Gz+F0i1jBVB9b8hv7GmB22BpYPEekKnAE+MMY0tTue63FOBowyxmwQkXBgPXC/J/7diogAYcaYMyISDKwAnjHGrLE5tHyJyG+BWKCMMaaX3fFcj4gcBGKNMV4xQUtEZgDLjTHviUgIEGqMOWlzWNfl/F12BGhnjLnZibVX8ac7gusVv/M4xpifgHS74ygMY0yKMWaD83UG1nyRatc/yh7Gcsb5Ntj58NhvQyISDdwDvGd3LL5GRMoAXYGpAMaYS56eBJxuB/a5KwmAfyWC6xW/U24iIrWAVsBam0PJl7OpZRNWSZNFxhiPjRX4H/A8kGNzHIVlgO9FZL2IDLc7mALUAdKA951Nb++JSJjdQRVCP+ATd57QnxKBW4rfqfyJSGlgDvCsMea03fHkxxiTbYxpiVX3qq2IeGTTm4j0AlKNMevtjuUGdDLGtMZaf2S0s4nTUwUBrYEJxphWwFk8fE0UZ/PVfcBn7jyvPyWC6xW/Uy5ytrfPAWYaY76wO57CcDYD/Aj0sDeSfHUC7nO2u88CuovIR/aGdH3OqgIYY1Kxqg60tTei63IAjlx3hJ9jJQZP1hPYYIw55s6T+lMiuFL8zplV+2EVvVMucnbATgV2GmPesDue6xGRCBEp53xdCrgD2GVrUPkwxvzRGBNtjKmF9fP6gzHmUZvDypeIhDkHC+BsYrkTaxVDj2SMOQokiUgD56bbAY8b4HCN/ri5WQiKp/qoRzDGZInI5eJ3gcC0XMXvPI6IfALcClRyFvZ72Rgz1d6o8tUJGARsdba9A7zorDHlaaKAGc6RFwFYRRA9fliml4gE5lrfCwgCPjbGfGtvSAV6Cpjp/HK4Hxhqczz5EpFQrFGPI9x+bn8ZPqqUUipv/tQ0pJRSKg+aCJRSys9pIlBKKT+niUAppfycJgKllPJzmgiUUsrPaSJQSik/9/+VTDsZCat6uQAAAABJRU5ErkJggg==\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "shiftet= fftshift(f_tabs)\n",
- "plt.plot(shiftet.real)\n",
- "plt.plot(shiftet.imag)\n",
- "plt.show()"
+ "# Create the FIR\n",
+ "D = 3 # Delay value\n",
+ "h = [0]*D+[1]\n",
+ "h"
]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 21,
+ "id": "892c62dd",
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA8jUlEQVR4nO3dd3hUZfbA8e9JIwRCJkBoSYbe60REBQsKKmABBft2FdF1Lauylv3Zy1rWdV0Lsuqqu7o2UFAQFFSKiBJ67y3UUBIIBNLe3x/v4MaQPndqzud5eEwmN/ceI57cOfc95xVjDEoppSJfVLADUEopFRia8JVSqo7QhK+UUnWEJnyllKojNOErpVQdERPsACrTtGlT06ZNm2CHoZRSYWPhwoX7jDEp5X0tpBN+mzZtyMzMDHYYSikVNkRka0Vf05KOUkrVEZrwlVKqjtCEr5RSdYQmfKWUqiM04SulVB2hCV8ppeoITfhKKVVHhPQ6/Np6ceZ6iopLgh1GtaU3TuCKvunBDkMpFeEiMuGPm7WR/MLiYIdRLSe2Izi7UwrNG8UHNxilVESLyIS/6tEhwQ6h2hZtO8jlr8xj8bYchvRoEexwlFIRTGv4Qda9VSPioqNYvO1gsENRSkU4TfhBVi8mmu6pjVi8LSfYoSilIpwjCV9EhojIWhHZICL3VnDMQBFZIiIrRWSWE9eNFJ70ZJbtyKEwjB40K6XCj88JX0SigZeBoUA34BoR6VbmGBfwCnCpMaY7cIWv140kHreLY4UlrNl1ONihKKUimBN3+P2ADcaYTcaYAuB9YHiZY64FJhpjtgEYY/Y6cN2I4XG7AFi8Xev4Sin/cSLhpwLbS32e5X2ttE5Asoh8KyILReRXFZ1MREaLSKaIZGZnZzsQXuhLddWnWWI9reMrpfzKiYQv5bxmynweA5wCXARcCPyfiHQq72TGmPHGmL7GmL4pKeVu2hJxRASP28UiXamjlPIjJxJ+FlC6TTQN2FnOMdOMMUeMMfuA2UBvB64dMTzuZLbuP8r+vOPBDkUpFaGcSPgLgI4i0lZE4oCrgclljpkEnCUiMSKSAJwGrHbg2hEjw50MwJLtOcENRCkVsXxO+MaYIuBWYDo2iX9ojFkpImNEZIz3mNXANGAZ8CPwujFmha/XjiQ9U5OIjhIt6yil/MaR0QrGmKnA1DKvjSvz+bPAs05cLxLVj4uma8tEfXCrlPIb7bQNIRnuZJZuz6G4pOwzb6WU8p0m/BDicbs4UlDM+r3agKWUcp4m/BDiSbcPbhdtzQluIEqpiKQJP4S0bpJA4wZxOjlTKeUXmvBDiIjgSXexWJdmKqX8QBN+iPG4XWzYm0fu0cJgh6KUijCa8EPMTw1YWTnBDUQpFXE04YeYXukuRNA6vlLKcZrwQ0zDejF0bp7IIm3AUko5TBN+CPK4XSzZdpASbcBSSjlIE34I8riTOXSsiE37jgQ7FKVUBNGEH4IyvDtg6SA1pZSTNOGHoHZNG9IoPkYHqSmlHKUJPwRFRQl93Mm6Ukcp5ShN+CHKk+5i3Z7D5B0vCnYoSqkI4UjCF5EhIrJWRDaIyL3lfH2giOSKyBLvnweduG4k87hdlBhYpmMWlFIO8XkDFBGJBl4GzsfuXbtARCYbY1aVOXSOMeZiX69XV5yYnLl4ew79OzQNcjRKqUjgxB1+P2CDMWaTMaYAeB8Y7sB567SkhFjapzTQOr5SyjFOJPxUYHupz7O8r5V1hogsFZEvRKR7RScTkdEikikimdnZ2Q6EF7487mQWbcvBGG3AUkr5zomEL+W8VjZDLQJaG2N6A/8APq3oZMaY8caYvsaYvikpKQ6EF74y3MkcOFLAtgNHgx2KUioCOJHws4D0Up+nATtLH2CMOWSMyfN+PBWIFREtTFfB423A0vX4SiknOJHwFwAdRaStiMQBVwOTSx8gIi1ERLwf9/Ned78D145onZonkhAXrR23SilH+LxKxxhTJCK3AtOBaOBNY8xKERnj/fo4YBRws4gUAfnA1UYL01WKjhJ6p7n0Dl8p5QifEz78VKaZWua1caU+fgl4yYlr1TUZrV28NmsT+QXF1I+LDnY4Sqkwpp22Ic6TnkxRiWH5jtxgh6KUCnOa8ENcn58e3GodXynlG034Ia5pw3q0bpKgdXyllM804YcBT7qLRdsOagOWUsonmvDDgMedzN7Dx9mZeyzYoSilwpgm/DCQ4fYOUtM6vlLKB5rww0CXlonUi4nSOr5Syiea8MNAbHQUvdKStONWKeUTTfhhIsOdzModhzheVBzsUJRSYUoTfpjwuF0UFJewauehYIeilApTmvDDhMf74HaR1vGVUrWkCT9MNG8UT6qrvq7UUUrVmib8MNLHrZMzlVK1pwk/jHjSXezIyWfvIW3AUkrVnCb8MKJ1fKWULxxJ+CIyRETWisgGEbm3kuNOFZFiERnlxHXrmh6pjYiLjmLxdq3jK6VqzueELyLRwMvAUKAbcI2IdKvguKexO2OpWqgXE023Vo20jq+UqhUn7vD7ARuMMZuMMQXA+8Dwco77AzAB2OvANessj9vFsqwcCotLgh2KUirMOJHwU4HtpT7P8r72ExFJBS4DxqF8kuFO5lhhCWt3Hw52KEqpMONEwpdyXis7uP0F4E/GmCrnAojIaBHJFJHM7OxsB8KLLB7dAUspVUtOJPwsIL3U52nAzjLH9AXeF5EtwCjgFREZUd7JjDHjjTF9jTF9U1JSHAgvsqS66pOSWE9X6iilaizGgXMsADqKSFtgB3A1cG3pA4wxbU98LCJvAZ8bYz514Np1joiQ4XbpHb5SqsZ8vsM3xhQBt2JX36wGPjTGrBSRMSIyxtfzq5N53Mls2X+UA0cKgh2KUiqMOHGHjzFmKjC1zGvlPqA1xvzGiWvWZZ50F2Dr+IO6Ng9uMEqpsKGdtmGoV5qL6CjR9fhKqRrRhB+G6sdF07VlonbcKqVqRBN+mPKkJ7N0ey7FJWVXwCqlVPk04Ycpj9tF3vEi1u/VBiylVPVowg9TGd7JmVrHV0pVlyb8MNW6SQLJCbG6Hl8pVW2a8MOUiOBxJ2vHrVKq2jThh7EMt4sNe/PIzS8MdihKqTCgCT+MndgBa+n2nOAGopQKC5rww1ivtCREYJHW8ZVS1aAJP4wlxsfSuXmirtRRSlWLJvww53G7WLI9hxJtwFJKVUETfpjzpCeTm1/Ipn1Hgh2KUirEacIPcxmtXYDugKWUqpom/DDXrmlDEuNjWKwrdZRSVdCEH+aiooQ+6S59cKuUqpIjCV9EhojIWhHZICL3lvP14SKyTESWeDcoP9OJ6yorw53M2t2HyDteFOxQlFIhzOeELyLRwMvAUKAbcI2IdCtz2EygtzGmD/A74HVfr6v+x+N2UWJgWVZOsENRSoUwJ+7w+wEbjDGbjDEFwPvA8NIHGGPyjDEn1g02AHQNoYP6/LTlYU5Q41BKhTYnEn4qsL3U51ne135GRC4TkTXAFOxdfrlEZLS37JOZnZ3tQHiRz5UQR7uUBrpSRylVKScSvpTz2kl38MaYT4wxXYARwGMVncwYM94Y09cY0zclJcWB8OqGDHcyi7fl8L83Ukop9XNOJPwsIL3U52nAzooONsbMBtqLSFMHrq28PG4X+48UsP1AfrBDUUqFKCcS/gKgo4i0FZE44GpgcukDRKSDiIj34wwgDtjvwLWVlyfdTs7UQWpKqYr4nPCNMUXArcB0YDXwoTFmpYiMEZEx3sNGAitEZAl2Rc9VRmsPjurcIpGEuGit4yulKhTjxEmMMVOBqWVeG1fq46eBp524lipfdJTQO82lHbdKqQppp20E8bhdrNp5iGOFxcEORSkVgjThR5AMdzJFJYblO3KDHYpSKgRpwo8gfdwuQCdnKqXKpwk/gjRtWA934wTtuFVKlUsTfoTJcLtYtO2gNmAppU6iCT/CeNzJ7Dl0nF25x4IdilIqxGjCjzCen+r4OUGNQykVejThR5iuLRtRLyZKO26VUifRhB9hYqOj6JWWpCt1lFIn0YQfgTzuZFbsPMTxIm3AUkr9jyb8CORJd1FQVMKqnYeCHYpSKoRowo9AGa3t5Ex9cKuUKk0TfgRq3iieVknxOkhNKfUzmvAjlMedzKKt+uBWKfU/mvAjlMftYkdOPnsPaQOWUspyJOGLyBARWSsiG0Tk3nK+fp2ILPP+mScivZ24rqqYx+2t42tZRynl5XPCF5Fo7C5WQ4FuwDUi0q3MYZuBc4wxvbAbmI/39bqqct1bNSI2WvTBrVLqJ07c4fcDNhhjNhljCoD3geGlDzDGzDPGnCgoz8dudK78KD42mu6tkrTjVin1EycSfiqwvdTnWd7XKnI98EVFXxSR0SKSKSKZ2dnZDoRXd3ncLpZl5VBUXBLsUJRSIcCJhC/lvFbubF4ROReb8P9U0cmMMeONMX2NMX1TUlIcCK/u8riTOVZYwprdh4MdilIqBDiR8LOA9FKfpwE7yx4kIr2A14Hhxpj9DlxXVSFDd8BSSpXiRMJfAHQUkbYiEgdcDUwufYCIuIGJwC+NMescuKaqhlRXfVIS6+mDW6UUADG+nsAYUyQitwLTgWjgTWPMShEZ4/36OOBBoAnwiogAFBlj+vp6bVU5EcGT7tKlmUopwIGED2CMmQpMLfPauFIf3wDc4MS1VM143Ml8uWoPB44U0LhBXLDDUUoFkXbaRrgTdfwl27WOr1Rdpwk/wvVMSyI6ShuwlFKa8CNeQlwMXVokagOWUkoTfl2Q4U5m6fZcikvKbY9QStURmvDrAI/bRd7xIjbszQt2KEqpINKEXwf8NDlTyzpK1Wma8OuANk0SSE6I1Tq+UnWcJvw6QETwuJN1pY5SdZwm/DrCk+5i/d48cvMLgx2KUipINOHXERmtbR1/qY5ZUKrO0oRfR/RKS0IELesoVYdFXsIvKYF5L8GupcGOJKQkxsfSqVkii30dsbD6czh00vRr5StjYNUkOLwn2JFEHmNgxUQ4si/YkQRd5CX847nw/Usw4QYoOBLsaEJKRmsXi7flUFLbBqwVE+CD6+DdK6HwmLPB1XVL3oMPfwXvXwPF+pzFUQteh49/a3++JcXBjiaoIi/h10+Gy8bBvvUw/f5gRxNSPOnJ5OYXsnl/LX4R5myDz+6E5DawZznMfMTx+Oqs/Rth6j32Z7tjIXz7VLAjihx7VsGXf7Y/263fwdzngx1RUEVewgdoNxAG3A4L34LVnwU7mpDh+WkHrJyafWNxEUwcDaYEfvkp9BsN81+B9TOcDrHuKSqACddDdCz8Zip4fgFznofNc4IdWfgrPGZ/tvUS4fqvoMdI+OYp2L4g2JEFjSMJX0SGiMhaEdkgIveW8/UuIvK9iBwXkbuduGaVzn0AWvaByX+A3B0BuWSoa5/SkMT4mJo3YM19HrZ9Dxf9FRq3hfMfhWbd4NMxkLfXP8HWFd8+CTsXw6UvQlIqDHkaGreDT26CoweCHV14m/EQ7F0Fw1+Bhs3gouehUSpMvAGOHQp2dEHhc8IXkWjgZWAo0A24RkS6lTnsAHAb8Jyv16u2mDgY+Ya9g/rkpjpfuwOIihL6pLtqdoe/7Qf49i/Q80rofZV9Lba+/dkeOwSf3mIfiqma2zQL5r4AGb+GbsPta/Uawqg37C/Sz27Tn21trZsOP4yD026GThfY1+q7YOQ/bXly6j1BDS9YnLjD7wdsMMZsMsYUAO8Dw0sfYIzZa4xZAAT2aVTTDjDsGdgyB777e0AvHao87mTW7j7EkeNFVR98LNfeDSWlwkVlflc37wYXPA4bvoIfXvNPsJHs6AF7I9KkAwwpU7Nv5YHz/mzLkYveCU584ezwHnsj0rwHDH74519znw5nj4Vl78Oyj4ISXjA5kfBTge2lPs/yvlYrIjJaRDJFJDM7O9vn4OhzHXQbAd88YR+I1XEet4sSA8uycqs+eMrdthw28g2ITzr56/1uhI4XwlcPwu4VzgcbqYyxpcYj+2Dk6xDX4ORj+t8Gbc+GaffaBQiqekpKYNItUJBnf7ax8Scfc/Y9kH4aTPkjHNwS8BCDyYmEL+W8Vuv3ocaY8caYvsaYvikpKT6E5SUCl7wADVvYpZrHD/t+zjDmSXcBVF3HX/oBLP8QBt4L6f3KP0YERrxi3ypPuB4K8x2NNWItfAvWfA6DH4JWfco/JioKLnsNYuLh499B0fFARhi+fhgHG2bAhU9As67lHxMdA5f/03484Ua7KKGOcCLhZwHppT5PA0KrM6d+sq3dHdwCX/wp2NEElSshjnYpDSqv4x/YDFPuAvcZcNZdlZ+wQVMY8Spkr7HL31TlstfCtPug3blw+u8rP7ZRKxj+EuxeBl8/Fpj4wtmuZfZBbedh0Pf6yo9Nbg0X/w2yfoTZzwQmvhDgRMJfAHQUkbYiEgdcDUx24LzOat3fJq8l79oGojrMk57Mku0HMeU9ECwutO+EJAouHw9R0VWfsMMgOONW2+Cy9gvnA66lvYeP8dWqPbVvNHNa0XH7TiguwfaKRFXjf78uF0Hf38G8f8DGb/wfY7gqOGr/3tZvDJe+ZN99ehUWl/DF8l0nDw7sOQp6XwOzn4Wt3wc44ODwOeEbY4qAW4HpwGrgQ2PMShEZIyJjAESkhYhkAX8E/iwiWSLSyNdr19g5f4K0U20DUc62gF8+VGS0drEvr4DtB8opwcx6GnZk2jKYy139kw56EFr0tA/LDu1yLNbaKi4x3PTvhdz4TiaXvzqPFTuq8czC32Y+CruXw/CXIbFF9b/vgiegaWf4ZIyOB6jIlw/AvrX2F2mDJj+9/MOm/Vz04hxufncRd3249OSbnGHP2r/nE2+E/JzAxhwEjqzDN8ZMNcZ0Msa0N8Y84X1tnDFmnPfj3caYNGNMI2OMy/tx4BfCRsfa2p0psY1Edah2V5on3bsDVtm5Olvmwuzn7IPuHpfX7KQx9WDkm7aO/+kY+/AsiP713WYWb8vhF6e7yTp4lEtfmsuDk1aQezRIYws2zLAjP069AToPrdn3xiXYpZr5B2DSrbpUs6zVn0Pmm9D/D9D+XMC+u7vzgyVcNX4+R44XM+qUNGas3sPkpWWqzfUS7aKEQzvh8zsj/mcbmZ22lWnc1jYQbfu+zrZZd2rekIS46J/X8fMP2l+CjdvC0Kdrd+KUTnaJ4aZvbXILkk3ZeTw7fS2DuzbnseE9mHnXQH55emv+M38r5/31Wz5emFV+Octf8rLhk5shpYtdylobLXrC4Edg3Re2dKasQzth8q3Qsjec9yBFxSW89d1mBj03iynLdnHruR2Y8cdzeHpkLzLcLh6avJK9h8vMgUrrC+feDysnwtL/BuffI0DqXsIH20DU80rbULTth2BHE3Ax0VH0TnP9b6WOMfDZ7ZC3xy5lq5dY+5Of8hvocrEtX+xc4kS4NVJcYhj78TLqxUTx5GU9EBGS6sfyyPAeTL71TNxNErj7o6Vc+dr3rN4VgDeZxsCk39uehpFv2Ka12jptDHQYbB+O713tXIzhqqTE9jIUHYeRb7BwxxEufek7Hv5sFX3cLqbdcRZ3X9iZ+nHRREcJz4zqzdGCYv78yYqTf+GfeSe0PtMuRd6/MTj/PgFQNxM+2EaipDRvm3UI1HcDzON2sWrnIY4VFsPi/9jRvOc+AKmn+HZiEbj0H9AgxT6gDPDE0rfmbSFz60EevrQ7zRr9fA12j9QkJozpz9Mje7Jhbx4X/2Muj362isPH/Fjm+fGfsH66HUfRoodv54qKsiui4hrCx9frxNJ5L8Lm2eSd+zhjvz3KyFfnceBIAa9cl8E7v+tHu5SGPzu8Q7OG3HV+J75ctYfPlpV5zhQVDZe/Zsu+E26I2ImldTfhxyfZu9ncHXYJYh3jcSdTVGJYv2oxfDEW2pxlB845IaGxfXi2f6NtHAqQLfuO8Oz0NZzXpRmXecrv/YuKEq461c03dw/kqlPT+de8zZz311lMWrLD+TLPnpX2brzD+XDaTc6cs2Ezm/T3rrRLEOuqHYswXz/G1uaDGfBlGhMX7eCmc9ox865zGNazJSLltQfBDWe1o3e6i4cmrWBfXpnehqQ0uOTvsHMRfPNkAP4lAq/uJnywDUUD74XlH9lGozrE43YRSxEtZtxqH7he9lr1lmBWV7tz4Mw77GiAVZOcO28FSrylnNjoKJ68rGeF/8Of4EqI48nLevLpLQNomRTP7e8v4dp//sD6PQ415hXm2zvF+CSboKuIp0Y6XWDLOz+Mg3VfOnfecHE8j+Mf/I59uLh065V0bdWIL24/i/uGdqVBvZhKvzU6SnhuVC+OHC/mwUnldId3HwEZv4K5f4PNs/0TfxDV7YQPdm2+u7+9yz+wKdjRBEzThvV4pOEnpBxebUswSbWehlGxgffbuTCTb4PcLOfPX8o732/hxy0HePDibrRIKqedvgK90118cssAHh/Rg1W7DjH073N4aurq6s0aqsxXD9pJjSNehYYOdIyXNfgRaNbdjhGoQxNLc44WkPnaaGJzt/BnuY1Hrz6T/954Oh2bV/+5U8fmidxxfkemLt/NlLKlHYAhf4Em7WFi5E0s1YQfFW0bjCTK22YdmbW7k2z6lmuLPuGTqPOh6yX+ucaJiaXFhfZ/Hj9NLN22/yhPT1vLwM4pjDolrcbfHx0l/OL01nx91zlcnpHKa7M3Mfj5WUxdvqt2ZZ610+DH8XD6LdBxcM2/vzpi421J8vhh+PTmoC+D9beSEsMHC7bxxLNP0ffAFL5r+Sueu+cWhvdJrfLdXHlGn9WOXmlJPDhpBfvLlnbiGti/t0ey7cyjCFqqqQkfwJVuG412ZNrGo0h3ZD98MoacBm25/+g17Mr14wycJu1tc8vWufDdC46fvqTEMHbCUmKipFqlnMo0aViPZ0b1ZsLNZ+BKiOOWdxfxqzd/ZFN2XvVPcni3vetu3vPkSY1O+2li6Qz4MXInlq7cmcuocfP4+4RveIjx5Dfrw1k3/pXE+NhanzMmOopnR/Xm0LFCHpq88uQDWvWxzYRrPodFb9c++BCjCf+EHpdDn1/YxqMtc4Mdjf+cmNR4dD97z3+JfOJZtDXHv9fscy10vxy+fgKyMh099bs/bGX+pgP8+eKutHL5sOSxlFNaN+azWwfw8CXdWLIthyEvzOG56WvJL6jiHUpJib3bLjhq775j6jkST6VOvQE6DfVOLF3u/+sFUG5+IQ9PXskl/5jL9n2HmdTqbRrEQv2r/2VX0/ioc4tEbh/Ukc+X7WLainJKO2fcanfP++JeyF7n8/VCgSb80oY+bRuPJo62jUiRKPNNWDsFBj1Emx79qRcTxeKa7oBVUyJ2UFWjVnappkMTS7cfOMpTX6zhrI5NubJvetXfUAMx0VH8ZkBbZt59Dhf3aslL32xg8POz+HLl7orLPPNfgY1feyc1dnE0ngqJ2AFr9ZPtUs2Co4G5rh8ZY5i4KItBf53FO99v4Rent2bOgCWkHFiIDHvO7gjmkJvOaU/3Vo3486crOHik4OdfjIqCEeNs78SEyJhYqgm/tHoN7Z1Z3h7biBRBtTsA9q6B6Q9A+/Pg9FuIi4miZ2oSi7fn+P/a9V32WUnONpg61ufTGWP404RlRInwl5G9fCrlVKZZYjzPX9WHD0afToN60Yz+90KufzuTbfvLJNZdS2HGw9DZO+wskBo0tctg960N+4mla3cf5qrX5vPHD5eSllyfybeeyaMZ+cTPfQZ6jILeVzt6vdjoKJ67ojc5Rwt5+LNySjuNWtrZR7uX22bCMKcJv6zUU+xuQ6sm2YakSFF4zC4TjGtg71q8kxozWiezfEcuBUUBeOjXur/dfGLpe7D8Y59O9d6P25i3cT/3D+tKqkOlnMqc1q4JU247iweGdeWHTfsZ/LdZvDBjnW1cKzhif7YNmtoVT3765VOp9ufZWTKZb8CaKYG/vo/yjhfx+OerGPbiHNbvPcxfLu/JxJv706OJ2HeFSalw8fN++dl2bdmIP5zXkUlLdvLlyt0nH9BlmC2dff8SbJjp+PUDSRN+efrfbhuRvhgL+zYEOxpnzHwE9pyY1Nj8p5c96S4KikpYFYgxA2C3l0vrZwdVHdxaq1NkHTzKk1NWc2aHplzTz9lSTmVio6O48ex2zLxrIBd0a84LM9Zzwd9ms+ODO+2uVGUmNQbceQ9Ci152wFoITCytDmMMk5fuZNBfv+WN7zZzZd90vr5rIFf3cxMVJTD1bsjdbocelrfrmkNuObc93Vo24oFPV5BztODkAy543M5C+vTmsJ5Yqgm/PD/tNlTP3l0UlfMXIJysn2Hry/1GQ+chP/uSx+2dnOnvOv4J0TF2MxpjajWx1BjDfROXY4CnLvdtVU5ttUiK56VrM3j3htMYWDKf1I0fMC3pSrKSK9gZLFBi4mDUm1B0zM6YCfGlmhv25nHd6z9w238Xk5JYj09uGcBTl/ckuUGcPWDZh7DsAzvW3H26X2OJjY7i2St6cfBIAY9+tqqcA+rbpZr5OXY2UpiWezXhVyQp1b4937UEvqnlhMNQkLfXjitu1s3OcymjRVI8rZLiWVTZDlhOS25jH+Junw9znqvy8NI+WLCdOev3cd+wrqQ3TvBPfNU0IOU4j8hr7G3YlbEHLmXw87N4+ZsNHC/yT79BtTTtaBuHNs+C7/8RvDgqcbSgiKenrWHo32ezYkcuj43owaTfn0kf7/abgN117fM/QvrpcNbdAYmre6skbjm3AxMX72DGqj0nH9Cih/1/aN20sJ1Y6kjCF5EhIrJWRDaIyEnDU8R60fv1ZSKS4cR1/a7rJXb643d/tyN/w81PkxoPVTqp0eNODtwd/gm9roBeV9m+h23zq/UtO3PyeXzKas5o14Tr+tVgcxZ/KCmGT25Cio7T7Df/4Yu7BjGwUzOenb6WoS/MYe76IL7tz/iV/bs781HYuTh4cZRhjGHail0M/ussXv12I8P7pPL13XZ0dXRUqXdqxUX23Z+IfdAfXfm4BCfdem4HurRI5P5Plpe/d8JpN9nZSNMfgD3lvBMIcT4nfBGJBl4GhgLdgGtEpFuZw4YCHb1/RgOv+nrdgLnwSWjaybvb0P5gR1MzP46H9V/a+mPzsv9J/sfjdpF1MP/kOeH+Nuw5SEq3Hc5VTCw9UcopLjE8PbKXre8G07wXYcscGPoMNO1Aqqs+4355Cm/99lSKjeEXb/zA799b5N+mtoqIwCUvQoNmdqnm8Ro0jvnJ5n1H+PW/FjDmP4toVD+Wj8ecwXNX9KZpw3J6FWY/Y/eavfhvdu/ZAIqLsat29h8p4LEp5SR0ERjxCsQ3suXewiD89/WBE3f4/YANxphNxpgC4H1geJljhgPvGGs+4BKRlg5c2//iGtilmkf3h1eb9e4V8OX/QccLod+NlR56oo6/JJBlHbD/04x8Aw7tqHK3oY8WZjFrXTb3Du2Cu0lwSznsWAhfPw7dRoDnFz/70sDOzZh+x9n88fxOzFi1h0F/ncX42RspLA5wPT2hsb07PrApoBNLyzpWWMzzX67lwr/NZtHWgzx4cTc+/8OZ9G3TuPxv2DrP7jHb+1q752wQ9EhN4uZz2vPxwiy+WVPOnKKGzexKt72r4KvwmljqRMJPBbaX+jzL+1pNjwldLXvbNvm1U2zjUqgrzLd3H/FJdlVOFQ82u7dqRGy0BLaOf0L6qTDwPrux/NL3yz1kV24+j32+in5tG/PL0wN7x3eS43l2CWbDFnYcRzk/2/jYaG4b1JGv7jyHM9o14cmpaxj29znM3xTgd4htz7Ibeyz+N6z8NLDXBmas2sPg52fx4tcbGNazBV/fdQ6/O7MtMdEVpJ38HFvKcbWGYc8ENNay/jCoA52aN+S+ics5VN5+CR0Hw2k325EW66YHPsBaciLhl5dNyt6qVecYe6DIaBHJFJHM7Oxsn4NzzGk327XO0x+wDUyh7Mv/g+w1cFn1JjXGx0bTrVVS4Ov4J5z1RzuxdOrdJ00sNcZw/8TlFBaX8EwolHK++JN9oHj5eNvdWgl3kwTe+M2pvP6rvuQXFnP1+Pnc8f7iwJbOzr0fWmXAZ/6fWHrC9gNHueHtBdzwTib1Y6P5742n88LVnpM2pPkZY+DzO+DwLvuuz5dd1xxQLyaaZ0f1Zu/hYzzxeQW7iw1+GJr3gE9vgcPlPOQNQU4k/Cyg9GLoNGBnLY4BwBgz3hjT1xjTNyXFD2Nla+tEm3VcA3uHF6q7Da39Ahb8084B6VD9SY2edBfLsnIpCnTpAf43sTQq+qTdhiYu2sE3a7MZe2EX2jRtEPjYSlsxAZb8B86+G9oMqPa3De7WnK/uPIfbzuvA1OW7GfTcLN6cuzkwP+voWFuSLCm2d89+mlgKtnzz4sz1DH5+lrcprgtTbz+LM9pXozdhyXuw8hP7CyrNx13XHNI73cVN57Tng8ztzFpXzs1nbLz95VSQZ1fChfgyWHAm4S8AOopIWxGJA64GJpc5ZjLwK+9qndOBXGNMeHSGlJbY3D6w2bPcNjKFmkO77N1Gi5520l8NZLROJr+wmDW7HdoApKZc6Xa3oR0L4dunANhz6BiPfLaSU9sk85v+bYIT1wk52+CzOyG1r10XXkP146L54wWdmX7n2XhaJ/Po56u4+B9zydwSgHnrP00s/Q7mPu+XS8xal82QF2bz/FfrGNytOTPvOofRZ7cntqLyTWn7N8LUe+yesgPu8Et8tXX7oI50aNaQeycsK38rzGZd7OykjV/DD6G/FsXnhG+MKQJuBaYDq4EPjTErRWSMiIzxHjYV2ARsAP4J3OLrdYOm04W2gWn+K7ahKVSUlNi7jMJ8e9dRw0mNHu8a6IDM1alI98vsQ9A5z2M2z+aBT5ZzvKiEZ0b1Dm4p58QyQVNi75Z9mNTYtmkD3v7tqbx6XQa5+YWMGvc9d3+09OTt9pzW+xroMRK+eQq2L3DstDtz8hnz74X8+s0fiRLh39f34+VrM2iZVM1xF0UF9nlTdKzdU9bJXdccEB8bzbOjerHn0DGenFpBKbfv9dB5mJ2ltGtZQOOrKXF8H08H9e3b12RmOjtO1xGF+fDP8+wGCTfPs0/tg23eP+zgrItfgL6/rfG3G2M49YmZnN2pKc9f2cfx8KrteB68djZHjx7hjJxH+cNFp3LDWc5NR6yVWc/AN0/AZeOh91WOnfZoQREvztzA63M2kRAXzT0XdqZ/h6aOnb+sqOO5pH1wAUg026+ajomrfZ3cGPhq1R5enLkeg+EP53XkhrPaUi+mhgl7xsN2O8Er34FuZRf3hY6npq7mtdmb+M/1p3Fmx3L+Gx3ZD6/2tyvPRs+CuOCtJBORhcaYvuV+TRN+Le1ZBeMHQtuz4bqPgjMw64SdS+D1wfbdx1X/qXUso9/JZP3ePL65e6Cj4dXUgfXzSXx3GJn1TqPf2ClEV6cs4C/bfoB/DbX7JYz0T3flhr2HeXDSSuZt9P8qnlNkLR/GPcqnJQO4q9D3N9oXdm/O/13cjbTkWiS4TbPgneGQ8Uvb1R7CjhUWM+zFORwvLGH6nWfTsLy9czd+A/8eAaf81q7gCpLKEn7gWtgizYndhr64B354DU4fU/X3+EPBEfuW2IFJjR53Ml+u2sPBIwX/m2cSYMYY7v0+hg7FVzH2+Huw5N9wyq+DEgvHcmHiDXbMxkV/9dtlOjRL5N0bTmPexv3+L+3Qh/Wrsxm59hVa97uUHekX1/pMqa76Fa+nr8rRA3beT5P2dhREiLOlnd6MGjePp6au5onLep58UPtzof9ttimvw2DoWvufrb9owvdFvxvt9nJfPQhtzrSzNgJt2n32odevJtlmGx943C4AlmzP4dwuwSlTfbZsF1+u2sMpQ/4IW7Ns01Dr/nZGTKBNuRtyd8Dvpvl1UiOAiDDAj+Wcn+n5GLy1kL4rHqfvmRfa2UaBdGLXtSP74Jr37cq3MHBK62SuH9CW1+du5qKeLcsvv533f3aO0eRbITXDbvoTQnR4mi9OtFnXdwWnzXrVJLvf5oDbod05Pp+uV1oS0VHCoiCtx88+fJyHJq2gT7qLG87u8L+JpR8HYbehpR/A8g/tipz0IE/BdFp0jB03DHasRQ0nlvps4Vt2r9hBD9q9Y8PIXRd0pm3TBoydsIwjx8v5ucXEwcg37d/XEJxYqgnfVw2awohXbaNTIHcbys2CybdBKw+c+4Ajp0yIi6FLi0QWB6Hj1hjD/326giMFxTx3RS87TKtRK7j0Jdi9DL5+LHDBHNgMU+4C9xlw1l2Bu24gJbe2s2qyfrSzawIle619V9puoO0VCTP146J5ZlQvduTk8/S0ClbtNO1gt0vdPNuWd0KIJnwndBhk//IueN02PvlbSbEd5lZc6F2C6Vy93eN2sWR7DsUlgX2YP2X5Lqat3M0dgzvSoVmp1SNdL7ZbBs77h30o5m/Fhbb5S6ICPqkx4HqOsss1Zz8LW7/3//WKjtt3wnEJ9t1bVHimn1PbNOY3/dvwzvdbKx6X4fmlXXX09WOwY1FgA6xEeP7EQ9GgB23D06e3+H+3oe9esJMahz1rH3o5KMOdTN7xIjZmB27C4v684zw4aSW90pIYXd4SzAuegKadvRNL/Tx2eNbTsCPTrrJwBXkEcyAMe9b+e0680c6y8aeZj9q9YYe/DIkt/HstP7vnws60bpLA2I+XcbSgnNKOiG0kbNjC3kCEwMRS0ITvnJh6tnZXmO/fNuushfDNk7ZJqc+1jp/+xOTMRVsDV8d/cPJK8o4V8eyo3uUP1opLgFFvQP4Bu32fv5YSb/kOZj8Hfa6zyzDrgnqJ3omlO6ucWOqTDTPtnrCn3gCdh/rnGgGUEBfDMyN7se3AUZ6Ztrb8g+on22ayA5tgWs27s/1BE76TUjrBkKfsZinzX3b+/McP27fEiS1t/dUPa//bNEnAlRAbsDr+F8t3MWXZLm4f3JHOLSppBGrREwY/Auu+sBt1Oy3/oO2mbdzW1l/rkrS+dobNyomw9L/Onz8v2747S+lilzJHiNPaNeE3/dvw9vdb+HFzBSMy2pxpnwMt/g+smBjYAMuhCd9pp/wGulwMMx6xDVFOmjoWcrZWa1JjbYkInnQXi7f7/w7/wJEC/m/SCnqkNmL02dXopj1tjF3fPP0B2FvBBMPaMAY+ux3ydtvmqiBPagyKM++0s2ym3G2X+Trlp13XcivddS1cjR3SmbTk+oz9eCn5BRUMpht4r53B9NkdkLO9/GMCRBO+00RsA1SDFHs3XnDEmfMu/xiWvmf392zd35lzViDDncz6vXnlzwF30MOTV5KbX8izo3pXb8hWVJRdERXX0O7k5NTE0sX/sUtcz30AUkNjUmPARUXb8kN07EkTS33y4z9h/XS7F2ww+lT8LCEuhqdH9mLL/qM892UFpZ3oWBj5TzD+n1haFU34/pDQGC4bZ++Upt3n+/kObrUbOqf1q9WkxpryuJMxBpb6cZDatBW7mbx0J384ryNdWzaq/jc2bGaT/t6Vdg6Lr/ZtsDPu25xl+xnqsqQ0+6Bx5yL7nMhXe1bZpcodzrd7wUao/u2b8svTW/Pmd5tZuLWC0k7jdrZbe9s8mOOfiaXVoQnfX9qdA2feYRujVk2q/Xl+NqnxnwFZJtg7PQkR/FbHP3ikgD9/uoJuLRtx88BarDLqdIEt7/zwKqz7svaBnJjUGBPnXSYYWpMag6L7CLsJ+ty/2XXktVV617URrwZ31lQA3Du0C62S6nPPR8s4VljBHXyvq6DnFXb89/YfAxuglyZ8fxp4v22MmuzDbkNznoPt8+Hi5wPWAp8YH0unZol+67h99PNV5Bwt4NkrelWvlFOewY9As+4w6RbIK2ff0er45nHYtcSW4JLCZ8dNvxvyF7vcd+JNduZNbXz1oN3zdUT1dl0Ldw3qxfDMqF5s2neE579aV/5BIvYuPynVls2OHQpskGjC96+YOPugqrjQrlKoae1u23y7LrzXVdDrSv/EWAGP28XibTk4PU31q1V7+GTxDn5/bge6t/JhPk1svH3AevwwfHpzzZfBbvoWvnvRPmTveknt44hEcQ3sz/ZItt0asaZ/B9ZNhx/Hw+m32L1f64gBHZpy7WluXp+zqeKbpfgkuPx1yN1ut/QMME34/nZit6Etc2zDVHUdy7VzTpLSYdhzfguvIh63i9z8Qjbvc+ihM5B7tJAHPllOlxaJ/P7cDr6f8MTE0g0z7GbS1XVkv/0F3LQjXOhArToStfLYZsLVn9myZHUd3m1/ATfvafd8rWPuG9qFFo3iueejpRWXdtynwTn3wrIP7MymAPIp4YtIYxH5SkTWe/9Z7lpBEXlTRPaKyApfrhe2+lxrG6W+edI2TlXFGPuQ9tAO+w4hvgYPNR2ScaIBy8E6/qOfr2L/kQKeu6I3cTEO3WucegN0GmpLCLuXV3186UmNI18Pm0mNQXHGrXbmzRf3QnYFZYrSSkpssi84Yn+2Ndx1LRIkxsfyl5G92Jh9hBdmrK/4wLPugvTT7cymA5sDFp+v/9fdC8w0xnQEZno/L89bwBAfrxW+RGyjVGJL+yDreBX7xi77AFZ8DAPvg/RTAxNjGe1TGpJYL4bFDtXxv16zhwmLsrhlYHt6pDo4algEhr9k+xIm3AAFRys/fuG/YO0Ue/fZsrdzcUSiqCgYMc6unZ9wfdUTS3941e7teuGTdq/XOursTilcfWo642dvZElFK92iY+wiDImyYy0CNLHU14Q/HDjxfu9tYER5BxljZgMB2K05hNVPtg1TOVttA1VFDmzyTmrsD2f9MXDxlREVJfTx1vF9lZtfyH0Tl9O5eSK3nudAKaesBk3tMtiqJpbuXQPT7of259n6sqpao5Z29s3uZXYWTkV2LYWvHoLOF9lhd3Xc/Rd1pbm3tHO8qILSjsttF2NkLbDP6gLA14Tf3BizC8D7T593zRCR0SKSKSKZ2dnZvp4utLTubxunlr5nG6nKOjGpMSra/nII8jJBjzuZNbsPlT8cqgaemLKKfXl2VU6N9zytrvbn2RJE5huwZsrJXy88Zn+2cQl25UiYTmoMii7D7Ebd379kZ+KUVXDE/mwTmvi861qkaBQfy5OX92T93jxenFlJaafnKOh9rV2Nt3We3+Oq8m+9iMwQkRXl/PHLjsPGmPHGmL7GmL4pKRG4nOucP9kGqs/vtA1VpX37FOxYaDcid6UHJbzSPG4XJQaWbs+t9Tm+XbuXDzOzuOnsdvRKczkXXHkGPQgtetkBa2Unls58BPYsh+GvhP2kxqC44HE7C+fTm0+eWDr9fti33nbqNmgSnPhC0Lmdm3HFKWmMm7WJ5VmV/D807BlwtbaLNPL9O9KkyoRvjBlsjOlRzp9JwB4RaQng/WctF0TXISdqd8bYhqoTtbstc20HnucXITOp0ZPuAqj1XJ1Dx2wpp2Ozhtw+OABbFMbUg1FvQtGxn+82tH4GzH8F+o2GznX3UZJP4hLsAoL8HDsb58RSzdWf2R2sBtxmH/Cqn/nzxd1o2jCOuz9aSkFRBUuHT0wszdvt34ml+F7SmQyc2GH614APLaV1SHIbW7vbPt++lTt6wDupsR0MCZ1Jja6EONqlNKh1Hf/JKavZc+gYz17R23+lnLKadrQTSzfPgu//YZuyPh0DzbrZeS6q9lr0gPMfgXXT7GY/uTvsiqeWfeDcAO72FkaS6sfy1OU9WbvnMC99XUlpJ+0UO8tp5Sew5F2/xeNrwv8LcL6IrAfO936OiLQSkaknDhKR/wLfA51FJEtErvfxuuGv15W2oWrW0/DeVZC3xzupsWGwI/sZT3oyi7cdrHED1ux12by/YDs3nt2OPt53CgGT8WvbTDXzUfjv1bajceTrETepMShOG2Nn40x/AD64zq7ccXjXtUhzXpfmXJ6RysvfbmTFjkpKOwNutzOdpo51dmJpKT4lfGPMfmPMIGNMR+8/D3hf32mMGVbquGuMMS2NMbHGmDRjjB8GmoehYc/ZxqqsH+1u96kZwY7oJB63i315BWQdrP4G7Ye9pZz2KQ24c3AnP0ZXARG45EVo0Mw+E7ngcWjePfBxRCIRGPGK7Q3ZuRiGPmP3cFWVeuji7jRpUEVpJyraznSKjvUugy1wPA5dqhBM8Y3g2g/sXJj+twU7mnJ53C6AGs3VeeqLNezMzeeZUb2Jjw3SSqOExvZne8Hj0O/G4MQQqRo2sz/bIU/bZ06qSkkJsTxxWU/W7D7MK99uqOTAVLvSqfUAv8QRwTs0h4lmXe2fENW5eSIJcdEs3pbD8D5VDxj7bsM+3vthGzee1ZZTWvtnk5Zqa9nL/lHOSz2l7u4dUEvnd2vOiD6teOnrDVzQrQXdWlXQQd/tUvvHD/QOX1UqJjqKXmlJ1eq4zTtexNiPl9GuaQPuuqBzAKJTKrw8dEl3XAm2tFNY7Kd9ryuhCV9VyeNOZuXOQxUPg/J6+qdSTq/glXKUCmHJDeJ4fEQPVu06xLhv/fNgtjKa8FWVMtzJFJWYSlcYzNu4j3/P38pv+7elb5vGAYxOqfAypEcLLundihe/Xs+a3YGdia8JX1XpxLLKitbjHy0o4k8TltG6SQL3XKilHKWq8sil3WkUH8s9Hy2jKIClHU34qkopifVIb1y/wo7bZ6atJetgPs+O6k39OC3lKFWVxt7SzvIdubw2e1PArqsJX1VLhju53Dv8Hzbt5615W/j1GW3o11ZLOUpV19CeLbmoZ0v+PmM96/ZUMTLdIZrwVbV40l3syj3Grtz/NWDlFxQzdsIy3I0TGDtESzlK1dQjw7vTMD6Gez5aGpDSjiZ8VS0e7w5Ype/yn52+lq37j/L0yF4kxGlLh1I11bRhPR4d3p2lWbm8Ptf/O19pwlfV0rVlI+rFRP20Hj9zywH+NW8zvzy9NWe015G4StXWRT1bMqR7C57/ah0b9vq3tKMJX1VLXEwUPVOTWLQth2OFxdzz8TJSXfW5d2jd3cpOKSeICI+N6EFCXDR3f7SM4pLQHY+s6hCP28XyHbn85Ys1bN53hGdG9qJBPS3lKOWrlMR6PHJpd5Zsz+GNuf5btaMJX1Wbx51MQVEJb83bwrWnuenfoWmwQ1IqYlzauxXnd2vOX79cx8bsPL9cQxO+qrYM74PbVFd97tNSjlKOEhGeGNGD+Nhoxn7sn9KOTwlfRBqLyFcist77z5PGI4pIuoh8IyKrRWSliNzuyzVV8LRIiueOwR15+boMEuNjgx2OUhGnWaN4Hr60G11aJPpluJrUdCejn32zyDPAAWPMX0TkXiDZGPOnMse0BFoaYxaJSCKwEBhhjFlV1fn79u1rMjMzax2fUkrVNSKy0BjTt7yv+VrSGQ687f34bWBE2QOMMbuMMYu8Hx8GVgNVD1ZXSinlKF8TfnNjzC6wiR1oVtnBItIG8AA/VHLMaBHJFJHM7OxsH8NTSil1QpVr6kRkBtCinC89UJMLiUhDYAJwhzGmwpmgxpjxwHiwJZ2aXEMppVTFqkz4xpjBFX1NRPaISEtjzC5vrX5vBcfFYpP9u8aYibWOVimlVK35WtKZDPza+/GvgUllDxARAd4AVhtjnvfxekoppWrJ14T/F+B8EVkPnO/9HBFpJSJTvccMAH4JnCciS7x/hvl4XaWUUjXkU1+8MWY/MKic13cCw7wfzwXEl+sopZTynXbaKqVUHeFT45W/iUg2sLWW394U2OdgOP4UTrFCeMUbTrFCeMUbTrFCeMXrS6ytjTEp5X0hpBO+L0Qks6Jus1ATTrFCeMUbTrFCeMUbTrFCeMXrr1i1pKOUUnWEJnyllKojIjnhjw92ADUQTrFCeMUbTrFCeMUbTrFCeMXrl1gjtoavlFLq5yL5Dl8ppVQpmvCVUqqOiLiELyJDRGStiGzwbsoSskTkTRHZKyIrgh1LVcJt5zIRiReRH0VkqTfeR4IdU1VEJFpEFovI58GOpSoiskVElntHpYT0LkUi4hKRj0Vkjffv7xnBjqkiItK51AiaJSJySETucOz8kVTDF5FoYB12rk8WsAC4pjq7awWDiJwN5AHvGGN6BDueyviyc1kweIf2NTDG5Hmntc4FbjfGzA9yaBUSkT8CfYFGxpiLgx1PZURkC9DXGBPyjUwi8jYwxxjzuojEAQnGmJwgh1Ulbz7bAZxmjKltA+rPRNodfj9ggzFmkzGmAHgfuytXSDLGzAYOBDuO6gi3ncuMlef9NNb7J2TvbkQkDbgIeD3YsUQSEWkEnI2d2IsxpiAckr3XIGCjU8keIi/hpwLbS32eRQgnpXBVnZ3LQoG3RLIEu0/DV8aYUI73BWAs4PzO1f5hgC9FZKGIjA52MJVoB2QD//KWy14XkQbBDqqargb+6+QJIy3hlzeVM2Tv6sJRdXcuCwXGmGJjTB8gDegnIiFZNhORi4G9xpiFwY6lBgYYYzKAocDvveXJUBQDZACvGmM8wBEgpJ/tAXhLT5cCHzl53khL+FlAeqnP04CdQYol4oTrzmXet/DfAkOCG0mFBgCXeuvi72P3jvhPcEOqnHcEOsaYvcAn2HJqKMoCskq9u/sY+wsg1A0FFhlj9jh50khL+AuAjiLS1vsb8mrsrlzKR+G2c5mIpIiIy/txfWAwsCaoQVXAGHOfMSbNGNMG+3f2a2PML4IcVoVEpIH3wT3e8sgFQEiuNDPG7Aa2i0hn70uDgJBcaFDGNThczgEfN0AJNcaYIhG5FZgORANvGmNWBjmsConIf4GBQFMRyQIeMsa8EdyoKnRi57Ll3ro4wP3GmKkVf0tQtQTe9q50iAI+NMaE/HLHMNEc+MTeAxADvGeMmRbckCr1B+Bd703gJuC3QY6nUiKSgF1peJPj546kZZlKKaUqFmklHaWUUhXQhK+UUnWEJnyllKojNOErpVQdoQlfKaXqCE34SilVR2jCV0qpOuL/AUMoeO/rvWQPAAAAAElFTkSuQmCC\n",
+ "image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -148,56 +72,22 @@
}
],
"source": [
- "plt.plot(i_tabs.real)\n",
- "plt.plot(i_tabs.imag)\n",
+ "d = 3.3\n",
+ "k = np.linspace(-5,10,1000)\n",
+ "h_ideal = np.sinc(k-d)\n",
+ "plt.plot(k,h_ideal)\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Delay as a Convolution System"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 0, 0, 1]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Create the FIR\n",
- "D = 3 # Delay value\n",
- "h = [0]*D+[1]\n",
- "h"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
+ "execution_count": 4,
+ "id": "c640e03e",
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAzaklEQVR4nO3dd3hcxdn38e+9q967rGbLRS7CHWNMM6YGg8GhJKEEEggYk4SSRiCFJ08S3ieBNEjoJSRAYkIJoZhmiimmWO7dluUiWbK6ZPWVduf9Q1rjCNmWtGf3rLT357p8odWePWfWWD/NzrlnRowxKKWUGv4cdjdAKaVUYGjgK6VUiNDAV0qpEKGBr5RSIUIDXymlQkSY3Q04krS0NJOfn293M5RSashYtWpVjTEmva/ngjrw8/PzKSoqsrsZSik1ZIjInsM9p0M6SikVIjTwlVIqRGjgK6VUiNDAV0qpEKGBr5RSIcKSwBeRx0WkSkQ2HuZ5EZF7RaRYRNaLyEwrrquULZr2w1/nQ1Ol3S1RakCs6uE/AZxzhOfnAwU9fxYBD1h0XaUCb/ldsPcTWP5bu1ui1IBYUodvjHlfRPKPcMhC4O+mey3mT0QkSUSyjDEVVlxfqYD4dQZ0dXz+uOix7j9hkfCzKvvapVQ/BWoMPwcoPeRxWc/3vkBEFolIkYgUVVdXB6RxSvVH46Ii3g6bS5uJAKCdSDqPuQRu3mBzy5Tqn0AFvvTxvT53XjHGPGyMmWWMmZWe3ufsYKVs8T/v1FLZEUGUdOJ2RBJhXKza3wXxmXY3Tal+CVTglwF5hzzOBcoDdG2lfLZtfxMvri1nVloXMusanIvepij9Qhqq9rG7psXu5inVL4EK/JeAq3qqdeYAjTp+r4aSB94rJi4yjIzrnoUFf4ARU8i/6gFu9HyfJ1bstrt5SvWLVWWZ/wQ+BiaISJmIfEtEFovI4p5DlgIlQDHwCPBtK66rVCA0tXfy2sb9XDgjh6SYiIPfz0iI4vyp2TxbVEp7p9vGFirVP1ZV6Vx2lOcN8B0rrqVUoL22YT8dXR4umvnFOoMLZ+bwwpp9vLetmnMmj7ChdUr1n860VeooXttYwciUGKbnJX3huRPGpJISG8Er6/WWlAp+GvhKHUF7p5sVO2s5fWIGIl8sNgtzOji7MJPl26rpcntsaKFS/aeBr9QRfFxSS0eXh9MnZhz2mLnj02nq6GJdWUPgGqbUIGjgK3UEH2yvITLMwezRKYc95sSxqYjA+9trAtgypQZOA1+pIyjaU8eMkUlEhTsPe0xSTARTcxJZsVMDXwU3DXylDqOlo4tN5QeYnX/43r3XcfkprCtrxNWl4/gqeGngK3UYa/Y24PYYZvUj8GeOSsbV5WFTeWMAWqbU4GjgK3UYn+2uwyEwY2TSUY89dlQyAKv3Nvi3UUr5QANfqcNYvaeeSVkJxEeFH/XYzIQocpKiWb2nPgAtU2pwNPCV6oMxhg37Gpmam9Tv18wYmcTqvRr4Knhp4CvVh7L6NhrbOpmck9Dv10zPS6KisZ3qpo6jH6yUDTTwleqD9+br5OzEfr+mMLv7l8PmigN+aZNSvtLAV6oPG/Y14nQIE0bE9/s1hVk9gV+uga+Ckwa+Un3YuO8ABRlxR5xw1VtSTAQ5SdHaw1dBSwNfqT5sKm9kck7/h3O8CrMTtBZfBS0NfKV6qW3uoKbZxcQBDOd4FWYlsKumhVZXlx9appRvNPCV6mV7ZTMA4zMHEfjZCRjTvQeuUsFGA1+pXnZUdYf1YALf+5odVc2WtkkpK2jgK9XL9som4qPCyEyIHPBr85KjiQhzsFMDXwUhDXyletle2cz4zPg+d7g6mjCngzFpsdrDV0FJA1+pQxhj2FHZxPjMuEGfY1xG3MFhIaWCiQa+UoeoaXZR39pJQcbAx++9CjLiKatvo83ltrBlSvlOA1+pQ+yoHPwNW6+CzDiMgZ3VOqyjgosGvlKH8I69+zqkAxr4KvhYEvgico6IbBORYhG5rY/nE0XkZRFZJyKbRORqK66rlNVKqpuJiwwjPX7gFTpe+amxOB3CjkoNfBVcfA58EXEC9wHzgULgMhEp7HXYd4DNxphpwDzg9yIS4eu1lbLartpWRqfFDqpCxysizEF+aozeuFVBx4oe/myg2BhTYoxxAUuAhb2OMUC8dP8UxQF1gM49V0Fnd00L+WmxPp9ndFocu2taLWiRUtaxIvBzgNJDHpf1fO9QfwEmAeXABuBmY4ynr5OJyCIRKRKRourqaguap1T/uLo8lNW3Mjo1xudz5afGsKeuBY/HWNAypaxhReD39dm397/yLwFrgWxgOvAXEelzKyFjzMPGmFnGmFnp6ekWNE+p/imtb8VjsKSHn58WS3unhyrd/UoFESsCvwzIO+RxLt09+UNdDbxguhUDu4CJFlxbKcvsrmkBLAr81O5z7Oo5p1LBwIrAXwkUiMjonhuxlwIv9TpmL3AGgIhkAhOAEguurZRlvOE8OtX3wB/VMyy0p1YDXwWPMF9PYIzpEpHvAm8ATuBxY8wmEVnc8/yDwK+AJ0RkA91DQD82xtT4em2lrLSrpoXE6HCSY30vIMtOiibC6WCXBr4KIj4HPoAxZimwtNf3Hjzk63LgbCuupZS/7K61pkIHwOkQ8lKi2aOVOiqI6ExbpXrsrrGmQscrPzWW3drDV0FEA18poL3TTXljG6PTBr+kQm/5abHsqW3FGC3NVMFBA18pYG9dK8ZAfpqVPfwY2jrdWpqpgoYGvlIcUpJpQYWO1ygtzVRBRgNfKaC0vg2AkSnW9fBH99wA1tJMFSw08JUCSutaiYsMIykm3LJzZiVGEe4UdmmljgoSGvhKAWX1reQmR/u0SmZvYU4H2UnRlNVr4KvgoIGvFFBa10aehcM5XnnJMQeHi5Symwa+CnnGGErrW8lLtj7wc5Oj2ac9fBUkNPBVyKtrcdHqcpOXEm35ufNSYqhpdtHq0u0flP008FXI8w65+KuHD7BPh3VUENDAVyGvtK57yMUfY/i5Pb9ESnVYRwUBDXwV8rxh7O2NWymv55xl2sNXQUADX4W80ro2UmMjiI20ZPHY/5IeH0lkmEMDXwUFDXwV8srqW8n1w3AOgIiQkxx9cNhIKTtp4KuQV1rXenDoxR/ykmO0h6+Cgga+Cmluj2Ffg38mXXnlJkfrTVsVFDTwVUirPNBOp9v4pSTTKy8lhobWTpraO/12DaX6QwNfhbS9df6r0PHK1UodFSQ08FVI84awP4d0vJ8eNPCV3TTwVUjzzoDNTory2zW8PXyt1FF208BXIa28oa2nVt7pt2ukxEYQE+HUHr6ynQa+CmnljW1kJ/lv/B66a/G1UkcFA0sCX0TOEZFtIlIsIrcd5ph5IrJWRDaJyHIrrquUr/Y1tJHjx+Ecr5ykaCoatYev7OVz4IuIE7gPmA8UApeJSGGvY5KA+4ELjDHHAF/x9bpK+coYQ0VDO9mJ/u3hA2QnRVPe0O736yh1JFb08GcDxcaYEmOMC1gCLOx1zOXAC8aYvQDGmCoLrquUTxpaO2nrdJPl5yEd6A78uhYXbS6336+l1OFYEfg5QOkhj8t6vneo8UCyiLwnIqtE5KrDnUxEFolIkYgUVVdXW9A8pfq2r6F7iCVQQzrQfc9AKbtYEfh97fpsej0OA44FzgO+BPxcRMb3dTJjzMPGmFnGmFnp6ekWNE+pvpU3eEsyA9PDP/SaStnBivVgy4C8Qx7nAuV9HFNjjGkBWkTkfWAasN2C6ys1KIEN/Kj/uqZSdrCih78SKBCR0SISAVwKvNTrmP8Ap4hImIjEAMcDWyy4tlKDVt7YTkSYg9TYCL9fKzMhChHYpzdulY187uEbY7pE5LvAG4ATeNwYs0lEFvc8/6AxZouIvA6sBzzAo8aYjb5eWylflDe0kZ0YhUhfo5LWCnc6yIyP0h6+spUlW/wYY5YCS3t978Fej+8G7rbiekpZobzB/5OuDpWdpIGv7KUzbVXIKm9oD3DgR2vgK1tp4KuQ1On2UNkU2MDPSYqmvLEdj6d3EZtSgaGBr0LS/sZ2jAlMDb5XdlI0ri4PtS2ugF1TqUNp4KuQVNHYXS0T6CEd0NJMZR8NfBWSvKGbFYB1dLy0Fl/ZTQNfhaR9Df7f+KS3z5dX0Fp8ZQ8NfBWSyhvaSI4JJybCksrkfkmMDicmwqk9fGUbDXwVkgJdgw/dG6Foaaaykwa+CkmBrsH30sBXdtLAVyGpvLF7WYVAy0mK0vV0lG008FXIOdDeSVN7lz09/MRoapo7aO/UjVBU4Gngq5BT0RD4Gnwv7zX3a6WOsoEGvgo5gVwHvzedfKXspIGvQs7nWxsGPvC919ynga9soIGvQk55QxthDiE9PjLg185MjESku0pIqUDTwFchp6KxncyEKJwO/2980ltkmJP0uEgd0lG20MBXIWdfQ5stwzle2UnROqSjbKGBr0JO9yzbwNfge2UnRVHeqIGvAk8DX4UUt8ewv9GeWbZe2Ynds22N0Y1QVGBp4KuQUt3UQZfHkGXzkE57p4eG1k7b2qBCkwa+Cimfl2TaOaSjpZnKHhr4KqRUNNo36corRydfKZto4KuQYucsWy/d+UrZRQNfhZTyhnbiI8NIiAq3rQ0psRFEhjl05ysVcJYEvoicIyLbRKRYRG47wnHHiYhbRC6x4rpKDdQ+GzY+6c27EYqO4atA8znwRcQJ3AfMBwqBy0Sk8DDH/RZ4w9drKjVY5Q1tZNl4w9YrOymKCg18FWBW9PBnA8XGmBJjjAtYAizs47gbgeeBKguuqdSg2LG1YV+6a/F1SEcFlhWBnwOUHvK4rOd7B4lIDnAh8ODRTiYii0SkSESKqqurLWieUt3aXG7qWztt2emqt+ykaCqb2ul0e+xuigohVgR+XytQ9Z5C+Cfgx8aYo27zY4x52BgzyxgzKz093YLmKdXNu5xBTrL9PfycpGiM0Y1QVGCFWXCOMiDvkMe5QHmvY2YBS0QEIA04V0S6jDEvWnB9pfrlYElmov2Bn3VIaWZeSozNrVGhworAXwkUiMhoYB9wKXD5oQcYY0Z7vxaRJ4BXNOxVoAVDDb7XwZ2vdBE1FUA+B74xpktEvkt39Y0TeNwYs0lEFvc8f9Rxe6UCYV9DOyKQmRAEY/iJ3tm2OqSjAseKHj7GmKXA0l7f6zPojTHftOKaSg1URUMbGfGRRITZP98wOsJJSmyEzrZVAWX/v3ylAqS8MThKMr2yk6I08FVAaeCrkFHeYO86+L1laS2+CjANfBUSjDHdyyoEQQ2+V05StPbwVUBp4KuQUNviwtXlCaoefnZSFE0dXRxo141QVGBo4KuQEEwlmV7etlTosI4KEA18FRK8Y+U5QRj4OqyjAkUDX4WEYOzh5+hWhyrANPBVSChvaCMq3EFyjH0bn/SWFhdJmEO0h68CRgNfhYTyxjayE6PpWc8pKDgdwohErcVXgaOBr0LCviCrwffKTtJafBU4GvgqJFQ0tB3cPDyY5CRF6wJqKmA08NWw19HlpqqpI0h7+FHsb2zH7em9hYRS1tPAV8NeZWMHEFwVOl5ZidF0eQzVTR12N0WFAA18NeztC6KNT3rT0kwVSBr4atj7vAY/+MbwdfKVCiQNfDXsBeOkKy/vL6EKvXGrAkADXw175Y3tpMZGEBXutLspXxAfFU58VJiWZqqA0MBXw155Q3BtfNJbTlK0juGrgNDAV8NeeUMbWUG0Dn5vWTrbVgWIBr4a1owxQd/Dz9aNUFSAaOCrYe1AWxctLndQLYvcW3ZSNPWtnbS53HY3RQ1zGvhqWPMuWxDMPXzvLyNdYkH5mwa+GtaCuQbfS2vxVaBYEvgico6IbBORYhG5rY/nrxCR9T1/VojINCuuq9TRlNV3h2hwD+l0/zLSwFf+5nPgi4gTuA+YDxQCl4lIYa/DdgGnGmOmAr8CHvb1ukr1R1l9K5FhDtLjI+1uymFlJkQh0r2Es1L+ZEUPfzZQbIwpMca4gCXAwkMPMMasMMbU9zz8BMi14LpKHVVZfRs5ycG18Ulv4U4HmfFamqn8z4rAzwFKD3lc1vO9w/kW8NrhnhSRRSJSJCJF1dXVFjRPhbKy+jZyk2PsbsZRZSdp4Cv/syLw++o69bm4t4icRnfg//hwJzPGPGyMmWWMmZWenm5B81QoK6tvJTc5eMfvvbQWXwWCFYFfBuQd8jgXKO99kIhMBR4FFhpjai24rlJH1NzRRX1rJ3lDoIefk9y91aFHN0JRfmRF4K8ECkRktIhEAJcCLx16gIiMBF4ArjTGbLfgmkod1b6eCp2h0MPPS47B5fZQ2aQ3bpX/hPl6AmNMl4h8F3gDcAKPG2M2icjinucfBO4AUoH7e26edRljZvl6baWOpKy+FRgigZ/S/SmktK6NrCDcqEUNDz4HPoAxZimwtNf3Hjzk62uBa624llL9VVrnDfzgH9LJ6/mlVFrXyuzRKTa3Rg1XOtNWDVtl9W1EhTtIi4uwuylH1V06CqU9n0qU8gcNfDVseUsyg7kG3ysyzElmfBSldVqpo/xHA18NW2UNQ6Mk0ysvJVp7+MqvNPDVsNXdwx9CgZ8cQ1mdBr7yHw18NSw1tXfS0No5JG7YeuWmxFBxoB1Xl8fupqhhypIqHRU6jDH8e80+nvpkDzurWxiREMXFx+bwzRNHExEWPP0H7x6xQ2HSlVdecjTGdK+amZ8Wa3dzDmrvdPPoByW8uLacmuYOxmfEc9WJozhvStaQuD+iPhc8P6Eq6LV3urnu76v4/r/W0epyc/60LBJjwvl/S7fytYc/pr7FZXcTDyqrGzqTrrwO1uIH0Th+dVMHF96/gt+9uZ3MhEjOnZJFTUsH3/3HGm5aspaOLt2layjRHr7qF1eXh+v+XsSHxTX8fEEhV5+Yj8PR3btbuqGCW55ZyzefWMkzi+YQFe60ubWfh+aQDPwgqdRpc7m58rFP2VPbyuPfnMXpEzMBcHsMDy7fyd1vbMPV5ea+y2cS5tS+41Cg/5dUv9z56mY+2FHDby+eyrdOHn0w7AHOnZLFvZdOZ11pA3e/sc3GVn5ub10rsRFOUmKDvwbfa0RCFOFOCZoe/h3/2ci2yiYe+PrMg2EP4HQI3zltHHcsKOSNTZX8/i1dLWWo0MBXR/XGpv387eM9XHvyaL46K6/PY86ZnMVVJ4zisQ938dmuugC38Iv21LYyMjV2SI0xOx1CdlL0wRnCdnp/ezXPrirjO/PGMW9CRp/HXHPyaC6bnccD7+3k/e26lPlQoIGvjuhAeyc/f3Ejk7IS+PH8iUc89vb5k8hOjOLOVzfbvurjntoW8lOHzg1br7zkGErr7R3S6XR7+OUrmxmVGsONZ4w74rH/c/4xjE2P5acvbqDNpeP5wU4DXx3R3a9vo6a5g99ePIXwo4zTRkc4+cHZE1hX1sjL67+wQnbAuD2G0ro2Rg7FwE+Jtr0W//lVZRRXNfOz8wqJDDvy/ZiocCe//vIUSuvauO/d4gC1UA2WBr46rOKqZp7+dA9XzhnF1Nykfr3mwhk5jM+M4/53d2KMPb38/Qfacbk9jEoJntLG/spNjqG2xUVLR5ct13d7DA+9X8LknATOnNT3UE5vJ4xN5aIZOTz0/s6gGI5Sh6eBrw7r7je2EhMRxk1nFPT7NQ6HcP3csWyrbOK9bfaM6+6paQEYkkM6+andv6R217bYcv3XNlawq6aFb88bN6D7H7eeMxGHCH9cpjdwg5mWZQZAe6ebd7dWsba0gQPtXaTFRTBnTConjEn9r2qXYLJqTz1vbKrkB2eNJzUuckCvvWB6Nr9/cxuPfFDCaRP710u00p6eXuZQHNLJT+tu8+6aVo7JTgz49R95v4QxabF86ZgRA3rdiMQovnliPg9/UMLiU8cyPjPeTy30jdtj+LC4hs921VLX0klidDgzRyYxb0JGUE0c9BcNfD9yewxPfrybe97eQX1rJxFhDhKiwqlvdfHnd4oZmx7LHecfw6njg2/v3j++tZ20uAiuOXn0gF8b7nRw+fEj+d2b29ld0xLwWaO7a1uIcDqG5EYidvbwN+5rZF1ZI784vxDnIDoii08dyz8+3cvv39zGQ1cG3/5Gb27az51Lt7CntpUwh5AUE0Fjm4sH3Ya0uEhuObOAy2aPHNR7Hyo08P2k6kA7i59axeq9DZw8Lo3Fp47l+DEphDsdtHR0sWxLJfe+vYNvPP4Z1548mtvPnRQ0/9DWlzXwYXENt82fSGzk4P6JfGVWHn9ctoMlK0u57SjVPVbbW9tKbkp00Px9DkRsZBgZ8ZHsqgl84C9ZuZfIMAcXzsgd1OuTY7s7CPe8vYNt+5uYMCI4evldbg//89Imnv50LxNHxHP/FTM5bUIG0RFOOrrcrNhZywPv7eRnL27k9Y37ufeyGUNq/sZADP/PMDbYuv8AF/zlI7bub+KeS6fz5Ldmc3JB2sEql9jIMBZOz+HVm07hGyeM4tEPd3HTkjV0uYNj0awHl+8kPiqMK44fOehzZCZEcfrEDJ5bVRrwxcB217Ye7CkPRflpsewJcA+/1dXFf9aUc+6U7uUyBuvqk/KJiXDy0PKdFrZu8Dq63Fz/5Cqe/nQv188dw8s3nsy5U7KIjuiuPooMc3LahAyeWTSH31w0hc9213H+nz9ktw2/cANBA99iOyqbuOKRTzEYnlt8Igun5xz25ldUuJP/XTiZ2+dP5NX1Fdz+wgbb69d3Vjfz2sb9XHXCKOKjBv+DD3DZ7Dxqml28t63KotYdnTGGvbUtjEwZeuP3XqNTY9lVE9hqlzc27aepo4tLj+t7Yl1/JcVEcPnskfxnXbntFTsej+H7/1rH21ur+NWXJ3P7uZMOW1osIlw6eyTPXn8Cra4uvvrQx+ysbg5wi/1PA99CpXWtXPbIpzgdwj+vm0NhdkK/Xnf9qWO5+YwCnl1VxgM294weXl5ChNPB1ScNfOy+t1MK0kmOCefl9RUWtKx/appdtLjcQ7JCx2tUWgw1zR00tXcG7JovrS0nJyma4/J930/3W6eMxiHwyAclFrRs8H77+lZeXV/BT86dyJVzRvXrNdPyknjm+hPwGMNVj31G1YF2P7cysDTwLdLq6uK6vxfh6nLzj+vmMCY9bkCvv+XMAi6Y1l3d8sEOe8oZKxrbeGFNGV87Lo+0AVbm9CXc6eDcKVks21xJqyswdeV767o/io8awkM6o3vavqc2MD3k+hYXH+yoYcG0LEuqxrISo7loRi7PrCyluqnDghYO3Bub9vPQ+yV8fc5IFs0dO6DXjs+M56/fnE19q4tr/rbStjkR/qCBbwFjDLc+t57tlU38+fKZjMsYWNhD90fK/7toCuMy4rjpn2ts6Vk89sEuPAauO2WMZec8f1o2bZ1ulm0JzLBOSbU38IduD99b1RSoG7evb9pPl8dw/tRsy855/aljcLk9/PWjXZads79K61r54bPrmJKTyM8XFA7qHFNyE7nv8plsqWji5iVrbB9qtYoGvgUeer+EV9ZXcOs5E30qsYyNDOP+K46l1eXm9hc2BHSmakOri398tpcLpmUfXKbXCsflp5CZEMnL6wKz1MLO6hbCnTKkx/APlmYGKPBfWlvOmLRYjunnEGR/jEmP49zJWTz5yZ6ADk15PIYfPLsODNx/xcyjLg1xJKdNzOCOBYUs21LFX4bJshGWBL6InCMi20SkWERu6+N5EZF7e55fLyIzrbhuMHhvWxW/fX0rC6Zmcf1c33vG4zLi+NGXJvD21iqeW1VmQQv7528r9tDqcrP41IF9/D0ap0NYMDWb5duqORCAH/yS6mbyU2OH9Prs0RFORiREsSsAlTpVTe18squW86dlW76y6A3zxtLU3sXTn+619LxH8tSne/hsVx0/X1BoScflqhNGcdGMHP64bDvvbg1c8YG/+PxTISJO4D5gPlAIXCYivT9HzQcKev4sAh7w9brBYHdNCzf9cw0TMuO565Kplv3AXHPSaGbnp/DLlzdT0ej/lRNbXV08sWIXZ07K8Evt9PzJI3C5PQFZaqG+ci/3uX4GTZV+v5Y/TUtq41s7vuP397FizSaWhP+S88ZY/wtyck4ipxSk8diHu2jv9P9KmqV1rfzmta3MHZ/OV2YNbi5BbyLCnRdOYdKIBG5esibg5bJWs+L/8myg2BhTYoxxAUuAhb2OWQj83XT7BEgSkSwLrt2nndXNft96rbmji0VPFuFwCI9cNYuYCOvmsDkcwt1fmUqnx8NP/73R70M7//yslPrWTm6Yd+SlcAdrxshk0uIieGuzf8Or0+1h4YGnGde+AZb/1q/X8reru55lUucmzPLf+PU6iSv/yHGObRRsuc8v579h3liqmzp4frV/P60aY/jx8+tx9NwLs/LTSnSEk4euPBYR4fonV/m9AKHV1eW3XyxWBH4OUHrI47Ke7w30GEvUt7i46P4V3PiPNXT6aSKTMYYf/msdxVXN3Hf5TEvHvL1Gpcbyw7Mn8M7WKl7y4/i3q8vDox+UMHt0CseOSvbLNZwO4YyJmby3tcp/k7B+nUH4r5L5unMZDgwUPQa/SIRfB34tH5/8OgN+kcicuhdxYJCix/3zPnquc1rTy369zgljUpmWl8RDy0v8OrHwhdX7WLGzltvmTyQnyfolNfJSYvjzZTPYXtnEj55d77dOmKvLw+KnVnPJgx/T7IfqICsCv69fpb3/NvpzTPeBIotEpEhEiqqrBz4EkBwbwffPGs+bmyv5/r/W4fbD3fV73t7B65v285NzJ3HSuDTLz+919UmjmZ6XxC9e2kRts3/K215cu4+Kxna+Pc/asfvezirMpKmji09Kav1zgZvXUzHyfNpMz5T4sGiY8hW4eYN/rucvN6+HyV/B7YwC6P6vP95HgP6+RIRvzxvL3rpWlm7cb+m5vepaXPz61c3MHJnE5bMHPzv8aOaOT+fH50zk1Q0V3P+e9fNl3B7DLc+s4f3t1fzo7AnEDXJZkyOxIvDLgEOn5+UCvbuk/TkGAGPMw8aYWcaYWenpg6t4+caJ+dw+fyIvryvn1ufWW1pS9er6Cv60bAcXz8zlW4NYWGwgnA7hrkum0tzRxS9e3mz5+b2bURdmJfh9AbeTC9KIDnf6b1gnfgR1XZFE0olxRoK7AyITID7z6K8NJvEjIDIeh7uDdhOOw1/vI34Eu5scREonJsy/f19nTcpkXEYcD7znnz0S/m/pFprau/h/F03x++qzi+aO4YJp2fzuzW28s9W6f8sej+H2F9azdMN+fnbeJL7q44znw7Ei8FcCBSIyWkQigEuBl3od8xJwVU+1zhyg0Rjj1+mX1586lu+dOZ7nV5fx8/9YMw6+oayRHzy7lmNHJfP/LpockP1Sx2fGc+PpBby8rtzysHx9435Kqlu4Yd5Yv7+XqHAnc8en8dbmSr99HPY0VfK842zkurfh2KuheYjeuG2pglnXcAV3sjL1y355Hx6Poa2hgg8TL0Cu9e/fl8MhLD51LFsqDlh+4/7jnbU8u6qM6+aOYeII68pKD0dE+O3FUynMSuDmf65lR2WTz+f0eAw/+89G/lVUxk2nj+NaC+fB9OZz4BtjuoDvAm8AW4B/GWM2ichiEVncc9hSoAQoBh4Bvu3rdfvjpjPGccO8sTz96V5+9coWn4KmpLqZq5/4jNTYSB668lif6nsHavGpY5k4Ip6fvbiBxjZrShu73B7+8NY2CjLiOHeK3+6f/5ezCkew/0A7G/Y1+uX8v4j5Cc9nfQ9GTIEFf4BLn/bLdfzu0qeRBX/AnTGZP0Ut9sv7WFvWwDVtt1B/2v8F5O9r4fRscpKi+dOy7Zb9wu/ocvPTFzeQlxLNTaf3f5MeX0VHOHn4qllEhju58rHPfFozyBjDHS9t5B+f7uWGeWP53lnjLWzpF1lSi2WMWWqMGW+MGWuMubPnew8aYx7s+doYY77T8/wUY0yRFdc9GhHh1i9N4OqT8nn8o13c8Z9Ng7pxVFrXyhWPfoox8LdrZluy7MBARIQ5uOuSqVQ3dfB/S7dYcs5/r9nHzuoWfnD2+IAtI3zGxAwcgl+GdYwxbN/fREFGcCzJa4WCjDh2VPlnAa9lmysJcwjzxgfmpna408EtZxawrqyR1y0ay3/wvRJKqlv45cLJB1e/DJScpGieunY2bZ1urnj0UyoHMTO+0+3hR8+t56lP9rL41LHc+qUJfv+kPXRnp/STiHDHgkKunzuGJz/Zw3V/LxrQ3e9N5Y1c/MAKWjq6ePJbxw9q2QQrTM1N4rq5Y1iyspSPimt8OldHl5s/LdvBlJzEAe9s5Ivk2Ahm5af4JfD3NbTR1NHFxKxhFPiZcVQ3ddDQ6rL83Mu2VHJcfopPSyEP1EUzcynIiOPuN7f5XLFTXNXEfe8Vs2BqFqdNsKcSa+KIBJ64+jhqmzu4+IEVFA/gl3NjayfXPLGS51aVcfMZBfz4HP+HPYRA4EN36N9+7iTuvHAy7++oYcG9H7B6b/0RX2OM4V9FpXz1wY9xOoRnF5/Y79Uv/eV7Z45ndFost72w3qda4Mc+3MW+hjZ+FIAeRW9nF2aydX+T5UvnbtvfPZY6MUg23bCCt3MxkCDpjz21LWyvbObMwsDe0HY6hB9+aQIl1S0sWVl69BccRqfbw/eeWUdshJM7zh/cWjlWmTEymX8umkN7p5uL7v+oXyXUn5TUMv+e9/l4Zy13XTKV7501PmA/hyER+F5XHD+Kp689nk634eIHVnDTP9ewqbzxv8YUPR7Dxztr+fpjn3Lrc+uZkpvIv799UlDs3hMV7uQ3F02htK6N370xuM2iyxva+PPbxZxdmMlcG7ZWPGNSd8i8vcXaXv7WnsAP1r1UB8M7PLW90trA9y5kd+akwPeMzy7M5IQxqdz1+lZqBllqfN+7xWzY18idF04hIz7K4hYO3NTcJP797ZMY27Pw4Tce/4yVu+v+K1eMMawtbeDbT6/i0oc/ITzMwfM3nMhXZ/mnGudwQm6LwzljUnn9llO4/72dPPHRbl5aV05WYhSj02JxewzFVc3UtrhIjY3gF+cXctUJ+UG10fjxY1K5cs4o/rpiFwumZTFzZP8nSxlj+J+XNuExZtCrCPpqdFos4zLiWLalim9asOa+19b9TeQmR/u8aUswyU2OJj4yjM0V1t7kXra5kvGZcbYsIS0i/OrLk5l/z/vc+eoW/vi16QN6/eq99fz5nWK+PD07YMUG/ZGXEsOz15/A4x/t4oH3dvKVBz8mPT6SsemxCEJxdTPVTR3ERDi55cwCFs0dY+ns/P4KucAHiI8K58fnTGTRKWNYurGCz3bVUVrXikOEeRMymDs+jbMKM235H9Ift54zgbe3VPL9Z9by4ndOIimmf/tvPrOylLc2V/LTcyf5ZXZwf505KZNHPyjhQHsnCRYF9NaKA8NqOAe6w3FSdgKbyw9Yds7G1k4+213HIgsW+huscRlx3HDqWO59p5jTJ2Zw/rT+Lctc1dTODU+tIjspiv+9YLKfWzlwYU4Hi+aO5YrjR/Haxv18VFzD3rpWBMNJY1OZMyaVc6dmWfZvflBttO3KQSA5NoIrjh/FFcf3bzecYBEfFc69l83g8kc+ZfFTq/j7NccTEXbk0bktFQf435c3c9K4VL9PGDuaswozeHD5TpZvq+73D/uRdHS5KalpCegN6EApzErgX0WluD3Gkmqq97ZX4fYYzgrw+H1vN55RwIfFNdz+wgYm5yQyOu3InzZaOrpY/OQqGts6eeGGkwJ6s3mgYiPDuOTYXC451poF3KwUUmP4w8ms/BTuumQqn5TUsfipVUdcjbC0rpVv/vUzEqPD+cNXp9s+RDU9L5nUWOsWUyuuasbtMUFxn8Vqx2Qn0Opys9uixbTe2lxJWlwE03OTLDnfYIU7Hdx72QzCncJVjx+5rLHN5ea6vxextrSBP31tuu3FE0OZBv4Q9uUZOdx54WTe3VbF5Y980mfly5q99Vz0wApaXW7+evVxZCbYf5PL6RBOn5jBu9uqLFngbkvF8KvQ8fKGmxXDOq4uD8u3V3P6xAzbf+kD5CbH8NerZ1PX3L3g4cY+JuTtqmnh4gdW8HFJLb//6jTOmRw84/ZDUUgP6QwHVxw/iqToCG57fj1n/XE5F83M5cSxqbg9hnd7VtrMSozm6WuPD6oKljMLM3l2VRkrd9Vxoo8L0K0vayAmwjngfYSHgoKMeMKdwqbyAz4Pf63cXUdTexdnTgqe9YWm5yXxj+vmcP2Tq7jgLx/y5ek5nDohHYcIHxXX8PzqMqLCnTz+zeNsq7cfTjTwh4HzpmYxfWQS9yzbznOryvhHzw5D8ZFhXHPSaG46s8DWG0V9OaUgjYgwB29tqbQg8BuZnJMYsBnDgRQR5qAgI57NFb738N/aXElEmIOTC/y3wutgTMtLYunNp/CXd4pZsnIvL6zZB0B0uJNLjs3je2cVBEX55XCggT9M5CRFc9cl0/jlwsmUVLfgdAhj0mMJD9Kt/mIiwjh5XBrLtlRyx4LCQU88cXV52FxxgG+cMLRuvA/EMdkJvLO1CmPMoP+ejDG8vbWSk8elBWX1WUpsBHecX8iP5084uHl7fmosUeGBXTJhuAvONFCDFhXupDA7gQkj4oM27L3OnJRJaV2bTxOLtlc24eryMNXmm5D+NH1kErUtLvb6MDt5e2UzpXVtQTWc05fIMCcTRyQwcUSChr0fBHciqGHtjJ6Znst8mHW7vqz7Rt+0YRz43sl1R1sO5Ei8f8dn2DC7VgUPDXxlm8yEKKblJvpUnrm2tJ7kmHDyUqzf1i5YjM+MJy4yjNV7GgZ9jrc2VzI1NzEoqrSUfTTwla3OnJTJ2tIGqpoGvrwswGe76jguPyXgi8AFktMhTMtLHHQPf19DG2tLG4blxDQ1MBr4ylbeFRvf6VnQayAqD7Szu7aV2aNTrG5W0Jk5Mpmt+5toGcTG1q9t6N5c7rwgWntG2UMDX9lq4oh4cpOjeX3TwDfF+GxXHQDHj061ullB57j8FNweQ9GegffyX1lfwTHZCeQfZfkCNfxp4CtbiQjnTc3igx011A5wudzPdtURG+Fk0jDa9ORwjstPIcLp4MMdA9sTtrSulbWlDZw3VXv3SgNfBYGLZuTi9hheWT+wfe0/2lnDrPwUwoK8/NQK0RFOjh2VzIfFtQN63WsbdThHfW74/6SooDdhRDyTshL4d88My/7YXdNCSXULp00I/CYudjm5II0tFQf6vXGIMYYXVu9jam6iLWvfq+Cjga+CwoUzsllb2kBJdf8mYb2ztfsm7+kTg3sikZVO7lmC4oN+Duts2NfI1v1NfCXAuyqp4KWBr4LCwuk5OAReWN2/Xv47W6soyIhjZKp9G7kE2pScREYkRLF0Q/9ucC9ZWUpkmIMLLNhzQA0PGvgqKGQmRHH6xAyWrNxLR9fh1/YHaGh18emuWk4PsVmjDocwf8oIlm+vpqm984jHtrncvLy2nPOmZJEYHVwL5yn7aOCroPGNE/OpaXbx6lFu3r68rpxOt2HhtJwAtSx4nDclC1eX56jLUTy7qpSmji4uO35kgFqmhgKfAl9EUkTkLRHZ0fPfL+yoLSJ5IvKuiGwRkU0icrMv11TD18nj0hiXEcfD75fg8ZjDHvfc6n1MHBEfkjsfzRyZTE5SNM8WlR32mC63h4ffL2HmyCRmjer/Jvdq+PO1h38b8LYxpgB4u+dxb13AD4wxk4A5wHdEpNDH66phSET47mnj2Lq/iVc39N3LX7WnjnWlDXztuNC8EelwCF+fM4oVO2vZtr+pz2NeXFtOWX0bN8wbN6yXnFAD52vgLwT+1vP134Av9z7AGFNhjFnd83UTsAUIvc/iql/On5bNhMx4fv/mtj736b3v3Z0kxYSHbOADXHpcHtHhTu59Z8cXnmvp6OLuN7YyLTeRMyaG1j0OdXS+Bn6mMaYCuoMdOOK/MBHJB2YAnx7hmEUiUiQiRdXVA5tVqIY+p0P42YJJ7K5t5XdvbPuv597aXMk7W6u4fu7YoNzEI1CSYyNYNHcMr66v4OOd/z0R61evbKbyQAd3nH9MUOxbq4LLUQNfRJaJyMY+/iwcyIVEJA54HrjFGHPY/dqMMQ8bY2YZY2alp4fOpBr1uVMK0rlyzige/XAXDy3ficdj2Fx+gFufW8eEzHiuPWW03U203fWnjiE/NYYb/7ma4qpmPB7DPct2sGRlKd+eN5Zjdexe9UGMOfzNsaO+WGQbMM8YUyEiWcB7xpgJfRwXDrwCvGGM+UN/zz9r1ixTVFQ06PapoavT7eHGf6zh9U37SYuLoK7FRXp8JM8sOkEXAeuxo7KJrz38CQfaOkmKCaem2cVFM3O46+KpIbHchOqbiKwyxszq8zkfA/9uoNYY8xsRuQ1IMcbc2usYoXt8v84Yc8tAzq+BH9qMMby0rpzl26rJSY7mGyfmkxYXaXezgkrlgXaeWLGbygPtnDYhgwVTs/RGbYjzZ+CnAv8CRgJ7ga8YY+pEJBt41BhzroicDHwAbAA8PS/9iTFm6dHOr4GvlFIDc6TA9+nOlzGmFjijj++XA+f2fP0hoF0OpZSymQ70KaVUiNDAV0qpEKGBr5RSIUIDXymlQoQGvlJKhQgNfKWUChEa+EopFSJ8mnjlbyJSDeyxux1HkAbU2N0Ii+h7CT7D5X2AvpdAGmWM6XMhsqAO/GAnIkWHm9E21Oh7CT7D5X2AvpdgoUM6SikVIjTwlVIqRGjg++ZhuxtgIX0vwWe4vA/Q9xIUdAxfKaVChPbwlVIqRGjgK6VUiNDAt4iI/FBEjIik2d2WwRKRu0Vkq4isF5F/i0iS3W0aCBE5R0S2iUhxzw5sQ5KI5InIuyKyRUQ2icjNdrfJFyLiFJE1IvKK3W3xhYgkichzPT8jW0TkBLvbNFAa+BYQkTzgLLp3/RrK3gImG2OmAtuB221uT7+JiBO4D5gPFAKXiUihva0atC7gB8aYScAc4DtD+L0A3AxssbsRFrgHeN0YMxGYxhB8Txr41vgjcCswpO+AG2PeNMZ09Tz8BMi1sz0DNBsoNsaUGGNcwBJgoc1tGhRjTIUxZnXP1010B0uOva0aHBHJBc4DHrW7Lb4QkQRgLvAYgDHGZYxpsLVRg6CB7yMRuQDYZ4xZZ3dbLHYN8JrdjRiAHKD0kMdlDNGQPJSI5AMzgE9tbspg/YnuzpDnKMcFuzFANfDXnuGpR0Uk1u5GDZRPe9qGChFZBozo46mfAj8Bzg5siwbvSO/FGPOfnmN+SvewwtOBbJuP+to3eUh/4hKROOB54BZjzAG72zNQIrIAqDLGrBKReTY3x1dhwEzgRmPMpyJyD3Ab8HN7mzUwGvj9YIw5s6/vi8gUYDSwTkSgewhktYjMNsbsD2AT++1w78VLRL4BLADOMENrkkYZkHfI41yg3Ka2+ExEwukO+6eNMS/Y3Z5BOgm4QETOBaKABBF5yhjzdZvbNRhlQJkxxvtJ6zm6A39I0YlXFhKR3cAsY0wwr6R3WCJyDvAH4FRjTLXd7RkIEQmj+0bzGcA+YCVwuTFmk60NGwTp7j38Dagzxtxic3Ms0dPD/6ExZoHNTRk0EfkAuNYYs01EfgHEGmN+ZHOzBkR7+OpQfwEigbd6PrF8YoxZbG+T+scY0yUi3wXeAJzA40Mx7HucBFwJbBCRtT3f+4kxZql9TVLAjcDTIhIBlABX29yeAdMevlJKhQit0lFKqRChga+UUiFCA18ppUKEBr5SSoUIDXyllAoRGvhKKRUiNPCVUipE/H8txPItdfX2pgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -209,21 +99,27 @@
}
],
"source": [
- "d = 1\n",
- "k = np.linspace(-5,7,1000)\n",
- "h_ideal = np.sinc(k-d)\n",
+ "n = 4\n",
+ "window_sample= np.arange(np.round(d-(n-1)/2),np.round(d+(n+1)/2))\n",
+ "window = []\n",
+ "for ws in window_sample: \n",
+ " idx = (np.abs(k-ws)).argmin()\n",
+ " window.append(idx)\n",
+ " \n",
"plt.plot(k,h_ideal)\n",
+ "plt.plot(window_sample,h_ideal[window],\"*\")\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 30,
+ "id": "17a5bf03",
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -241,22 +137,21 @@
"for ws in window_sample: \n",
" idx = (np.abs(k-ws)).argmin()\n",
" window.append(idx)\n",
+ "\n",
" \n",
+ "fig = plt.figure()\n",
+ "\n",
"plt.plot(k,h_ideal)\n",
- "plt.plot(window_sample,h_ideal[window],\"*\")\n",
- "plt.show()\n"
+ "plt.plot(window_sample,h_ideal[window],\"o\")\n",
+ "plt.xlim(-5,10)\n",
+ "plt.grid(True)\n",
+ "plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "id": "3a82e44c",
"metadata": {},
"outputs": [],
"source": []
@@ -264,7 +159,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -278,7 +173,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.9.2"
}
},
"nbformat": 4,
diff --git a/notebooks/FIR_mehrere.ipynb b/notebooks/FIR_mehrere.ipynb
new file mode 100644
index 0000000..0bf0e1b
--- /dev/null
+++ b/notebooks/FIR_mehrere.ipynb
@@ -0,0 +1,247 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "d828ae1c",
+ "metadata": {},
+ "source": [
+ "# FIR Filter Parameters"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "9aed9f51",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np \n",
+ "from numpy.fft import fft,ifft,fftshift\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "9a16a6d2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Anfangs werte noch variabel machen \n",
+ "delays = [3,5,2]\n",
+ "ampl = [0.2,0.5,0.8]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "04de21c9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#if len(delays)!= len(ampl):\n",
+ "# Exeption ? "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "01fe08fe",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[1, 0, 0, 0, 0.2]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[1]+[0 for n in range (0,delays[0])]+[ampl[0]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9ab70ca5",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "f55da062",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "i = len(ampl)\n",
+ "x = [([1]+[0 for n in range (0,delays[i])]+[ampl[i]]) for i in range(0,i)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "6dc4dc1f",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_5041/4026507591.py:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
+ " np.array(x)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([list([1, 0, 0, 0, 0.2]), list([1, 0, 0, 0, 0, 0, 0.5]),\n",
+ " list([1, 0, 0, 0.8])], dtype=object)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.array(x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5ad0edf9",
+ "metadata": {},
+ "source": [
+ "# Dealy\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "bf92d73a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "d = 2.5\n",
+ "k = np.linspace(-5,10,1000)\n",
+ "h_ideal = np.sinc(k-d)\n",
+ "plt.plot(k,h_ideal)\n",
+ "plt.show()\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "dd93e444",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "n = 4\n",
+ "window_sample= np.arange(np.round(d-(n-1)/2),np.round(d+(n+1)/2))\n",
+ "window = []\n",
+ "for ws in window_sample: \n",
+ " idx = (np.abs(k-ws)).argmin()\n",
+ " window.append(idx)\n",
+ " \n",
+ "plt.plot(k,h_ideal)\n",
+ "plt.plot(window_sample,h_ideal[window],\"-*\")\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "12b0c2d2",
+ "metadata": {},
+ "source": [
+ "# Frequensbereich Faltung "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "de264619",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.25"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sample_rate= 32e3\n",
+ "nsample= 4 \n",
+ "t = 1 / nsample "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "efc93b69",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "f_tabs = np.exp((-2j*np.pi*t))"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/FrameSynchronization.ipynb b/notebooks/FrameSynchronization.ipynb
index 9a7719f..e0187b2 100644
--- a/notebooks/FrameSynchronization.ipynb
+++ b/notebooks/FrameSynchronization.ipynb
@@ -3,7 +3,7 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "5d5acf43",
+ "id": "57a55a8c",
"metadata": {},
"outputs": [],
"source": [
@@ -16,7 +16,7 @@
},
{
"cell_type": "markdown",
- "id": "4b294887",
+ "id": "dc4b9dfd",
"metadata": {},
"source": [
"# Digital Frame Synchronization\n"
@@ -24,22 +24,21 @@
},
{
"cell_type": "code",
- "execution_count": 14,
- "id": "5bec50ff",
- "metadata": {},
+ "execution_count": 27,
+ "id": "025c6919",
+ "metadata": {
+ "scrolled": false
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Header sequence (N=16): [1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1]\n",
- "Cross correlation: [ 3. 3. 4. 4. 4. 4. 3. 6. 7. 7. 3. 6. 6. 8. 7. 6. 7. 11.\n",
- " 8. 7. 7. 10. 8. 8. 10. 8. 10. 7. 8. 8. 8. 10. 8. 11. 12. 9.\n",
- " 8. 10. 8. 11. 9. 10. 9. 16. 10. 10. 10. 12. 10. 14. 9. 10. 9. 13.\n",
- " 11. 9. 11. 8. 9. 11. 9. 9. 8. 8. 7. 9. 12. 5. 7. 9. 7. 10.\n",
- " 12. 6. 6. 9. 8. 6. 8. 5. 5. 8. 7. 5. 5. 4. 3. 4. 3. 3.\n",
- " 3. 3.]\n",
- "Corrlation peak value: 16.0\n"
+ "Header (N=16): [1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1]\n",
+ "Stream (N=80): [0 0 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1\n",
+ " 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 0\n",
+ " 0 1 1 1 0 1]\n",
+ "Correlation peak value: 16 at i=47\n"
]
},
{
@@ -48,13 +47,13 @@
"<StemContainer object of 3 artists>"
]
},
- "execution_count": 14,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
"<Figure size 1800x360 with 1 Axes>"
]
@@ -67,42 +66,40 @@
],
"source": [
"# Create test data\n",
- "seq = np.array([(0xbeef >> i) & 0x1 for i in range(4 * 4)])\n",
- "# seq = np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])\n",
- "\n",
+ "seq = np.unpackbits(np.array([0xbe, 0xef], dtype=np.dtype(\"uint8\")))\n",
"stream = np.concatenate([\n",
- " np.random.randint(low=0, high=2, size=30), seq, np.random.randint(low=0, high=2, size=30)\n",
+ " np.random.randint(low=0, high=2, size=32), seq, np.random.randint(low=0, high=2, size=32)\n",
"])\n",
"\n",
- "print(f\"Header sequence (N={len(seq)}): {seq}\")\n",
- "# print(f\"Data stream: {stream}\")\n",
+ "print(f\"Header (N={len(seq)}): {seq}\")\n",
+ "print(f\"Stream (N={len(stream)}): {stream}\")\n",
"\n",
- "# compute cross correlation\n",
- "def distance(v):\n",
- " return len(seq) - sum(np.logical_xor(v, seq))\n",
- "\n",
- "fifo = RingBuffer(len(seq))\n",
- "xcorr = RingBuffer(len(stream) + len(seq))\n",
+ "# Create buffers for cross correlation\n",
+ "fifo = RingBuffer(len(seq), dtype=np.dtype(\"uint8\"))\n",
+ "xcorr = RingBuffer(len(stream) + len(seq), dtype=np.dtype(\"uint8\"))\n",
"\n",
"## fill FIFO with zeros\n",
"fifo.extend(np.zeros(fifo.maxlen))\n",
"\n",
- "for i in range(len(stream) + len(seq)):\n",
- " #print(np.array(fifo))\n",
- " xcorr.append(distance(np.array(fifo)))\n",
+ "def correlation(v):\n",
+ " n = len(seq)\n",
+ " d = np.logical_xor(v, seq) # or bitwise_xor, no difference in this case\n",
+ " return n - sum(d)\n",
+ " \n",
+ "for i in range(len(stream) + len(seq) + 1):\n",
+ " xcorr.append(correlation(np.array(fifo)))\n",
" \n",
+ " # append stream data\n",
" # if the stream is finished use zeros\n",
- " fifo.pop()\n",
- " if i < len(stream):\n",
- " fifo.appendleft(stream[i])\n",
- " else:\n",
- " fifo.appendleft(0)\n",
+ " fifo.append(stream[i] if i < len(stream) else 0)\n",
"\n",
- "print(f\"Cross correlation: {np.array(xcorr)}\")\n",
- "print(f\"Correlation peak value: {max(np.array(xcorr))}\")\n",
+ "# unwrap values\n",
+ "xc = np.array(xcorr)\n",
+ "# print(f\"Cross correlation: {xc}\")\n",
+ "print(f\"Correlation peak value: {np.amax(xc)} at i={np.argmax(xc)}\")\n",
"\n",
"plt.figure(figsize = (25, 5))\n",
- "plt.stem(np.array(xcorr))"
+ "plt.stem(xc)"
]
}
],
diff --git a/notebooks/Untitled.ipynb b/notebooks/Untitled.ipynb
index 6350dc3..0a1a81c 100644
--- a/notebooks/Untitled.ipynb
+++ b/notebooks/Untitled.ipynb
@@ -167,46 +167,6 @@
"metadata": {},
"outputs": [],
"source": []
- },
- {
- "cell_type": "markdown",
- "id": "4c190dbf",
- "metadata": {},
- "source": [
- "# Delay as a Convolution System"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "0929e51c",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 0, 0, 1]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Create the FIR\n",
- "D = 3 # Delay value\n",
- "h = [0]*D+[1]\n",
- "h"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "1b8438b2",
- "metadata": {},
- "outputs": [],
- "source": []
}
],
"metadata": {
diff --git a/notebooks/Untitled1.ipynb b/notebooks/Untitled1.ipynb
new file mode 100644
index 0000000..652e4fe
--- /dev/null
+++ b/notebooks/Untitled1.ipynb
@@ -0,0 +1,33 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f7f019cc",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/Untitled2.ipynb b/notebooks/Untitled2.ipynb
new file mode 100644
index 0000000..4515e16
--- /dev/null
+++ b/notebooks/Untitled2.ipynb
@@ -0,0 +1,182 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "c9db320e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 3 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#!python\n",
+ "\n",
+ "from numpy import cos, sin, pi, absolute, arange\n",
+ "from scipy.signal import kaiserord, lfilter, firwin, freqz\n",
+ "from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show\n",
+ "\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Create a signal for demonstration.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "sample_rate = 100.0\n",
+ "nsamples = 400\n",
+ "t = arange(nsamples) / sample_rate\n",
+ "x = cos(2*pi*0.5*t) + 0.2*sin(2*pi*2.5*t+0.1) + \\\n",
+ " 0.2*sin(2*pi*15.3*t) + 0.1*sin(2*pi*16.7*t + 0.1) + \\\n",
+ " 0.1*sin(2*pi*23.45*t+.8)\n",
+ "\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Create a FIR filter and apply it to x.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "# The Nyquist rate of the signal.\n",
+ "nyq_rate = sample_rate / 2.0\n",
+ "\n",
+ "# The desired width of the transition from pass to stop,\n",
+ "# relative to the Nyquist rate. We'll design the filter\n",
+ "# with a 5 Hz transition width.\n",
+ "width = 5.0/nyq_rate\n",
+ "\n",
+ "# The desired attenuation in the stop band, in dB.\n",
+ "ripple_db = 60.0\n",
+ "\n",
+ "# Compute the order and Kaiser parameter for the FIR filter.\n",
+ "N, beta = kaiserord(ripple_db, width)\n",
+ "\n",
+ "# The cutoff frequency of the filter.\n",
+ "cutoff_hz = 10.0\n",
+ "\n",
+ "# Use firwin with a Kaiser window to create a lowpass FIR filter.\n",
+ "taps = firwin(N, cutoff_hz/nyq_rate, window=('kaiser', beta))\n",
+ "\n",
+ "# Use lfilter to filter x with the FIR filter.\n",
+ "filtered_x = lfilter(taps, 1.0, x)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the FIR filter coefficients.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "figure(1)\n",
+ "plot(taps, 'bo-', linewidth=2)\n",
+ "title('Filter Coefficients (%d taps)' % N)\n",
+ "grid(True)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the magnitude response of the filter.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "figure(2)\n",
+ "clf()\n",
+ "w, h = freqz(taps, worN=8000)\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlabel('Frequency (Hz)')\n",
+ "ylabel('Gain')\n",
+ "title('Frequency Response')\n",
+ "ylim(-0.05, 1.05)\n",
+ "grid(True)\n",
+ "\n",
+ "# Upper inset plot.\n",
+ "ax1 = axes([0.42, 0.6, .45, .25])\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlim(0,8.0)\n",
+ "ylim(0.9985, 1.001)\n",
+ "grid(True)\n",
+ "\n",
+ "# Lower inset plot\n",
+ "ax2 = axes([0.42, 0.25, .45, .25])\n",
+ "plot((w/pi)*nyq_rate, absolute(h), linewidth=2)\n",
+ "xlim(12.0, 20.0)\n",
+ "ylim(0.0, 0.0025)\n",
+ "grid(True)\n",
+ "\n",
+ "#------------------------------------------------\n",
+ "# Plot the original and filtered signals.\n",
+ "#------------------------------------------------\n",
+ "\n",
+ "# The phase delay of the filtered signal.\n",
+ "delay = 0.5 * (N-1) / sample_rate\n",
+ "\n",
+ "figure(3)\n",
+ "# Plot the original signal.\n",
+ "plot(t, x)\n",
+ "# Plot the filtered signal, shifted to compensate for the phase delay.\n",
+ "plot(t-delay, filtered_x, 'r-')\n",
+ "# Plot just the \"good\" part of the filtered signal. The first N-1\n",
+ "# samples are \"corrupted\" by the initial conditions.\n",
+ "plot(t[N-1:]-delay, filtered_x[N-1:], 'g', linewidth=4)\n",
+ "\n",
+ "xlabel('t')\n",
+ "grid(True)\n",
+ "\n",
+ "show()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9513b663",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/simulation/QAM_Fading/epy_block_0.py b/simulation/QAM_Fading/epy_block_0.py
new file mode 100644
index 0000000..8c7e300
--- /dev/null
+++ b/simulation/QAM_Fading/epy_block_0.py
@@ -0,0 +1,50 @@
+"""
+Embedded Python Blocks:
+
+Each time this file is saved, GRC will instantiate the first class it finds
+to get ports and parameters of your block. The arguments to __init__ will
+be the parameters. All of them are required to have default values!
+"""
+
+import numpy as np
+from gnuradio import gr
+
+
+class blk(gr.sync_block): # other base classes are basic_block, decim_block, interp_block
+ """Embedded Python Block example - a simple multiply const"""
+
+ def __init__(self, amplitudes=[], delays=[]): # only default arguments here
+ """arguments to this function show up as parameters in GRC"""
+ gr.sync_block.__init__(
+ self,
+ name='Embedded Python Block', # will show up in GRC
+ in_sig=[np.complex64],
+ out_sig=[np.complex64]
+ )
+ # if an attribute with the same name as a parameter is found,
+ # a callback is registered (properties work, too).
+ self.amplitues = amplitudes
+ self.delays = delays
+
+ #self.fir =
+
+ def work(self, input_items, output_items):
+ """example: multiply with constant"""
+ inp = input_items[0]
+ oup = output_items[0]
+ amplitudes = [0.2, 0.5 ,0.8]
+ delays = [3,5,2]
+ i = len(amplitudes)
+
+ outp[:] = [([1]+[0 for n in range (0,delays[i])]+[amplitudes[i]]) for i in range(0,i)]
+
+ return len(output_items[0])
+
+
+if __name__ == '__main__':
+ ampl = [0.2, 0.5 ,0.8]
+ delays = [3,5,2]
+ i = len(ampl)
+ [([1]+[0 for n in range (0,delays[i])]+[ampl[i]]) for i in range(0,i)]
+
+
diff --git a/simulation/QAM_Fading/qam_fading.py b/simulation/QAM_Fading/qam_fading.py
index 01685a1..ac1106c 100755
--- a/simulation/QAM_Fading/qam_fading.py
+++ b/simulation/QAM_Fading/qam_fading.py
@@ -93,7 +93,7 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.eq_gain = eq_gain = .01
self.const = const = digital.constellation_16qam().base()
self.chn_taps = chn_taps = [1.0 + 0.0j, ]
- self.amp = amp = 0.2
+ self.amp_1 = amp_1 = 0.2
self.LOS_NLOS = LOS_NLOS = 1
##################################################
@@ -168,13 +168,6 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.params_grid_layout_0.setRowStretch(r, 1)
for c in range(0, 1):
self.params_grid_layout_0.setColumnStretch(c, 1)
- self._fading_1_range = Range(1, 30, 1, 2, 200)
- self._fading_1_win = RangeWidget(self._fading_1_range, self.set_fading_1, 'Fading', "counter_slider", int)
- self.params_grid_layout_2.addWidget(self._fading_1_win, 0, 0, 1, 1)
- for r in range(0, 1):
- self.params_grid_layout_2.setRowStretch(r, 1)
- for c in range(0, 1):
- self.params_grid_layout_2.setColumnStretch(c, 1)
self._eq_gain_range = Range(0, .1, .001, .01, 200)
self._eq_gain_win = RangeWidget(self._eq_gain_range, self.set_eq_gain, 'Equalizer Rate', "counter_slider", float)
self.params_grid_layout_1.addWidget(self._eq_gain_win, 0, 0, 1, 1)
@@ -182,20 +175,13 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.params_grid_layout_1.setRowStretch(r, 1)
for c in range(0, 1):
self.params_grid_layout_1.setColumnStretch(c, 1)
- self._amp_range = Range(0, 5, 0.1, 0.2, 200)
- self._amp_win = RangeWidget(self._amp_range, self.set_amp, 'Ampliude', "counter_slider", float)
- self.params_grid_layout_2.addWidget(self._amp_win, 1, 0, 1, 1)
+ self._amp_1_range = Range(0, 5, 0.1, 0.2, 200)
+ self._amp_1_win = RangeWidget(self._amp_1_range, self.set_amp_1, 'Ampliude', "counter_slider", float)
+ self.params_grid_layout_2.addWidget(self._amp_1_win, 1, 0, 1, 1)
for r in range(1, 2):
self.params_grid_layout_2.setRowStretch(r, 1)
for c in range(0, 1):
self.params_grid_layout_2.setColumnStretch(c, 1)
- self._LOS_NLOS_range = Range(0, 1, 1, 1, 200)
- self._LOS_NLOS_win = RangeWidget(self._LOS_NLOS_range, self.set_LOS_NLOS, 'LOS_NLOS', "counter_slider", int)
- self.params_grid_layout_2.addWidget(self._LOS_NLOS_win, 0, 1, 1, 1)
- for r in range(0, 1):
- self.params_grid_layout_2.setRowStretch(r, 1)
- for c in range(1, 2):
- self.params_grid_layout_2.setColumnStretch(c, 1)
self.qtgui_time_sink_x_0 = qtgui.time_sink_f(
1024, #size
samp_rate, #samp_rate
@@ -512,8 +498,15 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.plots_grid_layout_0.setRowStretch(r, 1)
for c in range(0, 1):
self.plots_grid_layout_0.setColumnStretch(c, 1)
- self.interp_fir_filter_xxx_0 = filter.interp_fir_filter_ccc(1, [LOS_NLOS]+([0]*fading_1)+[amp])
- self.interp_fir_filter_xxx_0.declare_sample_delay(0)
+ self.interp_fir_filter_xxx_0 = filter.interp_fir_filter_ccc(1, [amp_1])
+ self.interp_fir_filter_xxx_0.declare_sample_delay(2)
+ self._fading_1_range = Range(1, 30, 1, 2, 200)
+ self._fading_1_win = RangeWidget(self._fading_1_range, self.set_fading_1, 'Fading', "counter_slider", int)
+ self.params_grid_layout_2.addWidget(self._fading_1_win, 0, 0, 1, 1)
+ for r in range(0, 1):
+ self.params_grid_layout_2.setRowStretch(r, 1)
+ for c in range(0, 1):
+ self.params_grid_layout_2.setColumnStretch(c, 1)
self.digital_pfb_clock_sync_xxx_0_0 = digital.pfb_clock_sync_ccf(sps , timing_loop_bw, rrc_taps, nfilts, nfilts/2, 1.5, 1)
self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(sps, timing_loop_bw, rrc_taps, nfilts, nfilts/2, 1.5, 1)
self.digital_map_bb_0_0 = digital.map_bb([0, 1, 3, 2])
@@ -545,13 +538,18 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.blocks_unpack_k_bits_bb_0_0 = blocks.unpack_k_bits_bb(2)
self.blocks_unpack_k_bits_bb_0 = blocks.unpack_k_bits_bb(2)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
- self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_float*1, '/home/sara/Documents/Fading/simulation/QAM_Fading/qam_fading_V2_output.grc', False)
- self.blocks_file_sink_0.set_unbuffered(False)
self.blocks_delay_0 = blocks.delay(gr.sizeof_float*1, 50)
self.blocks_char_to_float_0_1 = blocks.char_to_float(1, 1)
self.blocks_char_to_float_0_0 = blocks.char_to_float(1, 1)
self.blocks_char_to_float_0 = blocks.char_to_float(1, 1)
self.analog_random_source_x_0 = blocks.vector_source_b(list(map(int, numpy.random.randint(0, 256, 1000))), True)
+ self._LOS_NLOS_range = Range(0, 1, 1, 1, 200)
+ self._LOS_NLOS_win = RangeWidget(self._LOS_NLOS_range, self.set_LOS_NLOS, 'LOS_NLOS', "counter_slider", int)
+ self.params_grid_layout_2.addWidget(self._LOS_NLOS_win, 0, 1, 1, 1)
+ for r in range(0, 1):
+ self.params_grid_layout_2.setRowStretch(r, 1)
+ for c in range(1, 2):
+ self.params_grid_layout_2.setColumnStretch(c, 1)
@@ -560,7 +558,6 @@ class qam_fading(gr.top_block, Qt.QWidget):
##################################################
self.connect((self.analog_random_source_x_0, 0), (self.blocks_unpack_k_bits_bb_0_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.digital_constellation_modulator_0, 0))
- self.connect((self.blocks_char_to_float_0, 0), (self.blocks_file_sink_0, 0))
self.connect((self.blocks_char_to_float_0, 0), (self.qtgui_freq_sink_x_2_1, 0))
self.connect((self.blocks_char_to_float_0, 0), (self.qtgui_time_sink_x_0, 0))
self.connect((self.blocks_char_to_float_0_0, 0), (self.blocks_delay_0, 0))
@@ -685,7 +682,6 @@ class qam_fading(gr.top_block, Qt.QWidget):
def set_fading_1(self, fading_1):
self.fading_1 = fading_1
- self.interp_fir_filter_xxx_0.set_taps([self.LOS_NLOS]+([0]*self.fading_1)+[self.amp])
def get_eq_ntaps(self):
return self.eq_ntaps
@@ -722,19 +718,18 @@ class qam_fading(gr.top_block, Qt.QWidget):
self.chn_taps = chn_taps
self.channels_channel_model_0.set_taps(self.chn_taps)
- def get_amp(self):
- return self.amp
+ def get_amp_1(self):
+ return self.amp_1
- def set_amp(self, amp):
- self.amp = amp
- self.interp_fir_filter_xxx_0.set_taps([self.LOS_NLOS]+([0]*self.fading_1)+[self.amp])
+ def set_amp_1(self, amp_1):
+ self.amp_1 = amp_1
+ self.interp_fir_filter_xxx_0.set_taps([self.amp_1])
def get_LOS_NLOS(self):
return self.LOS_NLOS
def set_LOS_NLOS(self, LOS_NLOS):
self.LOS_NLOS = LOS_NLOS
- self.interp_fir_filter_xxx_0.set_taps([self.LOS_NLOS]+([0]*self.fading_1)+[self.amp])
diff --git a/simulation/QAM_Fading/qam_fading_V2.grc b/simulation/QAM_Fading/qam_fading_V2.grc
index 2f61a71..5ab2545 100644
--- a/simulation/QAM_Fading/qam_fading_V2.grc
+++ b/simulation/QAM_Fading/qam_fading_V2.grc
@@ -53,7 +53,7 @@ blocks:
coordinate: [1104, 484.0]
rotation: 0
state: true
-- name: amp
+- name: amp_1
id: variable_qtgui_range
parameters:
comment: ''
@@ -71,7 +71,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [1040, 612.0]
+ coordinate: [984, 612.0]
rotation: 0
state: true
- name: chn_taps
@@ -790,14 +790,14 @@ blocks:
interp: '1'
maxoutbuf: '0'
minoutbuf: '0'
- samp_delay: '0'
- taps: '[LOS_NLOS]+([0]*fading_1)+[amp]'
+ samp_delay: '2'
+ taps: '[amp_1]'
type: ccc
states:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [1024, 340.0]
+ coordinate: [1000, 340.0]
rotation: 0
state: enabled
- name: params
@@ -957,7 +957,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [1044.0, -32]
+ coordinate: [1052.0, -48]
rotation: 90
state: enabled
- name: qtgui_const_sink_x_0_0
diff --git a/simulation/QAM_Fading/qam_fading_V2_eigerner_block.grc b/simulation/QAM_Fading/qam_fading_V2_eigerner_block.grc
new file mode 100644
index 0000000..359e3d0
--- /dev/null
+++ b/simulation/QAM_Fading/qam_fading_V2_eigerner_block.grc
@@ -0,0 +1,1646 @@
+options:
+ parameters:
+ author: Pross Naoki, Halter Sara Cinzia
+ category: '[GRC Hier Blocks]'
+ cmake_opt: ''
+ comment: ''
+ copyright: ''
+ description: ''
+ gen_cmake: 'On'
+ gen_linking: dynamic
+ generate_options: qt_gui
+ hier_block_src_path: '.:'
+ id: qam_fading
+ max_nouts: '0'
+ output_language: python
+ placement: (0,0)
+ qt_qss_theme: ''
+ realtime_scheduling: '1'
+ run: 'True'
+ run_command: '{python} -u {filename}'
+ run_options: prompt
+ sizing_mode: fixed
+ thread_safe_setters: ''
+ title: QAM mit Fading
+ window_size: ''
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 8]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: LOS_NLOS
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 0,0,1,1'
+ label: LOS_NLOS
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '1'
+ value: '1'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 444.0]
+ rotation: 0
+ state: true
+- name: amp_1
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 1,1,1,1'
+ label: Ampliude
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0.2'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1056, 580.0]
+ rotation: 0
+ state: true
+- name: amp_2
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 2,1,1,1'
+ label: Ampliude 2
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1064, 716.0]
+ rotation: 0
+ state: true
+- name: amp_3
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 3,1,1,1'
+ label: Ampliude 3
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1064, 852.0]
+ rotation: 0
+ state: true
+- name: chn_taps
+ id: variable
+ parameters:
+ comment: ''
+ value: '[1.0 + 0.0j, ]'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [672, 236.0]
+ rotation: 0
+ state: true
+- name: const
+ id: variable_constellation
+ parameters:
+ comment: ''
+ const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]'
+ dims: '1'
+ precision: '8'
+ rot_sym: '4'
+ soft_dec_lut: None
+ sym_map: '[0, 1, 3, 2]'
+ type: 16qam
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 428.0]
+ rotation: 0
+ state: true
+- name: eq_gain
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@1: 0,0,1,1'
+ label: Equalizer Rate
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '.001'
+ stop: '.1'
+ value: '.01'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 452.0]
+ rotation: 0
+ state: true
+- name: eq_mod
+ id: variable
+ parameters:
+ comment: ''
+ value: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 376.0]
+ rotation: 0
+ state: true
+- name: eq_ntaps
+ id: variable
+ parameters:
+ comment: ''
+ value: '15'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1824, 376.0]
+ rotation: 0
+ state: true
+- name: excess_bw
+ id: variable
+ parameters:
+ comment: ''
+ value: 350e-3
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [320, 268.0]
+ rotation: 0
+ state: true
+- name: fading_1
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 1,0,1,1'
+ label: Fading
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '1'
+ step: '1'
+ stop: '30'
+ value: '2'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 580.0]
+ rotation: 0
+ state: true
+- name: fading_2
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 2,0,1,1'
+ label: Fading 2
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '30'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 716.0]
+ rotation: 0
+ state: true
+- name: fading_3
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 3,0,1,1'
+ label: Fading 3
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '30'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 852.0]
+ rotation: 0
+ state: true
+- name: freq_offset
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 1,0,1,1'
+ label: Frequency Offset
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: -100e-3
+ step: 1e-3
+ stop: 100e-3
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [712, 476.0]
+ rotation: 0
+ state: true
+- name: nfilts
+ id: variable
+ parameters:
+ comment: ''
+ value: '32'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 104.0]
+ rotation: 0
+ state: true
+- name: noise_volt
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 0,0,1,1'
+ label: Noise Voltage
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.01'
+ stop: '1'
+ value: '0.0001'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [576, 476.0]
+ rotation: 0
+ state: true
+- name: phase_bw
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@1: 1,0,1,1'
+ label: Phase Bandwidth
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '.01'
+ stop: '1'
+ value: 2 * 3.141592653589793 / 100
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2048, 420.0]
+ rotation: 0
+ state: true
+- name: rrc_taps
+ id: variable
+ parameters:
+ comment: ''
+ value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 45*nfilts)
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1488, 104.0]
+ rotation: 0
+ state: true
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: '32000'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [192, 12.0]
+ rotation: 0
+ state: enabled
+- name: sps
+ id: variable
+ parameters:
+ comment: ''
+ value: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 268.0]
+ rotation: 0
+ state: true
+- name: time_offset
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 0,1,1,1'
+ label: Timing Offset
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0.999'
+ step: '0.0001'
+ stop: '1.001'
+ value: '1.0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [576, 620.0]
+ rotation: 0
+ state: true
+- name: timing_loop_bw
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 1,1,1,1'
+ label: Time Bandwidth
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: 10e-3
+ stop: 200e-3
+ value: 2 * 3.141592653589793 / 100
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 164.0]
+ rotation: 0
+ state: true
+- name: analog_random_source_x_0
+ id: analog_random_source_x
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ max: '256'
+ maxoutbuf: '0'
+ min: '0'
+ minoutbuf: '0'
+ num_samps: '1000'
+ repeat: 'True'
+ type: byte
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [32, 332.0]
+ rotation: 0
+ state: enabled
+- name: blocks_char_to_float_0
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2688, 272.0]
+ rotation: 0
+ state: true
+- name: blocks_char_to_float_0_0
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [424, 1336.0]
+ rotation: 0
+ state: true
+- name: blocks_char_to_float_0_1
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2640, 672.0]
+ rotation: 0
+ state: true
+- name: blocks_delay_0
+ id: blocks_delay
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ delay: '50'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ num_ports: '1'
+ type: float
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2736, 1360.0]
+ rotation: 0
+ state: true
+- name: blocks_file_sink_0
+ id: blocks_file_sink
+ parameters:
+ affinity: ''
+ alias: ''
+ append: 'False'
+ comment: ''
+ file: /home/sara/Documents/Fading/simulation/QAM_Fading/qam_fading_V2_output.grc
+ type: float
+ unbuffered: 'False'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2880, 84.0]
+ rotation: 0
+ state: disabled
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [464, 356.0]
+ rotation: 0
+ state: enabled
+- name: blocks_unpack_k_bits_bb_0
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2608, 432.0]
+ rotation: 0
+ state: true
+- name: blocks_unpack_k_bits_bb_0_0
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [248, 1336.0]
+ rotation: 0
+ state: true
+- name: blocks_unpack_k_bits_bb_0_1
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2544, 848.0]
+ rotation: 0
+ state: true
+- name: channels_channel_model_0
+ id: channels_channel_model
+ parameters:
+ affinity: ''
+ alias: ''
+ block_tags: 'False'
+ comment: ''
+ epsilon: time_offset
+ freq_offset: freq_offset
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ noise_voltage: noise_volt
+ seed: '0'
+ taps: chn_taps
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [648, 316.0]
+ rotation: 0
+ state: enabled
+- name: digital_cma_equalizer_cc_0
+ id: digital_cma_equalizer_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: eq_mod
+ mu: eq_gain
+ num_taps: eq_ntaps
+ sps: '2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 276.0]
+ rotation: 0
+ state: true
+- name: digital_cma_equalizer_cc_0_0
+ id: digital_cma_equalizer_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: eq_mod
+ mu: eq_gain
+ num_taps: eq_ntaps
+ sps: '2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1664, 932.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_decoder_cb_0
+ id: digital_constellation_decoder_cb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2384, 272.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_decoder_cb_0_0
+ id: digital_constellation_decoder_cb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2320, 656.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_modulator_0
+ id: digital_constellation_modulator
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ differential: 'True'
+ excess_bw: excess_bw
+ log: 'False'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_symbol: sps
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 332.0]
+ rotation: 0
+ state: enabled
+- name: digital_costas_loop_cc_0
+ id: digital_costas_loop_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ order: '4'
+ use_snr: 'False'
+ w: phase_bw
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2048, 264.0]
+ rotation: 0
+ state: true
+- name: digital_costas_loop_cc_0_0
+ id: digital_costas_loop_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ order: '4'
+ use_snr: 'False'
+ w: phase_bw
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1984, 928.0]
+ rotation: 0
+ state: true
+- name: digital_diff_decoder_bb_0
+ id: digital_diff_decoder_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2384, 336.0]
+ rotation: 180
+ state: true
+- name: digital_diff_decoder_bb_0_0
+ id: digital_diff_decoder_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2352, 736.0]
+ rotation: 180
+ state: true
+- name: digital_map_bb_0
+ id: digital_map_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ map: '[0, 1, 3, 2]'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2400, 432.0]
+ rotation: 0
+ state: true
+- name: digital_map_bb_0_0
+ id: digital_map_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ map: '[0, 1, 3, 2]'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2368, 848.0]
+ rotation: 0
+ state: true
+- name: digital_pfb_clock_sync_xxx_0
+ id: digital_pfb_clock_sync_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ filter_size: nfilts
+ init_phase: nfilts/2
+ loop_bw: timing_loop_bw
+ max_dev: '1.5'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ osps: '1'
+ sps: sps
+ taps: rrc_taps
+ type: ccf
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 300.0]
+ rotation: 0
+ state: true
+- name: digital_pfb_clock_sync_xxx_0_0
+ id: digital_pfb_clock_sync_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ filter_size: nfilts
+ init_phase: nfilts/2
+ loop_bw: timing_loop_bw
+ max_dev: '1.5'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ osps: '1'
+ sps: 'sps '
+ taps: rrc_taps
+ type: ccf
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1016, 1204.0]
+ rotation: 0
+ state: true
+- name: epy_block_0
+ id: epy_block
+ parameters:
+ _source_code: "\"\"\"\nEmbedded Python Blocks:\n\nEach time this file is saved,\
+ \ GRC will instantiate the first class it finds\nto get ports and parameters\
+ \ of your block. The arguments to __init__ will\nbe the parameters. All of\
+ \ them are required to have default values!\n\"\"\"\n\nimport numpy as np\n\
+ from gnuradio import gr\n\n\nclass blk(gr.sync_block): # other base classes\
+ \ are basic_block, decim_block, interp_block\n \"\"\"Embedded Python Block\
+ \ example - a simple multiply const\"\"\"\n\n def __init__(self, amplitudes=[],\
+ \ delays=[]): # only default arguments here\n \"\"\"arguments to this\
+ \ function show up as parameters in GRC\"\"\"\n gr.sync_block.__init__(\n\
+ \ self,\n name='Embedded Python Block', # will show\
+ \ up in GRC\n in_sig=[np.complex64],\n out_sig=[np.complex64]\n\
+ \ )\n # if an attribute with the same name as a parameter is found,\n\
+ \ # a callback is registered (properties work, too).\n self.amplitues\
+ \ = amplitudes\n self.delays = delays\n\n #self.fir = \n\n \
+ \ def work(self, input_items, output_items):\n \"\"\"example: multiply\
+ \ with constant\"\"\"\n inp = input_items[0]\n oup = output_items[0]\n\
+ \ amplitudes = [0.2, 0.5 ,0.8]\n delays = [3,5,2]\n i =\
+ \ len(amplitudes)\n\n outp[:] = [([1]+[0 for n in range (0,delays[i])]+[amplitudes[i]])\
+ \ for i in range(0,i)]\n\n return len(output_items[0])\n\n\nif __name__\
+ \ == '__main__':\n ampl = [0.2, 0.5 ,0.8]\n delays = [3,5,2]\n i =\
+ \ len(ampl)\n [([1]+[0 for n in range (0,delays[i])]+[ampl[i]]) for i in\
+ \ range(0,i)]\n\n\n"
+ affinity: ''
+ alias: ''
+ amplitudes: '[0.2, 0.5 ,0.8]'
+ comment: ''
+ delays: '[3,5,2]'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ _io_cache: ('Embedded Python Block', 'blk', [('amplitudes', '[]'), ('delays',
+ '[]')], [('0', 'complex', 1)], [('0', 'complex', 1)], 'Embedded Python Block
+ example - a simple multiply const', ['delays'])
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [992, 340.0]
+ rotation: 0
+ state: true
+- name: import_0
+ id: import
+ parameters:
+ alias: ''
+ comment: ''
+ imports: import numpy as np
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 20.0]
+ rotation: 0
+ state: true
+- name: params
+ id: qtgui_tab_widget
+ parameters:
+ alias: ''
+ comment: ''
+ gui_hint: ''
+ label0: Channel
+ label1: Receiver
+ label10: Tab 10
+ label11: Tab 11
+ label12: Tab 12
+ label13: Tab 13
+ label14: Tab 14
+ label15: Tab 15
+ label16: Tab 16
+ label17: Tab 17
+ label18: Tab 18
+ label19: Tab 19
+ label2: Fading
+ label3: Tab 3
+ label4: Tab 4
+ label5: Tab 5
+ label6: Tab 6
+ label7: Tab 7
+ label8: Tab 8
+ label9: Tab 9
+ num_tabs: '3'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [296, 12.0]
+ rotation: 0
+ state: true
+- name: plots
+ id: qtgui_tab_widget
+ parameters:
+ alias: ''
+ comment: ''
+ gui_hint: ''
+ label0: Constellations
+ label1: Frequency
+ label10: Tab 10
+ label11: Tab 11
+ label12: Tab 12
+ label13: Tab 13
+ label14: Tab 14
+ label15: Tab 15
+ label16: Tab 16
+ label17: Tab 17
+ label18: Tab 18
+ label19: Tab 19
+ label2: Time
+ label3: Tab 3
+ label4: Tab 4
+ label5: Tab 5
+ label6: Tab 6
+ label7: Tab 7
+ label8: Tab 8
+ label9: Tab 9
+ num_tabs: '3'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [448, 12.0]
+ rotation: 0
+ state: true
+- name: qtgui_const_sink_x_0
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 0,0,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Channel"'
+ nconnections: '2'
+ size: '2048'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1004.0, -96]
+ rotation: 90
+ state: enabled
+- name: qtgui_const_sink_x_0_0
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 0,1,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Synchronized"'
+ nconnections: '2'
+ size: '2048'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1656.0, 56]
+ rotation: 90
+ state: enabled
+- name: qtgui_const_sink_x_1
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 1,0,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Equalized"'
+ nconnections: '2'
+ size: '1024'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1896.0, 24]
+ rotation: 90
+ state: true
+- name: qtgui_const_sink_x_2
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 1,1,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Locked"'
+ nconnections: '2'
+ size: '1024'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2280.0, -24]
+ rotation: 90
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '"blue"'
+ color10: '"dark blue"'
+ color2: '"red"'
+ color3: '"green"'
+ color4: '"black"'
+ color5: '"cyan"'
+ color6: '"magenta"'
+ color7: '"yellow"'
+ color8: '"dark red"'
+ color9: '"dark green"'
+ comment: ''
+ ctrlpanel: 'False'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: 'plots@1: 0,0,1,1'
+ label: Relative Gain
+ label1: Fading
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '"Channel"'
+ nconnections: '2'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: firdes.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1256.0, 560]
+ rotation: 270
+ state: true
+- name: qtgui_freq_sink_x_2_1
+ id: qtgui_freq_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '"blue"'
+ color10: '"dark blue"'
+ color2: '"red"'
+ color3: '"green"'
+ color4: '"black"'
+ color5: '"cyan"'
+ color6: '"magenta"'
+ color7: '"yellow"'
+ color8: '"dark red"'
+ color9: '"dark green"'
+ comment: ''
+ ctrlpanel: 'False'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: 'plots@1: 1,0,1,1'
+ label: Relative Gain
+ label1: Fading
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '2'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: float
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: firdes.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2944, 456.0]
+ rotation: 0
+ state: true
+- name: qtgui_time_sink_x_0
+ id: qtgui_time_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: blue
+ color10: dark blue
+ color2: red
+ color3: green
+ color4: black
+ color5: cyan
+ color6: magenta
+ color7: yellow
+ color8: dark red
+ color9: dark green
+ comment: ''
+ ctrlpanel: 'False'
+ entags: 'True'
+ grid: 'False'
+ gui_hint: 'plots@2: 0,0,1,1'
+ label1: Received
+ label10: Signal 10
+ label2: Sent
+ label3: Signal 3
+ label4: Signal 4
+ label5: Signal 5
+ label6: Signal 6
+ label7: Signal 7
+ label8: Signal 8
+ label9: Signal 9
+ legend: 'True'
+ marker1: '-1'
+ marker10: '-1'
+ marker2: '-1'
+ marker3: '-1'
+ marker4: '-1'
+ marker5: '-1'
+ marker6: '-1'
+ marker7: '-1'
+ marker8: '-1'
+ marker9: '-1'
+ name: '"Decoded"'
+ nconnections: '3'
+ size: '1024'
+ srate: samp_rate
+ stemplot: 'False'
+ style1: '1'
+ style10: '1'
+ style2: '1'
+ style3: '1'
+ style4: '1'
+ style5: '1'
+ style6: '1'
+ style7: '1'
+ style8: '1'
+ style9: '1'
+ tr_chan: '0'
+ tr_delay: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: float
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ ylabel: Amplitude
+ ymax: '1'
+ ymin: '-1'
+ yunit: '""'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2912, 260.0]
+ rotation: 0
+ state: true
+
+connections:
+- [analog_random_source_x_0, '0', blocks_unpack_k_bits_bb_0_0, '0']
+- [analog_random_source_x_0, '0', digital_constellation_modulator_0, '0']
+- [blocks_char_to_float_0, '0', blocks_file_sink_0, '0']
+- [blocks_char_to_float_0, '0', qtgui_freq_sink_x_2_1, '0']
+- [blocks_char_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_char_to_float_0_0, '0', blocks_delay_0, '0']
+- [blocks_char_to_float_0_1, '0', qtgui_freq_sink_x_2_1, '1']
+- [blocks_char_to_float_0_1, '0', qtgui_time_sink_x_0, '2']
+- [blocks_delay_0, '0', qtgui_time_sink_x_0, '1']
+- [blocks_throttle_0, '0', channels_channel_model_0, '0']
+- [blocks_unpack_k_bits_bb_0, '0', blocks_char_to_float_0, '0']
+- [blocks_unpack_k_bits_bb_0_0, '0', blocks_char_to_float_0_0, '0']
+- [blocks_unpack_k_bits_bb_0_1, '0', blocks_char_to_float_0_1, '0']
+- [channels_channel_model_0, '0', digital_pfb_clock_sync_xxx_0_0, '0']
+- [channels_channel_model_0, '0', epy_block_0, '0']
+- [channels_channel_model_0, '0', qtgui_const_sink_x_0, '1']
+- [channels_channel_model_0, '0', qtgui_freq_sink_x_0, '1']
+- [digital_cma_equalizer_cc_0, '0', digital_costas_loop_cc_0, '0']
+- [digital_cma_equalizer_cc_0, '0', qtgui_const_sink_x_1, '0']
+- [digital_cma_equalizer_cc_0_0, '0', digital_costas_loop_cc_0_0, '0']
+- [digital_cma_equalizer_cc_0_0, '0', qtgui_const_sink_x_1, '1']
+- [digital_constellation_decoder_cb_0, '0', digital_diff_decoder_bb_0, '0']
+- [digital_constellation_decoder_cb_0_0, '0', digital_diff_decoder_bb_0_0, '0']
+- [digital_constellation_modulator_0, '0', blocks_throttle_0, '0']
+- [digital_costas_loop_cc_0, '0', digital_constellation_decoder_cb_0, '0']
+- [digital_costas_loop_cc_0, '0', qtgui_const_sink_x_2, '0']
+- [digital_costas_loop_cc_0_0, '0', digital_constellation_decoder_cb_0_0, '0']
+- [digital_costas_loop_cc_0_0, '0', qtgui_const_sink_x_2, '1']
+- [digital_diff_decoder_bb_0, '0', digital_map_bb_0, '0']
+- [digital_diff_decoder_bb_0_0, '0', digital_map_bb_0_0, '0']
+- [digital_map_bb_0, '0', blocks_unpack_k_bits_bb_0, '0']
+- [digital_map_bb_0_0, '0', blocks_unpack_k_bits_bb_0_1, '0']
+- [digital_pfb_clock_sync_xxx_0, '0', digital_cma_equalizer_cc_0, '0']
+- [digital_pfb_clock_sync_xxx_0, '0', qtgui_const_sink_x_0_0, '0']
+- [digital_pfb_clock_sync_xxx_0_0, '0', digital_cma_equalizer_cc_0_0, '0']
+- [digital_pfb_clock_sync_xxx_0_0, '0', qtgui_const_sink_x_0_0, '1']
+- [epy_block_0, '0', digital_pfb_clock_sync_xxx_0, '0']
+- [epy_block_0, '0', qtgui_const_sink_x_0, '0']
+- [epy_block_0, '0', qtgui_freq_sink_x_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/simulation/QAM_Fading/qam_fading_V2_mehrere.grc b/simulation/QAM_Fading/qam_fading_V2_mehrere.grc
new file mode 100644
index 0000000..d5444ad
--- /dev/null
+++ b/simulation/QAM_Fading/qam_fading_V2_mehrere.grc
@@ -0,0 +1,1623 @@
+options:
+ parameters:
+ author: Pross Naoki, Halter Sara Cinzia
+ category: '[GRC Hier Blocks]'
+ cmake_opt: ''
+ comment: ''
+ copyright: ''
+ description: ''
+ gen_cmake: 'On'
+ gen_linking: dynamic
+ generate_options: qt_gui
+ hier_block_src_path: '.:'
+ id: qam_fading
+ max_nouts: '0'
+ output_language: python
+ placement: (0,0)
+ qt_qss_theme: ''
+ realtime_scheduling: '1'
+ run: 'True'
+ run_command: '{python} -u {filename}'
+ run_options: prompt
+ sizing_mode: fixed
+ thread_safe_setters: ''
+ title: QAM mit Fading
+ window_size: ''
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [8, 8]
+ rotation: 0
+ state: enabled
+
+blocks:
+- name: LOS_NLOS
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 0,0,1,1'
+ label: LOS_NLOS
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '1'
+ value: '1'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 444.0]
+ rotation: 0
+ state: true
+- name: amp_1
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 1,1,1,1'
+ label: Ampliude
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0.2'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1056, 580.0]
+ rotation: 0
+ state: true
+- name: amp_2
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 2,1,1,1'
+ label: Ampliude 2
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1064, 716.0]
+ rotation: 0
+ state: true
+- name: amp_3
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 3,1,1,1'
+ label: Ampliude 3
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.1'
+ stop: '5'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1064, 852.0]
+ rotation: 0
+ state: true
+- name: chn_taps
+ id: variable
+ parameters:
+ comment: ''
+ value: '[1.0 + 0.0j, ]'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [672, 236.0]
+ rotation: 0
+ state: true
+- name: const
+ id: variable_constellation
+ parameters:
+ comment: ''
+ const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]'
+ dims: '1'
+ precision: '8'
+ rot_sym: '4'
+ soft_dec_lut: None
+ sym_map: '[0, 1, 3, 2]'
+ type: 16qam
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 428.0]
+ rotation: 0
+ state: true
+- name: eq_gain
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@1: 0,0,1,1'
+ label: Equalizer Rate
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '.001'
+ stop: '.1'
+ value: '.01'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 452.0]
+ rotation: 0
+ state: true
+- name: eq_mod
+ id: variable
+ parameters:
+ comment: ''
+ value: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 376.0]
+ rotation: 0
+ state: true
+- name: eq_ntaps
+ id: variable
+ parameters:
+ comment: ''
+ value: '15'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1824, 376.0]
+ rotation: 0
+ state: true
+- name: excess_bw
+ id: variable
+ parameters:
+ comment: ''
+ value: 350e-3
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [320, 268.0]
+ rotation: 0
+ state: true
+- name: fading_1
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 1,0,1,1'
+ label: Fading
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '1'
+ step: '1'
+ stop: '30'
+ value: '2'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 580.0]
+ rotation: 0
+ state: true
+- name: fading_2
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 2,0,1,1'
+ label: Fading 2
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '30'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 716.0]
+ rotation: 0
+ state: true
+- name: fading_3
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@2: 3,0,1,1'
+ label: Fading 3
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: int
+ start: '0'
+ step: '1'
+ stop: '30'
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [944, 852.0]
+ rotation: 0
+ state: true
+- name: freq_offset
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 1,0,1,1'
+ label: Frequency Offset
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: -100e-3
+ step: 1e-3
+ stop: 100e-3
+ value: '0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [712, 476.0]
+ rotation: 0
+ state: true
+- name: nfilts
+ id: variable
+ parameters:
+ comment: ''
+ value: '32'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 104.0]
+ rotation: 0
+ state: true
+- name: noise_volt
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 0,0,1,1'
+ label: Noise Voltage
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '0.01'
+ stop: '1'
+ value: '0.0001'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [576, 476.0]
+ rotation: 0
+ state: true
+- name: phase_bw
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@1: 1,0,1,1'
+ label: Phase Bandwidth
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: '.01'
+ stop: '1'
+ value: 2 * 3.141592653589793 / 100
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2048, 420.0]
+ rotation: 0
+ state: true
+- name: rrc_taps
+ id: variable
+ parameters:
+ comment: ''
+ value: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 45*nfilts)
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1488, 104.0]
+ rotation: 0
+ state: true
+- name: samp_rate
+ id: variable
+ parameters:
+ comment: ''
+ value: '32000'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [192, 12.0]
+ rotation: 0
+ state: enabled
+- name: sps
+ id: variable
+ parameters:
+ comment: ''
+ value: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 268.0]
+ rotation: 0
+ state: true
+- name: time_offset
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 0,1,1,1'
+ label: Timing Offset
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0.999'
+ step: '0.0001'
+ stop: '1.001'
+ value: '1.0'
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [576, 620.0]
+ rotation: 0
+ state: true
+- name: timing_loop_bw
+ id: variable_qtgui_range
+ parameters:
+ comment: ''
+ gui_hint: 'params@0: 1,1,1,1'
+ label: Time Bandwidth
+ min_len: '200'
+ orient: Qt.Horizontal
+ rangeType: float
+ start: '0'
+ step: 10e-3
+ stop: 200e-3
+ value: 2 * 3.141592653589793 / 100
+ widget: counter_slider
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 164.0]
+ rotation: 0
+ state: true
+- name: analog_random_source_x_0
+ id: analog_random_source_x
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ max: '256'
+ maxoutbuf: '0'
+ min: '0'
+ minoutbuf: '0'
+ num_samps: '1000'
+ repeat: 'True'
+ type: byte
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [32, 332.0]
+ rotation: 0
+ state: enabled
+- name: blocks_char_to_float_0
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2688, 272.0]
+ rotation: 0
+ state: true
+- name: blocks_char_to_float_0_0
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [424, 1336.0]
+ rotation: 0
+ state: true
+- name: blocks_char_to_float_0_1
+ id: blocks_char_to_float
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ scale: '1'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2640, 672.0]
+ rotation: 0
+ state: true
+- name: blocks_delay_0
+ id: blocks_delay
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ delay: '50'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ num_ports: '1'
+ type: float
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2736, 1360.0]
+ rotation: 0
+ state: true
+- name: blocks_file_sink_0
+ id: blocks_file_sink
+ parameters:
+ affinity: ''
+ alias: ''
+ append: 'False'
+ comment: ''
+ file: /home/sara/Documents/Fading/simulation/QAM_Fading/qam_fading_V2_output.grc
+ type: float
+ unbuffered: 'False'
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2880, 84.0]
+ rotation: 0
+ state: disabled
+- name: blocks_throttle_0
+ id: blocks_throttle
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ ignoretag: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_second: samp_rate
+ type: complex
+ vlen: '1'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [464, 356.0]
+ rotation: 0
+ state: enabled
+- name: blocks_unpack_k_bits_bb_0
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2608, 432.0]
+ rotation: 0
+ state: true
+- name: blocks_unpack_k_bits_bb_0_0
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [248, 1336.0]
+ rotation: 0
+ state: true
+- name: blocks_unpack_k_bits_bb_0_1
+ id: blocks_unpack_k_bits_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ k: '2'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2544, 848.0]
+ rotation: 0
+ state: true
+- name: channels_channel_model_0
+ id: channels_channel_model
+ parameters:
+ affinity: ''
+ alias: ''
+ block_tags: 'False'
+ comment: ''
+ epsilon: time_offset
+ freq_offset: freq_offset
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ noise_voltage: noise_volt
+ seed: '0'
+ taps: chn_taps
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [648, 316.0]
+ rotation: 0
+ state: enabled
+- name: digital_cma_equalizer_cc_0
+ id: digital_cma_equalizer_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: eq_mod
+ mu: eq_gain
+ num_taps: eq_ntaps
+ sps: '2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1744, 276.0]
+ rotation: 0
+ state: true
+- name: digital_cma_equalizer_cc_0_0
+ id: digital_cma_equalizer_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: eq_mod
+ mu: eq_gain
+ num_taps: eq_ntaps
+ sps: '2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1664, 932.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_decoder_cb_0
+ id: digital_constellation_decoder_cb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2384, 272.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_decoder_cb_0_0
+ id: digital_constellation_decoder_cb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2320, 656.0]
+ rotation: 0
+ state: true
+- name: digital_constellation_modulator_0
+ id: digital_constellation_modulator
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ constellation: const
+ differential: 'True'
+ excess_bw: excess_bw
+ log: 'False'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samples_per_symbol: sps
+ verbose: 'False'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [224, 332.0]
+ rotation: 0
+ state: enabled
+- name: digital_costas_loop_cc_0
+ id: digital_costas_loop_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ order: '4'
+ use_snr: 'False'
+ w: phase_bw
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2048, 264.0]
+ rotation: 0
+ state: true
+- name: digital_costas_loop_cc_0_0
+ id: digital_costas_loop_cc
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ order: '4'
+ use_snr: 'False'
+ w: phase_bw
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1984, 928.0]
+ rotation: 0
+ state: true
+- name: digital_diff_decoder_bb_0
+ id: digital_diff_decoder_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2384, 336.0]
+ rotation: 180
+ state: true
+- name: digital_diff_decoder_bb_0_0
+ id: digital_diff_decoder_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ modulus: '4'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2352, 736.0]
+ rotation: 180
+ state: true
+- name: digital_map_bb_0
+ id: digital_map_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ map: '[0, 1, 3, 2]'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2400, 432.0]
+ rotation: 0
+ state: true
+- name: digital_map_bb_0_0
+ id: digital_map_bb
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ map: '[0, 1, 3, 2]'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2368, 848.0]
+ rotation: 0
+ state: true
+- name: digital_pfb_clock_sync_xxx_0
+ id: digital_pfb_clock_sync_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ filter_size: nfilts
+ init_phase: nfilts/2
+ loop_bw: timing_loop_bw
+ max_dev: '1.5'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ osps: '1'
+ sps: sps
+ taps: rrc_taps
+ type: ccf
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1408, 300.0]
+ rotation: 0
+ state: true
+- name: digital_pfb_clock_sync_xxx_0_0
+ id: digital_pfb_clock_sync_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ filter_size: nfilts
+ init_phase: nfilts/2
+ loop_bw: timing_loop_bw
+ max_dev: '1.5'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ osps: '1'
+ sps: 'sps '
+ taps: rrc_taps
+ type: ccf
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1016, 1204.0]
+ rotation: 0
+ state: true
+- name: import_0
+ id: import
+ parameters:
+ alias: ''
+ comment: ''
+ imports: import numpy as np
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [600, 20.0]
+ rotation: 0
+ state: true
+- name: interp_fir_filter_xxx_0
+ id: interp_fir_filter_xxx
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ interp: '1'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ samp_delay: '0'
+ taps: '[LOS_NLOS]+(([0]*fading_1)+[amp_1])+(([0]*fading_2)+[amp_2])+(([0]*fading_3)+[amp_3])'
+ type: ccc
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [992, 340.0]
+ rotation: 0
+ state: enabled
+- name: params
+ id: qtgui_tab_widget
+ parameters:
+ alias: ''
+ comment: ''
+ gui_hint: ''
+ label0: Channel
+ label1: Receiver
+ label10: Tab 10
+ label11: Tab 11
+ label12: Tab 12
+ label13: Tab 13
+ label14: Tab 14
+ label15: Tab 15
+ label16: Tab 16
+ label17: Tab 17
+ label18: Tab 18
+ label19: Tab 19
+ label2: Fading
+ label3: Tab 3
+ label4: Tab 4
+ label5: Tab 5
+ label6: Tab 6
+ label7: Tab 7
+ label8: Tab 8
+ label9: Tab 9
+ num_tabs: '3'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [296, 12.0]
+ rotation: 0
+ state: true
+- name: plots
+ id: qtgui_tab_widget
+ parameters:
+ alias: ''
+ comment: ''
+ gui_hint: ''
+ label0: Constellations
+ label1: Frequency
+ label10: Tab 10
+ label11: Tab 11
+ label12: Tab 12
+ label13: Tab 13
+ label14: Tab 14
+ label15: Tab 15
+ label16: Tab 16
+ label17: Tab 17
+ label18: Tab 18
+ label19: Tab 19
+ label2: Time
+ label3: Tab 3
+ label4: Tab 4
+ label5: Tab 5
+ label6: Tab 6
+ label7: Tab 7
+ label8: Tab 8
+ label9: Tab 9
+ num_tabs: '3'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [448, 12.0]
+ rotation: 0
+ state: true
+- name: qtgui_const_sink_x_0
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 0,0,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Channel"'
+ nconnections: '2'
+ size: '2048'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1052.0, -48]
+ rotation: 90
+ state: enabled
+- name: qtgui_const_sink_x_0_0
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 0,1,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Synchronized"'
+ nconnections: '2'
+ size: '2048'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1656.0, 56]
+ rotation: 90
+ state: enabled
+- name: qtgui_const_sink_x_1
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 1,0,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Equalized"'
+ nconnections: '2'
+ size: '1024'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1896.0, 24]
+ rotation: 90
+ state: true
+- name: qtgui_const_sink_x_2
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: 'plots@0: 1,1,1,1'
+ label1: fading
+ label10: ''
+ label2: normal
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '"Locked"'
+ nconnections: '2'
+ size: '1024'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2280.0, -24]
+ rotation: 90
+ state: true
+- name: qtgui_freq_sink_x_0
+ id: qtgui_freq_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '"blue"'
+ color10: '"dark blue"'
+ color2: '"red"'
+ color3: '"green"'
+ color4: '"black"'
+ color5: '"cyan"'
+ color6: '"magenta"'
+ color7: '"yellow"'
+ color8: '"dark red"'
+ color9: '"dark green"'
+ comment: ''
+ ctrlpanel: 'False'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: 'plots@1: 0,0,1,1'
+ label: Relative Gain
+ label1: Fading
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '"Channel"'
+ nconnections: '2'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: complex
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: firdes.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [1256.0, 560]
+ rotation: 270
+ state: true
+- name: qtgui_freq_sink_x_2_1
+ id: qtgui_freq_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ average: '1.0'
+ axislabels: 'True'
+ bw: samp_rate
+ color1: '"blue"'
+ color10: '"dark blue"'
+ color2: '"red"'
+ color3: '"green"'
+ color4: '"black"'
+ color5: '"cyan"'
+ color6: '"magenta"'
+ color7: '"yellow"'
+ color8: '"dark red"'
+ color9: '"dark green"'
+ comment: ''
+ ctrlpanel: 'False'
+ fc: '0'
+ fftsize: '1024'
+ freqhalf: 'True'
+ grid: 'False'
+ gui_hint: 'plots@1: 1,0,1,1'
+ label: Relative Gain
+ label1: Fading
+ label10: ''''''
+ label2: ''''''
+ label3: ''''''
+ label4: ''''''
+ label5: ''''''
+ label6: ''''''
+ label7: ''''''
+ label8: ''''''
+ label9: ''''''
+ legend: 'True'
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ name: '""'
+ nconnections: '2'
+ showports: 'False'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_tag: '""'
+ type: float
+ units: dB
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ wintype: firdes.WIN_BLACKMAN_hARRIS
+ ymax: '10'
+ ymin: '-140'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2944, 456.0]
+ rotation: 0
+ state: true
+- name: qtgui_time_sink_x_0
+ id: qtgui_time_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: blue
+ color10: dark blue
+ color2: red
+ color3: green
+ color4: black
+ color5: cyan
+ color6: magenta
+ color7: yellow
+ color8: dark red
+ color9: dark green
+ comment: ''
+ ctrlpanel: 'False'
+ entags: 'True'
+ grid: 'False'
+ gui_hint: 'plots@2: 0,0,1,1'
+ label1: Received
+ label10: Signal 10
+ label2: Sent
+ label3: Signal 3
+ label4: Signal 4
+ label5: Signal 5
+ label6: Signal 6
+ label7: Signal 7
+ label8: Signal 8
+ label9: Signal 9
+ legend: 'True'
+ marker1: '-1'
+ marker10: '-1'
+ marker2: '-1'
+ marker3: '-1'
+ marker4: '-1'
+ marker5: '-1'
+ marker6: '-1'
+ marker7: '-1'
+ marker8: '-1'
+ marker9: '-1'
+ name: '"Decoded"'
+ nconnections: '3'
+ size: '1024'
+ srate: samp_rate
+ stemplot: 'False'
+ style1: '1'
+ style10: '1'
+ style2: '1'
+ style3: '1'
+ style4: '1'
+ style5: '1'
+ style6: '1'
+ style7: '1'
+ style8: '1'
+ style9: '1'
+ tr_chan: '0'
+ tr_delay: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: float
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ ylabel: Amplitude
+ ymax: '1'
+ ymin: '-1'
+ yunit: '""'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2912, 260.0]
+ rotation: 0
+ state: true
+
+connections:
+- [analog_random_source_x_0, '0', blocks_unpack_k_bits_bb_0_0, '0']
+- [analog_random_source_x_0, '0', digital_constellation_modulator_0, '0']
+- [blocks_char_to_float_0, '0', blocks_file_sink_0, '0']
+- [blocks_char_to_float_0, '0', qtgui_freq_sink_x_2_1, '0']
+- [blocks_char_to_float_0, '0', qtgui_time_sink_x_0, '0']
+- [blocks_char_to_float_0_0, '0', blocks_delay_0, '0']
+- [blocks_char_to_float_0_1, '0', qtgui_freq_sink_x_2_1, '1']
+- [blocks_char_to_float_0_1, '0', qtgui_time_sink_x_0, '2']
+- [blocks_delay_0, '0', qtgui_time_sink_x_0, '1']
+- [blocks_throttle_0, '0', channels_channel_model_0, '0']
+- [blocks_unpack_k_bits_bb_0, '0', blocks_char_to_float_0, '0']
+- [blocks_unpack_k_bits_bb_0_0, '0', blocks_char_to_float_0_0, '0']
+- [blocks_unpack_k_bits_bb_0_1, '0', blocks_char_to_float_0_1, '0']
+- [channels_channel_model_0, '0', digital_pfb_clock_sync_xxx_0_0, '0']
+- [channels_channel_model_0, '0', interp_fir_filter_xxx_0, '0']
+- [channels_channel_model_0, '0', qtgui_const_sink_x_0, '1']
+- [channels_channel_model_0, '0', qtgui_freq_sink_x_0, '1']
+- [digital_cma_equalizer_cc_0, '0', digital_costas_loop_cc_0, '0']
+- [digital_cma_equalizer_cc_0, '0', qtgui_const_sink_x_1, '0']
+- [digital_cma_equalizer_cc_0_0, '0', digital_costas_loop_cc_0_0, '0']
+- [digital_cma_equalizer_cc_0_0, '0', qtgui_const_sink_x_1, '1']
+- [digital_constellation_decoder_cb_0, '0', digital_diff_decoder_bb_0, '0']
+- [digital_constellation_decoder_cb_0_0, '0', digital_diff_decoder_bb_0_0, '0']
+- [digital_constellation_modulator_0, '0', blocks_throttle_0, '0']
+- [digital_costas_loop_cc_0, '0', digital_constellation_decoder_cb_0, '0']
+- [digital_costas_loop_cc_0, '0', qtgui_const_sink_x_2, '0']
+- [digital_costas_loop_cc_0_0, '0', digital_constellation_decoder_cb_0_0, '0']
+- [digital_costas_loop_cc_0_0, '0', qtgui_const_sink_x_2, '1']
+- [digital_diff_decoder_bb_0, '0', digital_map_bb_0, '0']
+- [digital_diff_decoder_bb_0_0, '0', digital_map_bb_0_0, '0']
+- [digital_map_bb_0, '0', blocks_unpack_k_bits_bb_0, '0']
+- [digital_map_bb_0_0, '0', blocks_unpack_k_bits_bb_0_1, '0']
+- [digital_pfb_clock_sync_xxx_0, '0', digital_cma_equalizer_cc_0, '0']
+- [digital_pfb_clock_sync_xxx_0, '0', qtgui_const_sink_x_0_0, '0']
+- [digital_pfb_clock_sync_xxx_0_0, '0', digital_cma_equalizer_cc_0_0, '0']
+- [digital_pfb_clock_sync_xxx_0_0, '0', qtgui_const_sink_x_0_0, '1']
+- [interp_fir_filter_xxx_0, '0', digital_pfb_clock_sync_xxx_0, '0']
+- [interp_fir_filter_xxx_0, '0', qtgui_const_sink_x_0, '0']
+- [interp_fir_filter_xxx_0, '0', qtgui_freq_sink_x_0, '0']
+
+metadata:
+ file_format: 1
diff --git a/src/gr-fadingui/grc/CMakeLists.txt b/src/gr-fadingui/grc/CMakeLists.txt
index 1fe2b9c..92b6add 100644
--- a/src/gr-fadingui/grc/CMakeLists.txt
+++ b/src/gr-fadingui/grc/CMakeLists.txt
@@ -20,5 +20,7 @@
install(FILES
fadingui_datasource.block.yml
fadingui_dearpygui_sink.block.yml
- fadingui_xor_frame_sync.block.yml DESTINATION share/gnuradio/grc/blocks
+ fadingui_xor_frame_sync.block.yml
+ fadingui_deframer.block.yml
+ fadingui_frame_obj.block.yml DESTINATION share/gnuradio/grc/blocks
)
diff --git a/src/gr-fadingui/grc/fadingui_datasource.block.yml b/src/gr-fadingui/grc/fadingui_datasource.block.yml
index 5f34591..6c31995 100644
--- a/src/gr-fadingui/grc/fadingui_datasource.block.yml
+++ b/src/gr-fadingui/grc/fadingui_datasource.block.yml
@@ -1,10 +1,10 @@
id: fadingui_datasource
-label: UI Framed Data Source
+label: Framed Data Source
category: '[fadingui]'
templates:
imports: import fadingui
- make: fadingui.datasource(vec_len=${vec_len}, header_len=${header_len}, sock_addr=${sock_addr}, file_list=${file_list})
+ make: fadingui.datasource(frame_obj=${frame_obj}, filename=${fname})
# Make one 'parameters' list entry for every parameter you want settable from the GUI.
# Keys include:
@@ -12,25 +12,12 @@ templates:
# * label (label shown in the GUI)
# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
parameters:
-- id: vec_len
- label: Vector length
- dtype: int
- default: 501
-
-- id: header_len
- label: Header length
- dtype: int
- default: 11
-
-- id: sock_addr
- label: Socket Address
- dtype: string
- default: "udp://"
-
-- id: file_list
+- id: frame_obj
+ label: Frame Object
+ type: raw
+- id: fname
label: List of files
- dtype: raw
- default: "[]"
+ dtype: file_open
# Make one 'inputs' list entry per input and one 'outputs' list entry per output.
# Keys include:
@@ -45,7 +32,6 @@ outputs:
- label: out
domain: stream
dtype: byte
- vlen: ${ vec_len + header_len }
# 'file_format' specifies the version of the GRC yml format used in the file
# and should usually not be changed.
diff --git a/src/gr-fadingui/grc/fadingui_deframer.block.yml b/src/gr-fadingui/grc/fadingui_deframer.block.yml
new file mode 100644
index 0000000..02db246
--- /dev/null
+++ b/src/gr-fadingui/grc/fadingui_deframer.block.yml
@@ -0,0 +1,39 @@
+id: fadingui_deframer
+label: Deframer
+category: '[fadingui]'
+labels: [ python ]
+
+templates:
+ imports: import fadingui
+ make: fadingui.deframer(frame_obj=${frame_obj})
+
+# Make one 'parameters' list entry for every parameter you want settable from the GUI.
+# Keys include:
+# * id (makes the value accessible as \$keyname, e.g. in the make entry)
+# * label (label shown in the GUI)
+# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
+parameters:
+- id: frame_obj
+ label: Frame Object
+ dtype: raw
+
+# Make one 'inputs' list entry per input and one 'outputs' list entry per output.
+# Keys include:
+# * label (an identifier for the GUI)
+# * domain (optional - stream or message. Default is stream)
+# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
+# * vlen (optional - data stream vector length. Default is 1)
+# * optional (optional - set to 1 for optional inputs. Default is 0)
+inputs:
+- label: in
+ domain: stream
+ dtype: byte
+
+outputs:
+- label: out
+ domain: stream
+ dtype: byte
+
+# 'file_format' specifies the version of the GRC yml format used in the file
+# and should usually not be changed.
+file_format: 1
diff --git a/src/gr-fadingui/grc/fadingui_frame_obj.block.yml b/src/gr-fadingui/grc/fadingui_frame_obj.block.yml
new file mode 100644
index 0000000..c655306
--- /dev/null
+++ b/src/gr-fadingui/grc/fadingui_frame_obj.block.yml
@@ -0,0 +1,31 @@
+id: fadingui_frame_obj
+label: Frame Object
+category: '[fadingui]'
+flags: [ show_id, python ]
+
+# Make one 'parameters' list entry for every parameter you want settable from the GUI.
+# Keys include:
+# * id (makes the value accessible as \$keyname, e.g. in the make entry)
+# * label (label shown in the GUI)
+# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
+parameters:
+- id: preamble
+ label: Preamble
+ dtype: int_vector
+ default: '[0xbe, 0xef]'
+- id: payload_len
+ label: Payload length
+ dtype: int
+ default: 4096
+
+value: ${ fadingui.frame_obj }
+
+
+templates:
+ imports: import fadingui
+ var_make: |-
+ self.${id} = ${id} = fadingui.frame_obj(preamble=${preamble}, payload_len=${payload_len})
+
+# 'file_format' specifies the version of the GRC yml format used in the file
+# and should usually not be changed.
+file_format: 1
diff --git a/src/gr-fadingui/grc/fadingui_xor_frame_sync.block.yml b/src/gr-fadingui/grc/fadingui_xor_frame_sync.block.yml
index 92be2a8..1a8640d 100644
--- a/src/gr-fadingui/grc/fadingui_xor_frame_sync.block.yml
+++ b/src/gr-fadingui/grc/fadingui_xor_frame_sync.block.yml
@@ -1,10 +1,11 @@
id: fadingui_xor_frame_sync
-label: xor_frame_sync
+label: XOR Correlation Synchronizer
category: '[fadingui]'
+flags: [ python ]
templates:
imports: import fadingui
- make: fadingui.xor_frame_sync()
+ make: fadingui.xor_frame_sync(sync_pattern=${pattern}, buffer_size=${buffer_size})
# Make one 'parameters' list entry for every parameter you want settable from the GUI.
# Keys include:
@@ -12,12 +13,12 @@ templates:
# * label (label shown in the GUI)
# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
parameters:
-- id: ...
- label: ...
- dtype: ...
-- id: ...
- label: ...
- dtype: ...
+- id: pattern
+ label: Bit pattern
+ dtype: raw
+- id: buffer_size
+ label: Delay buffer size
+ dtype: raw
# Make one 'inputs' list entry per input and one 'outputs' list entry per output.
# Keys include:
@@ -27,18 +28,14 @@ parameters:
# * vlen (optional - data stream vector length. Default is 1)
# * optional (optional - set to 1 for optional inputs. Default is 0)
inputs:
-- label: ...
- domain: ...
- dtype: ...
- vlen: ...
- optional: ...
+- label: in
+ domain: stream
+ dtype: byte
outputs:
-- label: ...
- domain: ...
- dtype: ...
- vlen: ...
- optional: ...
+- label: out
+ domain: stream
+ dtype: byte
# 'file_format' specifies the version of the GRC yml format used in the file
# and should usually not be changed.
diff --git a/src/gr-fadingui/build.sh b/src/gr-fadingui/install.sh
index 29697af..29697af 100755
--- a/src/gr-fadingui/build.sh
+++ b/src/gr-fadingui/install.sh
diff --git a/src/gr-fadingui/python/CMakeLists.txt b/src/gr-fadingui/python/CMakeLists.txt
index 4845bd9..1318857 100644
--- a/src/gr-fadingui/python/CMakeLists.txt
+++ b/src/gr-fadingui/python/CMakeLists.txt
@@ -32,9 +32,12 @@ endif()
GR_PYTHON_INSTALL(
FILES
__init__.py
+ logger.py
datasource.py
dearpygui_sink.py
- xor_frame_sync.py DESTINATION ${GR_PYTHON_DIR}/fadingui
+ xor_frame_sync.py
+ deframer.py
+ frame_obj.py DESTINATION ${GR_PYTHON_DIR}/fadingui
)
########################################################################
diff --git a/src/gr-fadingui/python/__init__.py b/src/gr-fadingui/python/__init__.py
index f62e3cf..5fdfea4 100644
--- a/src/gr-fadingui/python/__init__.py
+++ b/src/gr-fadingui/python/__init__.py
@@ -35,5 +35,7 @@ except ImportError:
from .datasource import datasource
from .dearpygui_sink import dearpygui_sink
from .xor_frame_sync import xor_frame_sync
+from .deframer import deframer
+from .frame_obj import frame_obj
#
diff --git a/src/gr-fadingui/python/datasource.py b/src/gr-fadingui/python/datasource.py
index 764b4d5..69a2122 100644
--- a/src/gr-fadingui/python/datasource.py
+++ b/src/gr-fadingui/python/datasource.py
@@ -8,86 +8,75 @@ import io
import numpy as np
from gnuradio import gr
-class datasource(gr.sync_block):
- """
- Loads data from a file choosen in the graphical user interface.
- """
+from fadingui.logger import get_logger
+log = get_logger("datasource")
- HEADER_LEN = 11;
- def __init__(self, vec_len, header_len, sock_addr, file_list):
- # FIXME: find a better solution
- assert(header_len == datasource.HEADER_LEN)
+class datasource(gr.basic_block):
+ """
+ Loads data from a file choosen splits into chunks and pack them into
+ frames.
+ """
- gr.sync_block.__init__(self,
+ def __init__(self, frame_obj, filename):
+ gr.basic_block.__init__(self,
name="datasource",
in_sig=None,
- out_sig=[np.dtype(f'{vec_len + header_len}b')])
+ out_sig=[np.byte])
- # parameters
- self.vec_len = vec_len
- self.sock_addr = sock_addr
- self.file_list = file_list
+ # Frame object
+ self.frame = frame_obj
# file members
- self.fdata = None
- self.fsize = None
- self.fpos = 0
-
- # cache
- self.header_cache = None
-
- # TODO: make it possible to choose from UI
- self.load_file(file_list[0])
-
- def load_file(self, fname):
- self.fdata = np.fromfile(fname, np.byte)
+ self.fname = filename
+ self.fdata = np.fromfile(self.fname, np.byte)
self.fsize = len(self.fdata)
- # TODO: remove debugging statements or create logger
- print(f"datasource: loaded file size={self.fsize}, head:")
- print(self.fdata[:10])
+ # a frame has 5 id bits so, there can only be 2 ** 5 chunks per file
+ # see docstring of frame_obj for more details
+ nblocks = int(self.fsize / self.frame.payload_length)
+ log.debug(f"Loaded {self.fsize} bytes = {nblocks} blocks from name={self.fname}")
+ assert nblocks < 2 ** 5, "Payload size too small or file too big"
- def make_header(self, data_size):
- # TODO: check that data_size is not too big
- pilot = 0x1248
+ self.fpos = 0
+ self.blocknr = 0
- # TODO: implement hamming code for header
- header = f"p{pilot:04x}s{data_size:04x}d".encode("ascii")
+ # would have been nice to have but does not work
+ # self.set_min_noutput_items(frame_obj.length)
- arr = np.frombuffer(header, dtype=np.dtype("byte"))
- return arr
+ # FIXME: implement buffering
+ # output buffer
+ self.outbuffer = np.array([])
- def work(self, input_items, output_items):
+ def general_work(self, input_items, output_items):
out = output_items[0]
- if self.fpos + self.vec_len > self.fsize:
- # FIXME: repair broken code below
- # TODO: create logger
- print(f"WARNING: the last {self.fsize - self.fpos} bytes were not sent!")
- self.fpos = 0
- return 0;
- rest = self.fsize - self.fpos
+ # FIXME: if there is leftover buffer add that first
+ # if self.outbuffer.size > 0:
+ # log.debug("Frame did not fit into buffer")
+ # out[:len(self.outbuffer)] = self.outbuffer
- # cannot use cached header
- header = self.make_header(rest)
- data = self.fdata[self.fpos:rest]
+ if self.fpos + self.frame.payload_length > self.fsize:
+ # FIXME: implement edge case
+ log.warning(f"The last {self.fsize - self.fpos} bytes were not sent!")
+ self.fpos = 0
+ self.blocknr = 0
- frame_size = datasource.HEADER_LEN + rest
- out[:] = np.concatenate([header, data])
+ log.debug("File finished, starting over")
+ return 0;
- self.fpos = 0
- return rest
+ data = self.fdata[self.fpos:self.fpos + self.frame.payload_length]
+ frame_bytes = self.frame.make(self.blocknr, self.frame.payload_length, data)
- # cache header if not saved
- if self.header_cache == None:
- self.header = self.make_header(self.vec_len)
+ out[:] = frame_bytes[:len(out)]
+ self.outbuffer = frame_bytes[len(out):]
- data = self.fdata[self.fpos:self.fpos + self.vec_len]
+ log.debug(f"Sent frame nr={self.blocknr}")
+ log.debug(f"Set bytes {out}")
- out[:] = np.concatenate([self.header, data])
+ self.fpos += self.frame.payload_length
+ self.blocknr += 1
- self.fpos += self.vec_len
- return len(output_items[0])
+ return self.frame.length
diff --git a/src/gr-fadingui/python/deframer.py b/src/gr-fadingui/python/deframer.py
new file mode 100644
index 0000000..2af5ee0
--- /dev/null
+++ b/src/gr-fadingui/python/deframer.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2021 Naoki Pross.
+
+import numpy as np
+from gnuradio import gr
+
+class deframer(gr.sync_block):
+ """
+ Check for integrity and remove frame header from packet.
+ """
+ def __init__(self, frame_obj):
+ gr.sync_block.__init__(self,
+ name="deframer",
+ in_sig=[np.byte],
+ out_sig=[np.byte])
+
+
+ def work(self, input_items, output_items):
+ in0 = input_items[0]
+ out = output_items[0]
+
+ out[:] = in0
+ return len(output_items[0])
+
diff --git a/src/gr-fadingui/python/frame_obj.py b/src/gr-fadingui/python/frame_obj.py
new file mode 100644
index 0000000..136fce0
--- /dev/null
+++ b/src/gr-fadingui/python/frame_obj.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2021 Naoki Pross.
+
+from functools import reduce
+import operator as op
+
+import numpy as np
+from gnuradio import gr
+
+
+class frame_obj:
+ """
+ Frame Object: Contains informations about a data frame.
+
+ -------------------------------------------------------------------------------
+ | Preamble | Padding | ID | Data Length | Parity | Payload | Padding |
+ | k bytes | 1 bit | 5 bits | 21 bits | 5 bits | | if necessary |
+ -------------------------------------------------------------------------------
+ | (31, 26) Hamming EC code |
+ ---------------------------------
+
+ - The preamble is user defined.
+ - The ID (5 bits) + Data length (21 bits) together are a 26 bits, followed
+ by 5 parity bits computed using a (31,26) hamming code.
+
+ This constraints the maximum payload size to 2 MiB and the number IDs to
+ 32, i.e. max file size is 64 MiB.
+
+ """
+ def __init__(self, preamble, payload_len):
+ self._preamble = np.array(preamble, dtype=np.uint8)
+
+ self._preamble_len = len(self._preamble)
+ self._payload_len = payload_len
+
+ @property
+ def header_length(self) -> int:
+ """Get header length in bytes"""
+ # 4 is the number of bytes for the hamming part
+ return self._preamble_len + 4
+
+ @property
+ def payload_length(self) -> int:
+ return self._payload_len
+
+ @property
+ def length(self) -> int:
+ """Get frame lenght in bytes"""
+ # 8 is the size of the hamming ECC part + 1 bit
+ return self.header_length + self.payload_length
+
+ @property
+ def preamble(self):
+ """Get preamble"""
+ return self._preamble
+
+ def parity(self, bits):
+ """Compute the 5 parity bits for an unpacked array of 26 bits"""
+ assert(len(bits) == 26)
+ # FIXME: does not work
+ # return np.matmul(bits, gen) % 2
+ return np.array([0, 0, 0, 0, 0])
+
+ def make(self, idv, data_len, data):
+ """Make a frame"""
+ # get lower 4 bits of idv
+ idv_bits = np.unpackbits([np.uint8(idv)])[:5]
+
+ # get lower 22 bits of data_len
+ data_len_bytes = list(map(np.uint8, data_len.to_bytes(4, byteorder='little')))
+ data_len_bits = np.unpackbits(data_len_bytes)[:21]
+
+ # compute 5 parity bits
+ metadata = np.concatenate([idv_bits, data_len_bits])
+ parity_bits = self.parity(metadata)
+
+ # add padding
+ hamming_bits = np.concatenate([[0], metadata, parity_bits])
+ assert(len(hamming_bits) == 32)
+
+ # pack 32 bits into 4 bytes and add the rest
+ hamming = np.packbits(hamming_bits)
+ return np.concatenate([self.preamble, hamming, data])
+
+ def syndrome(self, bits):
+ """Compute the syndrome (check Hamming code) for an unpacked array of 31 bits"""
+ assert(len(bits) == 31)
+ return reduce(op.xor, [i for i, bit in enumerate(bits) if bit])
+
diff --git a/src/gr-fadingui/python/logger.py b/src/gr-fadingui/python/logger.py
new file mode 100644
index 0000000..a189aeb
--- /dev/null
+++ b/src/gr-fadingui/python/logger.py
@@ -0,0 +1,14 @@
+import logging
+import sys
+
+formatter = logging.Formatter("[%(name)s] %(levelname)s: %(message)s")
+stdout_handler = logging.StreamHandler(sys.stdout)
+
+def get_logger(module):
+ log = logging.getLogger(module)
+
+ log.addHandler(stdout_handler)
+ stdout_handler.setFormatter(formatter)
+
+ log.setLevel(logging.DEBUG)
+ return log
diff --git a/src/gr-fadingui/python/xor_frame_sync.py b/src/gr-fadingui/python/xor_frame_sync.py
index 9d9064f..51af35a 100644
--- a/src/gr-fadingui/python/xor_frame_sync.py
+++ b/src/gr-fadingui/python/xor_frame_sync.py
@@ -4,24 +4,102 @@
# Copyright 2021 Naoki Pross.
-import numpy
+import numpy as np
+from numpy_ringbuffer import RingBuffer
+
from gnuradio import gr
+from fadingui.logger import get_logger
+log = get_logger("xor_frame_sync")
+
+
class xor_frame_sync(gr.sync_block):
"""
- docstring for block xor_frame_sync
+ Performs a frame synchronization by XOR matching a preamble bit sequence
"""
- def __init__(self, sync_pattern):
+ def __init__(self, sync_pattern, buffer_size):
+ # TODO: buffer size should be in packets
gr.sync_block.__init__(self,
name="xor_frame_sync",
in_sig=[np.byte],
out_sig=[np.byte])
+ # binary pattern to match
+ self.pattern = np.unpackbits(np.array(sync_pattern, dtype=np.uint8))[::-1]
+ self.nbytes = len(sync_pattern)
+ self.nbits = len(self.pattern)
+
+ log.debug(f"Loaded pattern {self.pattern} length={self.nbits}")
+ assert(self.nbits % 8 == 0)
+
+ # packed buffer to delay the data
+ self.delaybuf = RingBuffer(buffer_size, dtype=np.uint8)
+ self.delay = 0
+
+ # unpacked buffer to compute correlation values, initially filled with zeros
+ self.corrbuf = RingBuffer(self.nbits)
+ self.corrbuf.extend(np.zeros(self.nbits))
+
+ # buffer to store correlation values
+ self.xcorrs = RingBuffer(buffer_size)
+
+ # synchronization state
+ self.synchronized = False
+
+ def xcorrelation(self, v):
+ """
+ Compute the binary correlations between the stored pattern and
+ correlation buffer, while shifting v into the buffer.
+
+ Binary correlation between two bit vectors is just size of the
+ vector(s) minus the number of bits that differ.
+ """
+ v_arr = np.array(v, dtype=np.uint8)
+ for b in np.unpackbits(v_arr):
+ self.corrbuf.appendleft(b)
+ yield self.nbits - np.sum(np.logical_xor(self.corrbuf, self.pattern))
+
def work(self, input_items, output_items):
+ """
+ Process the inputs, that means:
+
+ - Check that the buffer is synchronized, i.e. there is the sync
+ pattern appears every k bits, where k is the size of the packet.
+
+ - If the buffer is not synchronized, compute a binary cross
+ correlation to find how much the stream should be delayed.
+
+ Notes:
+
+ - Even though the block input is of type np.byte, inp is an array
+ of 255 bytes, probably for performance reasons.
+ TODO: block processing
+ """
inp = input_items[0]
out = output_items[0]
- out[:] = inp
+ if not self.synchronized:
+ for v in inp:
+ # compute the cross correlation
+ xcs = self.xcorrelation(v)
+
+ # add cross correlations to buffer and save value
+ self.xcorrs.extend(list(xcs))
+ self.delaybuf.appendleft(v)
+
+ peak = np.argmax(self.xcorrs)
+ if self.xcorrs[peak] == self.nbits:
+ self.delay = peak
+ self.synchronized = True
+ log.debug(f"Synchronized with delay={peak}")
+
+ else:
+ self.synchronized = False
+ log.warning(f"Did not find a peak (max={self.xcorrs[peak]}, should be {self.nbits})")
+
+
+ # return data with delay
+ out[:] = self.delaybuf[self.delay]
return len(output_items[0])
diff --git a/tests/fadingui/QAM/hammingtest.py b/tests/fadingui/QAM/hammingtest.py
new file mode 100755
index 0000000..b72e386
--- /dev/null
+++ b/tests/fadingui/QAM/hammingtest.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+import numpy as np
+from fadingui import frame_obj
+
+f = frame_obj([1,0], 10)
+q = np.random.randint(0, 2, size=26)
+
+parity = f.parity(q)
+enc = np.concatenate([q, parity])
+
+print(q)
+print(parity)
+print(enc)
+print(f.syndrome(enc))
diff --git a/tests/fadingui/QAM/qam_nogui.grc b/tests/fadingui/QAM/qam_nogui.grc
index 2c6abf8..c3d886e 100644
--- a/tests/fadingui/QAM/qam_nogui.grc
+++ b/tests/fadingui/QAM/qam_nogui.grc
@@ -8,7 +8,7 @@ options:
description: ''
gen_cmake: 'On'
gen_linking: dynamic
- generate_options: no_gui
+ generate_options: qt_gui
hier_block_src_path: '.:'
id: qam_nogui
max_nouts: '0'
@@ -18,7 +18,7 @@ options:
realtime_scheduling: '1'
run: 'True'
run_command: '{python} -u {filename}'
- run_options: prompt
+ run_options: run
sizing_mode: fixed
thread_safe_setters: ''
title: QAM
@@ -59,7 +59,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [440, 604.0]
+ coordinate: [448, 436.0]
rotation: 0
state: true
- name: eq_gain
@@ -110,6 +110,20 @@ blocks:
coordinate: [536, 268.0]
rotation: 0
state: true
+- name: frame
+ id: fadingui_frame_obj
+ parameters:
+ alias: ''
+ comment: ''
+ payload_len: '32768'
+ preamble: '[190, 239]'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [192, 180.0]
+ rotation: 0
+ state: true
- name: freq_offset
id: variable
parameters:
@@ -138,7 +152,7 @@ blocks:
id: variable
parameters:
comment: ''
- value: 100e-6
+ value: '0'
states:
bus_sink: false
bus_source: false
@@ -150,7 +164,7 @@ blocks:
id: variable
parameters:
comment: ''
- value: 2 * 3.141592653589793 / 100
+ value: '.002'
states:
bus_sink: false
bus_source: false
@@ -158,27 +172,6 @@ blocks:
coordinate: [1792, 428.0]
rotation: 0
state: true
-- name: qam_const
- id: variable_constellation_rect
- parameters:
- comment: ''
- const_points: '[(-3-3j), (-1-3j), (1-3j), (3-3j), (-3-1j), (-1-1j), (1-1j), (3-1j),
- (-3+1j), (-1+1j), (1+1j), (3+1j), (-3+3j), (-1+3j), (1+3j), (3+3j)]'
- imag_sect: '1'
- precision: '4'
- real_sect: '1'
- rot_sym: '4'
- soft_dec_lut: None
- sym_map: '[0, 4, 12, 8, 1, 5, 13, 9, 3, 7, 15, 11, 2, 6, 14, 10]'
- w_imag_sect: '1'
- w_real_sect: '1'
- states:
- bus_sink: false
- bus_source: false
- bus_structure: null
- coordinate: [440, 444.0]
- rotation: 0
- state: true
- name: rrc_taps
id: variable
parameters:
@@ -200,7 +193,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [192, 12.0]
+ coordinate: [232, 12.0]
rotation: 0
state: enabled
- name: sps
@@ -239,18 +232,6 @@ blocks:
coordinate: [1184, 556.0]
rotation: 0
state: true
-- name: variable_4
- id: variable
- parameters:
- comment: ''
- value: '0'
- states:
- bus_sink: false
- bus_source: false
- bus_structure: null
- coordinate: [1312, 556.0]
- rotation: 0
- state: true
- name: blocks_null_sink_0
id: blocks_null_sink
parameters:
@@ -265,7 +246,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [2336, 424.0]
+ coordinate: [2824, 312.0]
rotation: 0
state: true
- name: blocks_throttle_0
@@ -284,27 +265,9 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [688, 356.0]
+ coordinate: [720, 356.0]
rotation: 0
state: enabled
-- name: blocks_vector_to_stream_0
- id: blocks_vector_to_stream
- parameters:
- affinity: ''
- alias: ''
- comment: ''
- maxoutbuf: '0'
- minoutbuf: '0'
- num_items: '2048'
- type: byte
- vlen: '1'
- states:
- bus_sink: false
- bus_source: false
- bus_structure: null
- coordinate: [248, 360.0]
- rotation: 0
- state: true
- name: channels_channel_model_0
id: channels_channel_model
parameters:
@@ -429,7 +392,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [2136, 420.0]
+ coordinate: [2144, 452.0]
rotation: 0
state: true
- name: digital_pfb_clock_sync_xxx_0
@@ -461,17 +424,15 @@ blocks:
affinity: ''
alias: ''
comment: ''
- file_list: '["./lena512color.tiff"]'
- header_len: '11'
+ fname: /home/god/Documents/Fading/tests/fadingui/QAM/lena512color.tiff
+ frame_obj: frame
maxoutbuf: '0'
minoutbuf: '0'
- sock_addr: udp://
- vec_len: '2037'
states:
bus_sink: false
bus_source: false
bus_structure: null
- coordinate: [72, 212.0]
+ coordinate: [144, 284.0]
rotation: 0
state: true
- name: fadingui_dearpygui_sink_0
@@ -488,21 +449,150 @@ blocks:
bus_structure: null
coordinate: [2096, 180.0]
rotation: 0
+ state: disabled
+- name: fadingui_deframer_0
+ id: fadingui_deframer
+ parameters:
+ affinity: ''
+ alias: ''
+ comment: ''
+ frame_obj: frame
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2592, 452.0]
+ rotation: 0
state: true
+- name: fadingui_xor_frame_sync_0
+ id: fadingui_xor_frame_sync
+ parameters:
+ affinity: ''
+ alias: ''
+ buffer_size: frame.length * 4
+ comment: ''
+ maxoutbuf: '0'
+ minoutbuf: '0'
+ pattern: frame.preamble
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2312, 444.0]
+ rotation: 0
+ state: true
+- name: qtgui_const_sink_x_0
+ id: qtgui_const_sink_x
+ parameters:
+ affinity: ''
+ alias: ''
+ alpha1: '1.0'
+ alpha10: '1.0'
+ alpha2: '1.0'
+ alpha3: '1.0'
+ alpha4: '1.0'
+ alpha5: '1.0'
+ alpha6: '1.0'
+ alpha7: '1.0'
+ alpha8: '1.0'
+ alpha9: '1.0'
+ autoscale: 'False'
+ axislabels: 'True'
+ color1: '"blue"'
+ color10: '"red"'
+ color2: '"red"'
+ color3: '"red"'
+ color4: '"red"'
+ color5: '"red"'
+ color6: '"red"'
+ color7: '"red"'
+ color8: '"red"'
+ color9: '"red"'
+ comment: ''
+ grid: 'False'
+ gui_hint: ''
+ label1: ''
+ label10: ''
+ label2: ''
+ label3: ''
+ label4: ''
+ label5: ''
+ label6: ''
+ label7: ''
+ label8: ''
+ label9: ''
+ legend: 'True'
+ marker1: '0'
+ marker10: '0'
+ marker2: '0'
+ marker3: '0'
+ marker4: '0'
+ marker5: '0'
+ marker6: '0'
+ marker7: '0'
+ marker8: '0'
+ marker9: '0'
+ name: '""'
+ nconnections: '3'
+ size: '1024'
+ style1: '0'
+ style10: '0'
+ style2: '0'
+ style3: '0'
+ style4: '0'
+ style5: '0'
+ style6: '0'
+ style7: '0'
+ style8: '0'
+ style9: '0'
+ tr_chan: '0'
+ tr_level: '0.0'
+ tr_mode: qtgui.TRIG_MODE_FREE
+ tr_slope: qtgui.TRIG_SLOPE_POS
+ tr_tag: '""'
+ type: complex
+ update_time: '0.10'
+ width1: '1'
+ width10: '1'
+ width2: '1'
+ width3: '1'
+ width4: '1'
+ width5: '1'
+ width6: '1'
+ width7: '1'
+ width8: '1'
+ width9: '1'
+ xmax: '2'
+ xmin: '-2'
+ ymax: '2'
+ ymin: '-2'
+ states:
+ bus_sink: false
+ bus_source: false
+ bus_structure: null
+ coordinate: [2040, 32.0]
+ rotation: 0
+ state: enabled
connections:
- [blocks_throttle_0, '0', channels_channel_model_0, '0']
-- [blocks_vector_to_stream_0, '0', digital_constellation_modulator_0, '0']
- [channels_channel_model_0, '0', digital_pfb_clock_sync_xxx_0, '0']
- [digital_cma_equalizer_cc_0, '0', digital_costas_loop_cc_0, '0']
+- [digital_cma_equalizer_cc_0, '0', qtgui_const_sink_x_0, '1']
- [digital_constellation_decoder_cb_0, '0', digital_diff_decoder_bb_0, '0']
- [digital_constellation_modulator_0, '0', blocks_throttle_0, '0']
- [digital_costas_loop_cc_0, '0', digital_constellation_decoder_cb_0, '0']
- [digital_costas_loop_cc_0, '0', fadingui_dearpygui_sink_0, '0']
+- [digital_costas_loop_cc_0, '0', qtgui_const_sink_x_0, '2']
- [digital_diff_decoder_bb_0, '0', digital_map_bb_0, '0']
-- [digital_map_bb_0, '0', blocks_null_sink_0, '0']
+- [digital_map_bb_0, '0', fadingui_xor_frame_sync_0, '0']
- [digital_pfb_clock_sync_xxx_0, '0', digital_cma_equalizer_cc_0, '0']
-- [fadingui_datasource_0, '0', blocks_vector_to_stream_0, '0']
+- [digital_pfb_clock_sync_xxx_0, '0', qtgui_const_sink_x_0, '0']
+- [fadingui_datasource_0, '0', digital_constellation_modulator_0, '0']
+- [fadingui_deframer_0, '0', blocks_null_sink_0, '0']
+- [fadingui_xor_frame_sync_0, '0', fadingui_deframer_0, '0']
metadata:
file_format: 1
diff --git a/tests/fadingui/QAM/qam_nogui.py b/tests/fadingui/QAM/qam_nogui.py
index e9aa15b..6cde63d 100755
--- a/tests/fadingui/QAM/qam_nogui.py
+++ b/tests/fadingui/QAM/qam_nogui.py
@@ -9,6 +9,21 @@
# Author: Pross Naoki, Halter Sara Cinzia
# GNU Radio version: 3.8.2.0
+from distutils.version import StrictVersion
+
+if __name__ == '__main__':
+ import ctypes
+ import sys
+ if sys.platform.startswith('linux'):
+ try:
+ x11 = ctypes.cdll.LoadLibrary('libX11.so')
+ x11.XInitThreads()
+ except:
+ print("Warning: failed to XInitThreads()")
+
+from PyQt5 import Qt
+from gnuradio import qtgui
+import sip
from gnuradio import blocks
from gnuradio import channels
from gnuradio.filter import firdes
@@ -21,11 +36,40 @@ from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
import fadingui
+from gnuradio import qtgui
-class qam_nogui(gr.top_block):
+class qam_nogui(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "QAM")
+ Qt.QWidget.__init__(self)
+ self.setWindowTitle("QAM")
+ qtgui.util.check_set_qss()
+ try:
+ self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
+ except:
+ pass
+ self.top_scroll_layout = Qt.QVBoxLayout()
+ self.setLayout(self.top_scroll_layout)
+ self.top_scroll = Qt.QScrollArea()
+ self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
+ self.top_scroll_layout.addWidget(self.top_scroll)
+ self.top_scroll.setWidgetResizable(True)
+ self.top_widget = Qt.QWidget()
+ self.top_scroll.setWidget(self.top_widget)
+ self.top_layout = Qt.QVBoxLayout(self.top_widget)
+ self.top_grid_layout = Qt.QGridLayout()
+ self.top_layout.addLayout(self.top_grid_layout)
+
+ self.settings = Qt.QSettings("GNU Radio", "qam_nogui")
+
+ try:
+ if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ self.restoreGeometry(self.settings.value("geometry").toByteArray())
+ else:
+ self.restoreGeometry(self.settings.value("geometry"))
+ except:
+ pass
##################################################
# Variables
@@ -33,16 +77,14 @@ class qam_nogui(gr.top_block):
self.sps = sps = 4
self.nfilts = nfilts = 32
self.excess_bw = excess_bw = 350e-3
- self.variable_4 = variable_4 = 0
self.timing_loop_bw = timing_loop_bw = 2 * 3.141592653589793 / 100
self.time_offset = time_offset = 1
self.samp_rate = samp_rate = 32000
self.rrc_taps = rrc_taps = firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), excess_bw, 45*nfilts)
- self.qam_const = qam_const = digital.constellation_rect([(-3-3j), (-1-3j), (1-3j), (3-3j), (-3-1j), (-1-1j), (1-1j), (3-1j), (-3+1j), (-1+1j), (1+1j), (3+1j), (-3+3j), (-1+3j), (1+3j), (3+3j)], [0, 4, 12, 8, 1, 5, 13, 9, 3, 7, 15, 11, 2, 6, 14, 10],
- 4, 1, 1, 1, 1).base()
- self.phase_bw = phase_bw = 2 * 3.141592653589793 / 100
- self.noise_volt = noise_volt = 100e-6
+ self.phase_bw = phase_bw = .002
+ self.noise_volt = noise_volt = 0
self.freq_offset = freq_offset = 0
+ self.frame = frame = fadingui.frame_obj(preamble=[190, 239], payload_len=32768)
self.eq_ntaps = eq_ntaps = 15
self.eq_mod = eq_mod = 1
self.eq_gain = eq_gain = 10e-3
@@ -52,8 +94,49 @@ class qam_nogui(gr.top_block):
##################################################
# Blocks
##################################################
- self.fadingui_dearpygui_sink_0 = fadingui.dearpygui_sink(sock_addr='udp://localhost:31415', ui_element_id=0)
- self.fadingui_datasource_0 = fadingui.datasource(vec_len=2037, header_len=11, sock_addr='udp://', file_list=["./lena512color.tiff"])
+ self.qtgui_const_sink_x_0 = qtgui.const_sink_c(
+ 1024, #size
+ "", #name
+ 3 #number of inputs
+ )
+ self.qtgui_const_sink_x_0.set_update_time(0.10)
+ self.qtgui_const_sink_x_0.set_y_axis(-2, 2)
+ self.qtgui_const_sink_x_0.set_x_axis(-2, 2)
+ self.qtgui_const_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
+ self.qtgui_const_sink_x_0.enable_autoscale(False)
+ self.qtgui_const_sink_x_0.enable_grid(False)
+ self.qtgui_const_sink_x_0.enable_axis_labels(True)
+
+
+ labels = ['', '', '', '', '',
+ '', '', '', '', '']
+ widths = [1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1]
+ colors = ["blue", "red", "red", "red", "red",
+ "red", "red", "red", "red", "red"]
+ styles = [0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0]
+ markers = [0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0]
+ alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
+ 1.0, 1.0, 1.0, 1.0, 1.0]
+
+ for i in range(3):
+ if len(labels[i]) == 0:
+ self.qtgui_const_sink_x_0.set_line_label(i, "Data {0}".format(i))
+ else:
+ self.qtgui_const_sink_x_0.set_line_label(i, labels[i])
+ self.qtgui_const_sink_x_0.set_line_width(i, widths[i])
+ self.qtgui_const_sink_x_0.set_line_color(i, colors[i])
+ self.qtgui_const_sink_x_0.set_line_style(i, styles[i])
+ self.qtgui_const_sink_x_0.set_line_marker(i, markers[i])
+ self.qtgui_const_sink_x_0.set_line_alpha(i, alphas[i])
+
+ self._qtgui_const_sink_x_0_win = sip.wrapinstance(self.qtgui_const_sink_x_0.pyqwidget(), Qt.QWidget)
+ self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_win)
+ self.fadingui_xor_frame_sync_0 = fadingui.xor_frame_sync(sync_pattern=frame.preamble, buffer_size=frame.length * 4)
+ self.fadingui_deframer_0 = fadingui.deframer(frame_obj=frame)
+ self.fadingui_datasource_0 = fadingui.datasource(frame_obj=frame, filename='/home/god/Documents/Fading/tests/fadingui/QAM/lena512color.tiff')
self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(sps, timing_loop_bw, rrc_taps, nfilts, nfilts/2, 1.5, 1)
self.digital_map_bb_0 = digital.map_bb([0, 1, 3, 2])
self.digital_diff_decoder_bb_0 = digital.diff_decoder_bb(4)
@@ -75,7 +158,6 @@ class qam_nogui(gr.top_block):
taps=chn_taps,
noise_seed=0,
block_tags=False)
- self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_char*1, 2048)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_char*1)
@@ -85,18 +167,26 @@ class qam_nogui(gr.top_block):
# Connections
##################################################
self.connect((self.blocks_throttle_0, 0), (self.channels_channel_model_0, 0))
- self.connect((self.blocks_vector_to_stream_0, 0), (self.digital_constellation_modulator_0, 0))
self.connect((self.channels_channel_model_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0))
self.connect((self.digital_cma_equalizer_cc_0, 0), (self.digital_costas_loop_cc_0, 0))
+ self.connect((self.digital_cma_equalizer_cc_0, 0), (self.qtgui_const_sink_x_0, 1))
self.connect((self.digital_constellation_decoder_cb_0, 0), (self.digital_diff_decoder_bb_0, 0))
self.connect((self.digital_constellation_modulator_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.digital_costas_loop_cc_0, 0), (self.digital_constellation_decoder_cb_0, 0))
- self.connect((self.digital_costas_loop_cc_0, 0), (self.fadingui_dearpygui_sink_0, 0))
+ self.connect((self.digital_costas_loop_cc_0, 0), (self.qtgui_const_sink_x_0, 2))
self.connect((self.digital_diff_decoder_bb_0, 0), (self.digital_map_bb_0, 0))
- self.connect((self.digital_map_bb_0, 0), (self.blocks_null_sink_0, 0))
+ self.connect((self.digital_map_bb_0, 0), (self.fadingui_xor_frame_sync_0, 0))
self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.digital_cma_equalizer_cc_0, 0))
- self.connect((self.fadingui_datasource_0, 0), (self.blocks_vector_to_stream_0, 0))
+ self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.qtgui_const_sink_x_0, 0))
+ self.connect((self.fadingui_datasource_0, 0), (self.digital_constellation_modulator_0, 0))
+ self.connect((self.fadingui_deframer_0, 0), (self.blocks_null_sink_0, 0))
+ self.connect((self.fadingui_xor_frame_sync_0, 0), (self.fadingui_deframer_0, 0))
+
+ def closeEvent(self, event):
+ self.settings = Qt.QSettings("GNU Radio", "qam_nogui")
+ self.settings.setValue("geometry", self.saveGeometry())
+ event.accept()
def get_sps(self):
return self.sps
@@ -119,12 +209,6 @@ class qam_nogui(gr.top_block):
self.excess_bw = excess_bw
self.set_rrc_taps(firdes.root_raised_cosine(self.nfilts, self.nfilts, 1.0/float(self.sps), self.excess_bw, 45*self.nfilts))
- def get_variable_4(self):
- return self.variable_4
-
- def set_variable_4(self, variable_4):
- self.variable_4 = variable_4
-
def get_timing_loop_bw(self):
return self.timing_loop_bw
@@ -153,12 +237,6 @@ class qam_nogui(gr.top_block):
self.rrc_taps = rrc_taps
self.digital_pfb_clock_sync_xxx_0.update_taps(self.rrc_taps)
- def get_qam_const(self):
- return self.qam_const
-
- def set_qam_const(self, qam_const):
- self.qam_const = qam_const
-
def get_phase_bw(self):
return self.phase_bw
@@ -180,6 +258,12 @@ class qam_nogui(gr.top_block):
self.freq_offset = freq_offset
self.channels_channel_model_0.set_frequency_offset(self.freq_offset)
+ def get_frame(self):
+ return self.frame
+
+ def set_frame(self, frame):
+ self.frame = frame
+
def get_eq_ntaps(self):
return self.eq_ntaps
@@ -220,26 +304,34 @@ class qam_nogui(gr.top_block):
def main(top_block_cls=qam_nogui, options=None):
if gr.enable_realtime_scheduling() != gr.RT_OK:
print("Error: failed to enable real-time scheduling.")
+
+ if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
+ style = gr.prefs().get_string('qtgui', 'style', 'raster')
+ Qt.QApplication.setGraphicsSystem(style)
+ qapp = Qt.QApplication(sys.argv)
+
tb = top_block_cls()
- def sig_handler(sig=None, frame=None):
- tb.stop()
- tb.wait()
+ tb.start()
- sys.exit(0)
+ tb.show()
+
+ def sig_handler(sig=None, frame=None):
+ Qt.QApplication.quit()
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
- tb.start()
+ timer = Qt.QTimer()
+ timer.start(500)
+ timer.timeout.connect(lambda: None)
- try:
- input('Press Enter to quit: ')
- except EOFError:
- pass
- tb.stop()
- tb.wait()
+ def quitting():
+ tb.stop()
+ tb.wait()
+ qapp.aboutToQuit.connect(quitting)
+ qapp.exec_()
if __name__ == '__main__':
main()