aboutsummaryrefslogtreecommitdiffstats
path: root/notebooks/FIR_mehrere.ipynb
blob: cb4a968959c9ae8966f76c43fd72ead9d23cec41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
{
 "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\n"
   ]
  },
  {
   "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": "markdown",
   "id": "5ad0edf9",
   "metadata": {},
   "source": [
    "# Dealy Window\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "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 = 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",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dd93e444",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA8VklEQVR4nO3dd5ycZbn/8c81M9t7zfaSTnpvYAARqRJEQCIgIko5oOixgEePPxXbOSp6kCZVFARpIkIEqVLTIT2btsmWbN/sbC+zc//+mNmwbLbM7jxTkr3er1dem5l5Zp4bsvvd+7meu4gxBqWUUic+W6gboJRSKjg08JVSapzQwFdKqXFCA18ppcYJDXyllBonHKFuwHDS09NNUVFRqJuhlFLHjU2bNtUbYzIGey2sA7+oqIiNGzeGuhlKKXXcEJFDQ72mJR2llBonNPCVUmqc0MBXSqlxQgNfKaXGCQ18pZQaJywJfBF5SERqRWT7EK+LiNwhIvtEZKuILLDivEoppXxnVQ//j8DZw7x+DjDF++da4B6LzquUUspHlgS+MeYtoHGYQ1YBfzIea4FkEcm24txKHW/e3lvHQ++U0trlCnVT1DgTrIlXuUB5v8cV3ueqBh4oItfiuQqgoKAgKI1TKlgeX1/G957dBsDfP6zk6RtWEGHXW2kqOIL1nSaDPDfozivGmPuMMYuMMYsyMgadHazUcampvZufv7iLFZPS+NXFc9hS4eSxtUNOilTKcsEK/Aogv9/jPOBwkM6tVFh4cmM5LV0u/vv8GVy8MI9FhSk8/N5B3G7ddU4FR7AC/3ngi97ROssApzHmmHKOUieyZzZVsqAgmZOyExERLl9WwKGGdjaXHQl109Q4YdWwzMeB94FpIlIhIteIyPUicr33kDXAAWAfcD/wH1acV6njRXljOyU1LZw3J+foc5+cPgG7TXh9d20IW6bGE0tu2hpjVo/wugFutOJcSh2P3t5bD8CpU9OPPpcUE8HiohRe313Ld8+eHqqmqXFEhwcoFQRv7akjJymaSRnxH3v+9GmZ7K5uoba5M0QtU+OJBr5SAWaMYV1pAysmpyPy8QFri4tTAbSOr4JCA1+pACtv7OBIew/zC5KPeW1mTiKRdhuby5qC3i41/mjgKxVgH5R7eu/z8pOPeS3KYWdWbiKbDmkPXwWeBr5SAbal3El0hI1pExIGfX1BQQrbKp309LqD3DI13mjgKxVg2yqbmJWThGOIJRRm5ibS7XJTWt8W5Jap8UYDX6kAMsZQUt3CtKzBe/cA07MSAdhV1RysZqlxSgNfqQCqbemiudM1bOBPyognwi7srm4JYsvUeKSBr1QAlXhDfErm0IEf6bAxKSOe3drDVwGmga9UAO2p8QT+1Anxwx53Unai9vBVwGngKxVAe2paSI+PJC0+atjjJmXEUeXspL1bN0VRgaOBr1QA7alpZeoQwzH7K073XAHoSB0VSBr4SgWIMYZ9ta1MyRy+nAMwMSMO0MBXgaWBr1SA1Ld209rlYmLGyIFflOYN/DoNfBU4GvhKBcjh8lL+GvkTJseOHOIxkXZykqI5oD18FUAa+EoFSPy621ksJczed69Px0/MiNfAVwFlyQYoSql+fpoJri4mAQgkbv8TbP8TOKLgB0PvblWcHsffP6zEGHPMMspKWUF7+EpZ7eatMOsS3H0/Xo5omH0J3Lxt2LcVp8fR3Omioa07CI1U45EGvlJWS8iCqAQE7+qXri6ISoSECcO+rTAtFoCKIx2BbqEapzTwlQqEtlp6+368MqZBa82Ib8lL8QR+eWN7IFumxjENfKUCwHnmb3D09fDdLrjssRHfk5sSA2gPXwWOBr5SAVBTtg+AI2kLoGEfOCtHfE98lIOU2AgqjmgPXwWGBr5SAdBSexCA9pmXeZ44+LZP78tLidUevgoYDXylAqCr4RAA8bPPg5gUKH3Lp/flpcRoD18FjCWBLyJni0iJiOwTkVsHeT1JRP4hIltEZIeIXG3FeZUKW85yOk0EiWk5UPQJT+AbM+LbPIHfgfHhWKVGy+/AFxE7cBdwDjADWC0iMwYcdiOw0xgzFzgN+I2IRPp7bqXCVWTrYersmYjNBsUrwVkOR0pHfF9+aixdLjf1rToWX1nPih7+EmCfMeaAMaYbeAJYNeAYAySIZ/pgPNAI6MLf6oQV31WNM9I77r74VM9XH8o6eUdH6mhZR1nPisDPBcr7Pa7wPtffncBJwGFgG3CzMcY92IeJyLUislFENtbV1VnQPKWCL81VS2dstudB+hSIz/Ix8HXylQocKwJ/sEU/BhYgzwI+BHKAecCdIpI42IcZY+4zxiwyxizKyMiwoHlKBVd7exsZHKE3Ic/zhIinrFP69oh1/NxkTw+/XHv4KgCsCPwKIL/f4zw8Pfn+rgaeNR77gFJgugXnVirs1FZ6avURqQUfPVm8Etpqoa5k2PfGRTlIjYvUHr4KCCsCfwMwRUSKvTdiLwOeH3BMGXAGgIhMAKYBByw4t1Jhx1nt+daOzSz66MnilZ6vPpR1cpKjqWrSwFfW8zvwjTEu4CbgZWAX8KQxZoeIXC8i13sPuw1YISLbgNeAW4wx9f6eW6lw1F7rGYOfkj3xoydTCiG5AEr/PeL7sxJjqHJ2Bqp5ahyzZD18Y8waYM2A5+7t9/fDwKetOJdS4a63yTOGIS276OMvFK+EXS+Auxds9iHfn50UzcZDjQFsoRqvdKatUhazt1TQQDKOqNiPv1B8KnQ2QfXw6+JnJUXT1N5DZ09v4BqpxiUNfKUsFttRRWPEIGvfF33C83WEOn5WYjQA1VrWURbTwFfKYindNbREZR37QmI2pE8dMfCzkzyBr3V8ZTUNfKUsZNxuMtx1dMflDH5A8Uo49B709gz5GVnewK9u1pE6yloa+EpZqOVILTHSjTsxb/ADildCTxtUbh7yM7K0h68CRANfKQs1VXnG4DtS8wc/wIc6fmykg6SYCK3hK8tp4CtloVbvxicx6YWDHxCbClmzRxyPn5UYrT18ZTkNfKUs1LfxSXL/SVcDFZ8K5euhZ+gafVZStPbwleU08JWyUlM5HSaSjMwhbtqCp47f2+UJ/SFkJ0VT3ayBr6ylga+UhSJaD1Mt6URHDjOJvWA5iH3YOn5WUjT1rV10uwZdRVypMdHAV8pCsZ1VNDoyhz8oOhFyFwwb+NlJ0RgDNdrLVxbSwFfKQslDTboaqHglVG6CrpZBX870zratbdHAV9bRwFfKKq4uUs0RumKHqd/3KV4JphcOvT/oy5kJUQDUNndZ2UI1zmngK2UR15EKANxJQ0y66i9/KdgjhxyemZnQ18PXwFfW0cBXyiLN3o1PHCkFIxwJRMR4Qn+IOn5aXCR2m2hJR1lKA18pixyddJVR5Nsbild6lkpuP3bte5tNSI+P1JKOspQGvlIWOTrpasIQs2wHKl4JGDj07qAvZyZEa0lHWUoDXymrOCuoNclkpib6dnzOAoiIG7Ksk5kQpYGvLKWBr5RFHK2VHDZppMVF+fiGSChcPnTgJ0ZRpzV8ZSENfKUsEtdRTb0jE7tNfH9T8Uqo2w0tNce8lJEQTUNbN65enW2rrKGBr5QVjCGpp4bmSB8mXfXXt1zywbePeSkzIQpjoL6124IGKqWBr5Q12huIMl10xGSP7n3ZcyEqadDx+EcnX2lZR1lEA18pKzjLAXAl5I7ufTY7FJ0yaB3/6PIKOjRTWcSSwBeRs0WkRET2icitQxxzmoh8KCI7RGT43R+UOs64mzyBjy+zbAcqXglHDsKRQx97+qMevga+sobfgS8iduAu4BxgBrBaRGYMOCYZuBu4wBgzE7jE3/MqFU466jxhHZnqwyzbgYpXer4OqOOnx2tJR1nLih7+EmCfMeaAMaYbeAJYNeCYLwDPGmPKAIwxtRacV6mw0dVwkHYTRULqhNG/OfMkiE0/pqwT6bCRGhepPXxlGSsCPxco7/e4wvtcf1OBFBF5U0Q2icgXh/owEblWRDaKyMa6ujoLmqdU4LmPlHPYpJHhXfRsVEQ8vfzSt8CYj72UmRClNXxlGSsCf7BBx2bAYwewEDgPOAv4bxGZOtiHGWPuM8YsMsYsysjIsKB5SgWeraXSG/g+TroaqHgltFRBw76PPZ2ZGK2Tr5RlrAj8CiC/3+M84PAgx7xkjGkzxtQDbwFzLTi3UmEhur2KSpPuX+DDMcMzdXkFZSUrAn8DMEVEikUkErgMeH7AMX8HPiEiDhGJBZYCuyw4t1Kh19NJbHcDtbZ04qOG2ct2OKkTITHvmDp+ZkIUdS1duN0DL5qVGr0xfnd+xBjjEpGbgJcBO/CQMWaHiFzvff1eY8wuEXkJ2Aq4gQeMMdv9PbdSYaG5EoDW6CxERrGsQn99dfw9L4HbDTZPXywzIQqX23CkvZu0+DFePSjl5XfgAxhj1gBrBjx374DHvwJ+ZcX5lAor3klXnbGjnHQ1UPFK2PIXqN0BWbOB/nvbdmngK7/pTFul/OX0bm2Y6G/ge9fV6VfW0clXykoa+Er5y1mBG8GR7GfgJ+VB6qQBge/p4ddp4CsLaOAr5afeI+XUmSRSEhP8/7DilXDwXeh1AZCeEAnobFtlDQ18pfzkOlLGYX+GZPZXvBK6W6DqQwBiIx3ERzm0h68soYGvlL+cFZ4x+FbcVO1bH7/fePwM79BMpfylga+UP4zB0VpJpT+zbPuLz4DMmVD60UJqGvjKKhr4SvmjrR57b5d1JR3wlHXK1oLLE/Ia+MoqGvhK+cM7Bv+wSTu6nLHfileCqwMqNgKQEa+Br6yhga+UP7xj8J2RE4iOsFvzmYUrQGxHh2dmJETR0uWio7vXms9X45YGvlL+8AZ+T3yOdZ8Zk+zZ69Yb+H2Tr+pbtZev/KOBr5Q/nBV0SjRRCenWfm7xSqjYAN1tR+8N6Fh85S8NfKX84SyjmnTSx7LxyXCKV4K7B8rWHg18reMrf2ngK+UPZwUVbouGZPZXsBxsDih9SwNfWUYDXyk/mKYKynpTrQ/8yDjIWwylb5EWF4VNNPCV/zTwlRqrng6kvc4zBj8QSxcXr4SqD7F3OUmL152vlP808JUaq2bPTp5+7WU7nOKVYNxw6D0di68soYGv1Fg1lQFQaTICE/h5i8ERfbSOX6fDMpWfNPCVGivvGPxKAtTDd0RBwTIofevo3rZK+UMDX6mxclZgEOpIJS0uQNsPFq+E2h0URrfpZubKbxr4So2Vs4JmRxoJcXHYbWPcvHwkxacCMLN7Ky63oamjJzDnUeOCBr5SY+Usp96eQXp8ZODOkT0PIhOY2LoZ0KGZyj8a+EqNlbOCKiuXRR6M3QFFJzOhYR2gga/8o4Gv1Fi43eCs4GBvgG7Y9le8kujmg2TToOvpKL9o4Cs1Fu310NvFge7koAQ+wHLbDu3hK79YEvgicraIlIjIPhG5dZjjFotIr4hcbMV5lQoZ78YnZb1pgZll21/mTExMKp9w7NLAV37xO/BFxA7cBZwDzABWi8iMIY77H+Blf8+pVMh5x+AHbJZtfzYbUvwJltt3UqclHeUHK3r4S4B9xpgDxphu4Alg1SDHfQ14Bqi14JxKhVbfpKtA37TtU7ySLFMHRw4G/lzqhGVF4OcC5f0eV3ifO0pEcoHPAveO9GEicq2IbBSRjXV1dRY0T6kAcFbgssfgJO7ojlQB5R2PX9i8MfDnUicsKwJ/sBknA6cD/g64xRgz4qacxpj7jDGLjDGLMjIyLGieUgHQVEZLdDYgZMRbvPnJYNIm0+JI5Uudf4aWmsCfT52QrAj8CiC/3+M84PCAYxYBT4jIQeBi4G4RudCCcysVGs4KGh2ZRNptJMY4An8+EVyOOFJMM643fhH486kTkhXfqRuAKSJSDFQClwFf6H+AMaa47+8i8kfgBWPMcxacW6nQcFZQG7mc9PhIRAK0rEKfn2aCq4sUAAHH5odh88OexdV+oLfElO/87uEbY1zATXhG3+wCnjTG7BCR60Xken8/X6mw09MB7fVUBGOEDsDNW2HWJfTaPOdy2yJg9iVw87bAn1udUCy5FjXGrAHWDHhu0Bu0xpgvWXFOpULGWQnAwZ4UMlKDEPgJWRCVgM3djTEg7h6ISoSECYE/tzqh6ExbpUbLO+lqb1cQZtn2aaulY+5VvO2ehcseC61641aNnga+UqPlDfyd7cmBn2Xb57LHiLjgt7xhFhDR2w5n/zI451UnFA18pUbLu/FJtUkJXg8fiLDbKImc5XlQtjZo51UnDg18pUbLWYErbgIuHEENfICmhKl0SCyUvRfU86oTgwa+UqPlLKc9Jhsg6IGflhjLLsdJ2sNXY6KBr9RoOStwRnpGyARllm0/GQlRbDDToHYntDcG9dzq+KeBr9RoeDc+abBnApCeEMDtDQeRkRDFW52TPQ/K1wX13Or4p4Gv1Gi01UFvN1VkEB/lIDYyCMsq9JMRH8VG10SMLQLK3g/qudXxTwNfqdHwLotc1psa9Po9QGZiNF1E0pkxBw5p4KvR0cBXajS8Y/APdKcEbwx+P33nbExbCIc/8CzzoJSPNPCVGg1vD393Z1JIevh95yxPnAfuHqjcFPQ2qOOXBr5So+GsgMh4SluDPwYfPgr8vZHeXUS1rKNGQQNfqdFwluNOzKWlszckgZ8Y7SDKYaO8MxoyZ+iNWzUqGvhKjYaznK44zw6eoajhiwgZCVHUtXRBwXIoXw/uETeSUwrQwFdqdJwVtEZnAcGfZdvnY4Hf3QLVui6+8o0GvlK+6m6H9gaORHhn2YYq8OO9gV+43POELrOgfKSBr5Svmj0bn9TZMoDQBX5mYhS1LZ2QlAdJ+bqQmvKZBr5SvvKOwa90pyECqXHBXVahT0Z8NEfae+h2uT1lnbK1YExI2qKOLxr4SvmqyRP4h3pTSY2NJMIemh+fviuLhjZvWae1BhoPhKQt6viiga+Ur5wVIDYOdCaGrJwDHwX+0Ru3oMMzlU808JXylbMCErKpbgvNGPw+md5z1zZ3Qfo0iEnRwFc+0cBXylfOckjKo66lKyRj8Psc7eG3doHN5unl64xb5QMNfKV85azA9AV+CHv4afGem8V1LV2eJwqWQeN+aKkJWZvU8cGSwBeRs0WkRET2icitg7x+uYhs9f55T0TmWnFepYLG7YbmSrrjcuhyuUMa+FEOO8mxEf0Cf4Xna7mOx1fD8zvwRcQO3AWcA8wAVovIjAGHlQKnGmPmALcB9/l7XqWCqq0WertpjgrtLNs+mQnesfgA2XPBEaNlHTUiK3r4S4B9xpgDxphu4AlgVf8DjDHvGWOOeB+uBfIsOK9SweNdFrm+b2vDENbwod/yCgCOSMhbpDdu1YisCPxcoLzf4wrvc0O5BvjnUC+KyLUislFENtbV1VnQPKUs4J10VU06ABMSg7t5+UAZ8VGem7Z9CpZD9Vboagldo1TYsyLwZZDnBp32JyKn4wn8W4b6MGPMfcaYRcaYRRkZGRY0TykLeHv4h1ypAExIDI8evumbYVuwDIzbs3qmUkOwIvArgPx+j/OAwwMPEpE5wAPAKmNMgwXnVSp4nBUQmUB5ewSxkXbio4K7eflAmQnRdPa4aelyeZ7IXwJi04XU1LCsCPwNwBQRKRaRSOAy4Pn+B4hIAfAscKUxZo8F51QquJo8Y/BrWrqYkBiNyGAXtsHzsdm2AFEJkDVH6/hqWH4HvjHGBdwEvAzsAp40xuwQketF5HrvYT8E0oC7ReRDEdno73mVCirvpKva5q6jM11D6ZjAB08dv2IDuLpD1CoV7iwZh2+MWWOMmWqMmWSM+Zn3uXuNMfd6//4VY0yKMWae988iK86rVNA4KyA5n5qWzpDfsIUhAr9wObg6oWpLiFqlwp3OtFVqJN1t0NGIScyj2tlJVlLoA//oejoDe/ig6+OrIWngKzUSp2fjk46YbLpc7rAo6STFRBBhl4/38OMzIXWS3rhVQ9LAV2ok3jH4DQ7PpKtwKOmIyEdbHfZXuNxz49btDk3DVFjTwFdqJN7ArwqTSVd9MhIGTL4CT1mn4wjUl4SmUSqsaeArNRLvxiflrmQg9JOu+mQkRFPb3PnxJ3VDFDWM0M4eUcpHL++o5nev7qXK2cGKSWl8/7wZ5CbHBOfkzgpIyKG61TPJKTMhfHr4H5Yf+fiTqRMhfoJnIbVFXw7IeY0xPPhOKY+8f5DOHjfnzc7mO2dNIy7Ek9HUyLSHr8LefW/t57o/b8LtNpw1I4t/l9RxyT3vUd7YHpwGOCs8k66aO0mMdhATaQ/OeUeQkRBFQ1s3rt5+9XoRzzILAerhG2P4wXPb+emLuyhIjWXZxDQeef8gF9/7Ps2dPQE5p7KOBr4Ka2+U1PLzNbs5b042L3z9FP7n4jk8ef1yWrpc3PzEB/S6B122yVreSVc1zeExBr9PRkIUxkBj24CJVgUrPG1uKh/8jX54ZnMlj60r47qVE3n0mqX8fvV8HrpqMXtrWrj58Q8+WttHhSUNfBW2nB09fO+ZbUydEM/tl84lwu75dp2Zk8Rtq2axuayJv6w7FNhGuN2eYZlJedQ0d4XFGPw+g47FB08PHywfnuls7+En/9jBkuJUvnv29KPLS5w+PZPvn3cSb5TU8dSmCkvPqaylga/C1p2v76W2pZNfXzKXKMfHyyir5uWwpDiVO17fR0d3b+Aa0VoD7h7vsgqdYVO/h49m2x7dCKVP1myITLC8rHPvW/tp6XLx4wtmYrd9fC2hq5YXsbgohf99qYS2vgXdVNjRwFdhqaa5kz+9f4jPzs9jTl7yMa+LCP955lTqWrp4enMAe5XeZZHdifnUtnSFzQgdgCxveanKOSDwbXbP6pkWBn5bl4tH3z/EebOzOSk78ZjXbTbhe+eeRH1rFw+9U2rZeZW1NPBVWLrnzf24jeEbn5oy5DFLi1OZkZ3IY2sPBa527B2DfyQyE5fbhFUNPzMhCrtNqGrqPPbFguVQuxPaGy05198+qKSly8XVJxcPecyCghTOnDGB+98+oL38MKWBr8JOZ08vz2yu4NzZ2eSnxg55nIhwxbJCdle3sLmsKTCN8fbwDxvPpKvsMKrhO+w2JiREcdjZceyLhd7x+BZsiGKM4dG1h5iRnciCguRhj73htEk0d7p4Wmv5YUkDX4Wdl7ZX09Lp4vOL80c8dtW8HOIi7Ty10foRKYAn8KMSqeyIACAnWGP/fZSdHMPhpkECP3ch2CIsWUhtd3ULu6tbWL20YMR9ABYUpDC/IJmH3i0NzggqNSo6U0LxQdkRXt1VQ2NbN8XpcayalxvS0sUTG8o8Y7yL00Y8Ni7KwZkzJvDyjmpuu3DW0ZE8lvGOwT/sLZuEXeAnRbOt0nnsCxExkDPfMwHLTy9urcImcM6sLJ+Ov+aUYm76ywe8vruWM2dM8Pv8Y+HqdfPKzhrWlTbiNoa5ecmcNyeb6IjwmEMRKhr445izvYdbn93KP7dX47AJybER1Ld28+t/7eG7Z03jmlOKg76z06GGNtYeaOQ7Z03DZvPt3OfOzua5Dw/z/v4GVk61eB9kZ5k38DuIcthIiY2w9vP9lJMcw7921mCMOfbfqnA5vH839HR4fgGMgTGGNduqWD4pjfR4325Ynz0zi8yEKJ5YXxaSwN9d3czXH/+APTWtxEbasduEP71/iF+9XMJvLp3LyZPTg96mcKElnXHqcFMHF9z1Dq/uquE7Z03jw//3aTb+4Eze/PZpnDo1g5++uIvbXtgV9Ik0T24sxybwuQV5Pr9n5dQM4qMcvLi1yvoGOSsgKZ8qZye5yTEh39pwoJykaLpdbhoGTr4Cz41bdw9Ubhrz5++qauFAfRvnzs72+T0Ou43PLczjjZJaagau9RNgH5Y3ccm973OkvYe7L1/Ath+dxZYffpq/fHUpCdEOrnxwHY+vLwtqm8KJBn4QGGNo73Z9fAp8CDW2dfOF+9fS2NrN419dxo2nTz66KXdRehz3XbmQL59czEPvlnL3m/uD1i5Xr5unNlZw2rTMUU1wio6w88npmby2uxa3lXXjrlbPypNJeRx2dpCdHD43bPtke0tMg9bx85d6vvpR1nlpu6ecc9ZM38o5fS5dlI/bwDOBHDI7QFlDO198cB0psZE8d+PJnDs7G7tNsNmEFZPSee7Gk1k5NYP/+ts2nvugMmjtGk5fNvQEKRu0pBNA6w408PC7B3l3Xz0tXS4iHTbm5SWzemk+F8zNPWbySjC4et187fHNHHZ28vhXl7KwMPWYY0SE/z7/JBrauvjNv0qYn5/MiiBcBv97Tx21LV0+3awd6LRpGTy/5TA7q5qZlZtkTYOavaGQlM/hpg4+McXicpEFcpL6Ar+TOQMvimJTIXOGX+Px39xTx4KCFJ/LOX2K0+NYUpTKUxsruOHUSQG/Murs6eWGxzxXMo9es3TQhfXiohzce8VCrnpoPd99ZiuTM+Ot+14Zpb01LTzwdimv7a6lvrULEZiZk8iF83JZvaQgYAvRaQ8/AJztPdz4l818/r61bDzUyPlzs7nl7OlctbyQ+rYuvvnXLXzunvc4WN8W9Lb97tW9vLuvgZ9dOGvQsO8jIvz8s7MpSo/jW09toTUI46qf2FBOenwUn5yeOer39tXu3yypta5B3jH4roQcalu6wu6GLXD0qqNqsKGZ4FlmoXw9uEc/G7m+tYutFU5OHeN9kUsX51Na38aGg0dGPthPd72xjx2Hm7n90nkUpA09lDc6ws7dly8gLS6S6x/dhLM9uAu+uXrd/PrlEs7+v7d5fsthTp6cxnfOmsaNp00mwm7jpy/u4szb/82/99QF5PwnZOBvr3QG7RJpoH21rZx7x9u8vL2ab505lXdu+SS/uGgON5w2ie+fN4PX/vNUfvf5eRxsaGPVXe+y7kBD0Nq2vdLJPf/ezyUL87hk0ci96LgoB7+6eA5Vzk5++8qegLattqWT13fX8rmFuWMaaZMeH8WcvCTeKLHwB8W7+FidLQNjPPXycJMWF0mkw3bsbNs+BSuguwVqto/6s9/ZWw/AqdPGFvjnzs4iPsrBXzcEaMisV0l1C/e8uZ+L5ufyKR9uEqfFR3H35QuocnZy24s7A9q2/tq7XVz3503c+cY+LpyXy3u3fpL/u2w+N54+mW+fNY2//cfJPHndcmKjHHzryQ9p77a+k3XCBb6zvYfV96/l/DveYdOhwPcs+ttS3sQl975Hl8vNMzes4GtnTDlmGJiIcOH8XJ6/8RTS4yO5+o8b2HjQmtmQw+npdfPdp7eSGhfJD86f4fP7Fham8oWlBTz8bim7qpoD1r5nN1fS6zZc6sMvoqGcNi2TD8qO0NQ+yA3MsXBWgNip6E0GPqqXhxMRIScpmsrBavjw0QSsMdTx/72njtS4SGbljK3sERvp4Pw52fxze1XAZt4aY/jR8ztIiHbw/fNO8vl98wtSuOHUSTy9qYI3dlt4VTgEV6+b6/68iTdKarlt1Ux+c+lcUuIijzluSXEqL379FP58zVJiI60v65xwgZ8UG8Htl86jubOHS+59j/ve2h+UkSa7q5u54sF1xEc7eOaG5czNTx72+IK0WB6/dhlZidF86eENlFS3BLR99799gJ1Vzdy2aiZJMaMbWnjLWdNJiI7gf17aHZC2GWN4ckM5i4tSmJQRP+bPOXVqBm4D7+236KrJWQGJORxu9lz2h2MPHyA7KYaqoQI/KQ+S8kc9AcvtNry1p46VU9J9Hh47mIsX5tHe3cuabQEYQYXn3/r9Aw18/YwppI3yPsPXzpjM1AnxfO/ZbTg7Alva+d+XS3h7bz2/uGg2Vy4vGvbYKId90PWKrGBJ4IvI2SJSIiL7ROTWQV4XEbnD+/pWEVlgxXmHcuaMCbzyn6dyzqxsfr5mN9/864d0uwJX4qk40s5VD60nNtLOE9cupzAtzqf3ZSZE89hXlxIbaeeaRzbQMHB/UoscqGvld6/u5eyZWZw9y/fhdX2SYiO48fRJvFlSx3v76y1v34aDRzhQ38bnFxf49Tlz8pKIi7Sz1qoy2YBJV+HYwwdPHX/Ikg54hmeWrYVRdHz21LbQ0NbNKX7eqF5YmEJxelxAllowxvCbf5WQnRTN6iWj/96Jctj59SVzqWvt4pf/3GV5+/o8v+Uw9711gCuXFfr9Pe4vvwNfROzAXcA5wAxgtYgMrBmcA0zx/rkWuMff844kPsrBnV+Yz3fOmsZzHx7m+kc30dlj/TK6jW3dfPGh9bR39/LIl5eMetu97KQY7vviImpburjhsc2W33twuw23PruNaIeNn6yaOebP+eLyInKSovmff+62/IrpiQ1lxEc5OHf26Ib+DRRht7GoKJX3Levhlx+ddJUY7Tg6dDXc5CTFUNPcOfSw34JlnmWeGw/4/JnrDnjKjEuLh76x7wsR4eKFeawrbaSswdodyt4sqWNzWRM3fXLymGfQzslL5iunFPP4+vKAdGZ2Hm7mu09vYXFRCv89ilJqoFjRw18C7DPGHDDGdANPAKsGHLMK+JPxWAski8jou5qjJCLcePpkfvbZWbxRUsvVD2+wtJbY3u3iy3/cQMWRDh744iKmZ43tMmxefjL/+7k5rC9t5GcvWtvTeHxDGetLG/n+eSeR6cdyCdERdr5x5lS2VDh5eUeNZe1r7uxhzbYqPjM3x5Ka5fJJaeytbaXe36sldy80H4akPMqPtA+7iFuo5STH4DZQM3AjlD6FKzxfRzE8c31pI7nJMZb8d392fi4iWLqMtTGG37xSQn5qDJcsHPt9H4BvfGoqhWmxfO/ZbZburXCkrZvrHt1Ickwkd1++kEhH6CvoVrQgF+h/G77C+9xojwmYy5cWcvulc1l/sJErH1xnyd6bPb1ubnxsM1srmrjjsvksnTjyui/DuXB+Ll8+uZg/vneQv31gzQ9GtbOTX67ZzYpJaX7dDO1z0fxcJmbEcfsrJZYtjPWPLYfp7HFz2RjG3g9mmfffoa+HOmb9Nj4pb2ynIIwDPy/Fc1U55B6/6dMgJsXnwDfGsK60gSV+9u775CTHcMrkdJ7ZVGHZxLiXd9SwvbKZm8+Y6neQxkTa+cVFsznU0M7vXrVmNJqr183Xn/iAGmcX91yx4OhmNaFmReAPdkdn4L+qL8d4DhS5VkQ2isjGujrrhth9dn4ed66ez7ZKJ5ffv44jg01F95Exhlue2cobJXXcduEszvZxUamRfO/c6SwtTuXWZ7axfbAFsUbZxu//bRs9bje/uGi2JRNfHHYb3/zUVPbUtPLC1sN+fx7AXzeUMz0rgTl51kyAmZWTSHyUg/cP+Hl53rfxSUIe5Uc6wjrwC73jzsuGCnybDfKX+TxSZ39dG/Wt3X6Xc/q7eGEelU0dltxfcbsNv31lDxPT47hwXo4FrYMVk9K5bHE+9799gG0V/v3sAfzqX56btD+9cBbzC1IsaKE1rAj8CqB/9ywPGJgGvhwDgDHmPmPMImPMoowMa2c2njM7mz9cuZCSmhZW3792TJf9xhh+vmYXz26u5JufmsrlSwsta1+E3cadX1hASqxnUog/v5Se+7CS13bX8p2zpvt8E9kXfTse/faVPX7fb9he6WRrhZPPL863bCamw25jcVEKa/3t4XsnXTVGTKDb5SYvjAM/JzkGmwzTwwfP8MzG/dA68hDE9aXe+r2fV639nTUzi4RohyU3b1/YVkVJTQvfOHMqDgtXR/3euSeRHh/Fd5/Z6tf39j+2HOYP/z7AFcsKuNSiK1erWPF/awMwRUSKRSQSuAx4fsAxzwNf9I7WWQY4jTGBGac1gk9On8BDVy3mYEMbn//D+1QPN7phAGMMP3lhJ/e/XcqVywr5+hmTLW9fRkIU9165kNrmLr7+xAdjKp3UtnTy43/sZEFBMl9aUWRp+2w24VtnTuVgQzvP+PnD+5f1ZURH2Lhovu8Lpfli2cQ09tW2UjdUTdsX3h7+oV5PLzece/gRdhs5yTEcGu6maIHvdfx1pQ1kJERRNMyM1dGKjrDzmbk5rNleRYsfJVVXr5vfvbKHaRMSOH8UC7r5Iikmgp+smsWuqmbue8v3G9z97apq5rtPb2VRYQo/PH/sgyQCxe/AN8a4gJuAl4FdwJPGmB0icr2IXO89bA1wANgH3A/8h7/n9ccpU9J55OolVDs7ueDOd9jgw8Snzp5evvXUFh5+9yBXn1zET1bNDNj6IPPyk/nJqpm8vbee3/yrZFTv7XUb/vOvW+jo7uV/L54bkPV6zjgpk7n5ydzx2l66XGO7ydXa5eLvH1TymTk5JFm85HBfHd+v8oGzAqKSONjiGf0RzoEPnrLOkCUdgOy54IgZsaxjjGHdgUaWFqda/v198cI8OnvcvODHqqbPfXiYA/VtfPPMqX7NDxjK2bOyOGdWFv/32l52V49uomF9axdfeWQjiTEO7r5iQVjcpB3IkhYZY9YYY6YaYyYZY37mfe5eY8y93r8bY8yN3tdnG2M2WnFefyydmMbTN6wgNtLO6vvW8uuXS4acyrytwslFd793tIzzw/NnBHwxqMuWFLB6ST53v7mfl7b7/gPy+9f38s6+en58wUwmZ459EtNwRITvfHqaZwG2dWNbava5Dypp6+7l8mXWlcT6zPTW8deV+hn4SXmUNbYjAjlhuFJmfwWpscOXdByRkLdoxB5+eWMH1c2dlpZz+szPT2Z6VgKPvHdwTEN7u11u/u+1PczKTeSsmYFbZ/8nq2aRHBPBdX/e5POErM6eXq7900Ya2rq4/4uLyEwIz++X8PsVFEQnZSfy95tO4TNzc7jzjX2s/N83+PmaXbyys4b39zfw5MZyrvnjBi646x1qmjt5+EuLuflTU4K2JvqPLpjJvPxkvvXkFp9u4v79w0p+9+peLpqfO6YVJ0fj5MlpLJuYyp1v7B/1mh99e6TOzElkrkU3a/tz2G0sLEzxb6ROU/nRETrZidFEOcJ7p6T81Fga2rqHX+SuYBlUb4WuoWd1r/X+krTyhm0fEeHLJxezu7plTHMlnthQRnljB9/+9LSA/gxmJERxzxULONzUwU1/2TziVWyXq5eb/rKZzWVN/PbSeczJSw5Y2/w1rgMfPHW7335+Hk9fv5x5+Sk8+E4pX/3TRlbfv5bvPr2VrZVObjp9Mm985zROH8Mqjv6Icti554oFJMVEsPq+tcP+kPztgwq+9eQWlk1M5ecWjcoZjojw7U9Po761i0feOzSq975RUsvu6ha+fHLgdtRaOjGVvbWtY5+97J10Fe5j8PsUpnpuzA87ualgORj3sBubrzvQSGpcJFMCdHV4wbwcUuMieejd0lG9r63LxR2v7WNpceqYV+8cjYWFqfziojm8vbeeGx7dPOT8nebOHq790yZe3VXLbRfO4hyL7ytYLTynDobAoqJUHihKpa3LRUlNC53dvWQlRVOUFheQWqGvspNieOY/VnDlg+u54sF1XLdyItetnHS07t3U3s2v/1XCo2vLWD4xjT98cWHQ9u1cVJTKadMyuPff+7l8WQGJ0SPX4o0x3Pn6PnKTY7jAoiF1g1nq3Q93w8HG0S8n0dUCnU2QnE/Z1nZWhuE6+AP13WMoa2xnRs4QEwDzl4DYPMssTD5j0EPWH2xgcVFKwH4RR0fYuWJZIXe8tpedh5uHbusAD71TSn1rF3+4cmHQrrAvXphHl6uX/35uO5+9+11uWzXraKnLGMMbJbX8+B87qTjSwS8vms1lY1jeIdg08AeIi3KwIIzGzYIn9J/9jxX85B87ufvN/Tz0bimzc5MwBrZWOnH1uvnyycXccs60oJcevv3paZz/+3d48O1Svnnm1BGPf/9AA5vLmrht1UzrNxzvZ3ZuEjERdtYeGEPgOz0bn3TH51LT3HVc9PD7An/YOn5UAmTNHrKOf7ipg/LGDq5eURyIJh51zcnFPPxuKbe/UsIDVy0e8fiKI+3c/eZ+zpo5gYWFwf3ZvHxpIYWpcXz7qS18/r61TEyPIzs5moP17VQ2dVCYFssT1y5jcZH1JbBA0MA/TiRGR/DrS+ZyzSnF/HVDOTsPNyM2uHJZIZcuymdaVkJI2jUrN4lzZ2fxh7f2c+H8XIrThx7z3+s2/PSFXeQkRfu0Hr8/Ih02FhQms650DHV875DMatKBjqMTm8JZUmwEidEODjWOsKlOwQrY9EdwdXtu5PbTd5Pbqhm2Q0mKjeD6Uyfxq5dL2HSocdiNeAB+9LxnzfoffiY0wxxPmZLOm985jac2lvNmSR0Nbd3MyUvim2dOZdW8nIB2XKymgX+cOSk7kR9dEF7je//fZ2byzt56vv3UFp68bvmQQ0EfX1/Gzqpmfr96flDKTkuL0/jtq3twtveMbuind9LV/q5koMOvJZuDqTg9joP1IyxQVrgc1t0DVVsg/+O96/WljSREOwK2NG9/X1pRxB/fO8gPntvB3288ecghjH//sJJXd9Vw6znTR70woZWiI+xcubxoxKWNw93x86tJha0JidH8eNVMNh06wq+HmDdQWt/Gz9fsYvnENM6fE5wbW0uLUzEGn+ZZfIyzHMTOzlZPwEzMsG6mciBNyohnX23r8AcVeDdEGWR9/HWljSwpSg3KXstxUQ5+dqFnktMdr+0d9Jh9ta3817PbWFSYwjWnBLbMNF5o4CtL9G2+fM+b+7n/rQMfG2dd5ezgSw+vJ8ph4/bPzw3aTbe5+clEOmyjH4/v3fhkb10nuckxAdl5KBAmZcZT3dw5/EzW+ExIneS5cdtPbUsnB+raAl7O6e/TM7O4dFEed76xj79u+Ph8jgN1rVz54DqiI+zcsXr+cVU2CWfHx3eyCnsiwm2rZtLU3s3P1uxiXWkDn5mbQ7Wzk/veOkBnTy+PfmUp2UnBuyyPjrAzL38MdXxnBSTls7+u7bjp3QNHJ9odqGsbfse1guVQ8iK43Z6F1YANpZ7tQIMZ+AC3XTiLKmcntzyzjbUHGjnjpEz21LTy0DulRNiFx76yLCw3jz9e6a9NZRmH3cZdX1jA986ZzrrSRm5+4kN+8c/dTMyI4+83nRySVQOXFaeyvdI5/ISkgZzlmKQ89te1Hjf1e/go8Ecs6xQuh44jUP9R+W1daQOxkXZm5Vo/EW44UQ47D31pMTecNol/bq/ipr98wB2v7WVpcSovfP0TPg/bVL7RHr6ylM0mXHfqJK4+uZgD9a0kRkeEtIe2dGIad7y+j40HGzltmg8T57wbn7RFZ9He3cukAE1ACoSC1FgcNmFfna91/Pch07Px9/rSRhYWpoSkdBJht3HL2dO56fTJHGpoZ0Ji1Kj3p1W+0R6+CohIh43pWYkhvxxfUJCCwya+l3VaqsHtohrPZKtJx1FJJ8Juoyg9buQefupEiMs8upBaU3s3u6tbArKcwmjERTmYkZOoYR9AGvjqhBYTaWdOXhLrfF050zsGf1+3p7QxJTM08xvGarIvI3VEPGUd743bvvXvlxRbv2CaCi8a+OqEt3RiGlsrnL7tV+odg7+1OYHMhKiw2ZrOVydlJ3KwoW3kvZsLVoCzDJwVrC9tJNJhs2zXMRW+NPDVCW9pcSout2Fz2ZGRD/b28N9viGXmcXjDcGZOIsZ4NuIYVsEyz9dD77OutJF5+clBW4NJhY4GvjrhLSpKxSb4VtZxVmCik9ha72ZmzvHX4+0bZTPictoTZkFkAp0H3mX7YSenTE4PQutUqOkoHXXCi49yMCs3ibW+3Lh1VtAZm0NvkzkuhwROSIwiPT6S7YdH6OHbHZC/mJ59b/JExPvE5v4pOA1UIaU9fDUuLJuYxodlTSNv1uIsp9HhGb55PJZ0RIQZOUnsGCnwAQpWkNBaymJbCTP33hv4xqmQ08BX48KpUzPo7nXz7r4RyjrOcsp7U0mIcpCfEv6rZA5mVk4ie2ta6OwZ5ib1TzPhjZ8CYMNg2/QQ/CjJ87w6YWngq3FhcZEnxF/fXTP0QZ3N0Olke1siCwpTQrrxjT/m5ifjchu2DVfHv3krzZM+w9EljxwxMPsSuHlbUNqoQkMDX40LkQ4bK6dm8Nqu2qE30G72bHyypTkh6GvKWKlvM471w92zSMiirD0Kg2DsUdDbBVGJkBC4zcFV6Gngq3Hjk9MzqW3pYnvlEPVt75DMSpPOoiDvrGSl1LhIpk1IGHF2cUtDJS9Fn4t89TVYeDW0DnP1o04IOkpHjRunT8/EJvCvndXMHmySkXfSVZ09Y/jVJo8DS4pTeXZzBd0u96Cbi1QcaWd189e45ezpkDUJzr89BK1UwaY9fDVupMZFcvLkdP72QSVu97FlHdNUjgsbUyZOOu4nIa2cmkFbd++QZZ2XtlcDcM6srGA2S4WYX4EvIqki8oqI7PV+PeY6WETyReQNEdklIjtE5GZ/zqmUPz63II+KIx2sH2QXrLbKXbiMjXMmRQ7yzuPLKZPTiY6w8crO6mNeM8bw9KYKZuUmUjTMHsTqxONvD/9W4DVjzBTgNe/jgVzAt4wxJwHLgBtFZIaf51VqTD49cwJxkXae2lhx7IsV64nCxTn1jwS/YRaLibRzyuQMXt5RQ++Aq5kPy5vYXd3C6iUFIWqdChV/A38V0PfT8Qhw4cADjDFVxpjN3r+3ALuAXD/Pq9SYxEY6uGhBHs9vqeRwU4fnyZ9mwo+SiO9pQATitz1yQoxJv3hhLtXNnby26+M3Yx94u5S4SDsXzM0JUctUqPgb+BOMMVXgCXZg2J8QESkC5gPrhjnmWhHZKCIb6+rq/GyeUse67tSJGAO/f927efbNW6nIPQ+X8f44nCBj0j910gRykqJ54J3So0NRt1c6eXFbFV8+pZiE6IgQt1AF24iBLyKvisj2Qf6sGs2JRCQeeAb4hjFmyHnfxpj7jDGLjDGLMjIyRnMKpXySlxLLl1YU8fj6cl7eUU0tyayvcmETg3GcOGPSHXYb1582ifWljfx1QznOjh6+/dQW0uIi+copE0PdPBUCIw7LNMZ8aqjXRKRGRLKNMVUikg3UDnFcBJ6wf8wY8+yYW6uURb591jTWlTZy3Z83EeWw8XtbI40zryD91Otg48MnzJj0y5cW8vKOam59dhs//sdOXG43D1y1mKRY7d2PRzLkrENf3izyK6DBGPNLEbkVSDXGfHfAMYKnvt9ojPnGaD5/0aJFZuPGjWNun1LDaens4cF3Sqlt6eKKpYXH5eqYvujo7uWhd0upONLOpYvyQ7KZvAoeEdlkjFk06Gt+Bn4a8CRQAJQBlxhjGkUkB3jAGHOuiJwCvA1sA9zet/6XMWbNSJ+vga+UUqMzXOD7NdPWGNMAnDHI84eBc71/fwc4PlehUkqpE4jOtFVKqXFCA18ppcYJDXyllBonNPCVUmqc0MBXSqlxQgNfKaXGCQ18pZQaJ/yaeBVoIlIHHAp1O7zSgfpQN2IE4d7GcG8fhH8bw719oG20gj/tKzTGDLoQWVgHfjgRkY1DzV4LF+HexnBvH4R/G8O9faBttEKg2qclHaWUGic08JVSapzQwPfdfaFugA/CvY3h3j4I/zaGe/tA22iFgLRPa/hKKTVOaA9fKaXGCQ18pZQaJzTwx0BEvi0iRkTSQ92W/kTkVyKyW0S2isjfRCQ51G3qIyJni0iJiOzz7o4WNkQkX0TeEJFdIrJDRG4OdZuGIiJ2EflARF4IdVsGIyLJIvK09/twl4gsD3Wb+hORb3r/jbeLyOMiEh0GbXpIRGpFZHu/51JF5BUR2ev9ask2ZRr4oyQi+cCZeHb4CjevALOMMXOAPcD3QtwewBNSwF3AOcAMYLWIzAhtqz7GBXzLGHMSsAy4Mcza19/NwK5QN2IY/we8ZIyZDswljNoqIrnA14FFxphZgB24LLStAuCPwNkDnrsVeM0YMwV4zfvYbxr4o/db4LtA2N3tNsb8yxjj8j5cC+SFsj39LAH2GWMOGGO6gSeAVSFu01HGmCpjzGbv31vwhFRuaFt1LBHJA84DHgh1WwYjIonASuBBAGNMtzGmKaSNOpYDiBERBxALHA5xezDGvAU0Dnh6FZ69wPF+vdCKc2ngj4KIXABUGmO2hLotPvgy8M9QN8IrFyjv97iCMAxUABEpAuYD60LclMH8Dk9nwz3CcaEyEagDHvaWnR4QkbhQN6qPMaYS+DWeq/MqwGmM+VdoWzWkCcaYKvB0SIBMKz5UA38AEXnVW98b+GcV8H3gh2Hcvr5jvo+nTPFY6Fr6MYPtaRx2V0giEg88A3zDGNMc6vb0JyLnA7XGmE2hbsswHMAC4B5jzHygDYtKEVbw1sFXAcVADhAnIleEtlXB5dcm5iciY8ynBnteRGbj+UbZIiLgKZdsFpElxpjqULevj4hcBZwPnGHCZ5JFBZDf73EeYXAp3Z+IROAJ+8eMMc+Guj2DOBm4QETOBaKBRBF51BgTToFVAVQYY/qujp4mjAIf+BRQaoypAxCRZ4EVwKMhbdXgakQk2xhTJSLZQK0VH6o9fB8ZY7YZYzKNMUXGmCI839wLghn2IxGRs4FbgAuMMe2hbk8/G4ApIlIsIpF4bpQ9H+I2HSWe3+APAruMMbeHuj2DMcZ8zxiT5/3euwx4PczCHu/PQrmITPM+dQawM4RNGqgMWCYisd5/8zMIo5vKAzwPXOX9+1XA3634UO3hn1juBKKAV7xXIWuNMdeHtklgjHGJyE3Ay3hGRjxkjNkR4mb1dzJwJbBNRD70Pvdfxpg1oWvScetrwGPeX+wHgKtD3J6jjDHrRORpYDOekucHhMESCyLyOHAakC4iFcD/A34JPCki1+D5RXWJJecKn6t+pZRSgaQlHaWUGic08JVSapzQwFdKqXFCA18ppcYJDXyllBonNPCVUmqc0MBXSqlx4v8D8BL21NZQQSkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 4.5\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": [
    "# FIR"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "efc93b69",
   "metadata": {},
   "outputs": [],
   "source": [
    "delay = 3\n",
    "amplitude = 1\n",
    "\n",
    "d_int = int(np.floor(delay))\n",
    "d_frac = delay - d_int\n",
    "\n",
    "h_int = np.concatenate([np.zeros(d_int-1), [amplitude], np.zeros(3)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "43372541",
   "metadata": {},
   "outputs": [],
   "source": [
    "H_int = fft(h_int)\n",
    "h = ifft(H_int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a32cb580",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<StemContainer object of 3 artists>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "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": [
    "test = np.random.randint(0, 10, size = 20)\n",
    "y = np.convolve(test.real, h_int)\n",
    "\n",
    "plt.stem(test, linefmt=\"C0-\")\n",
    "plt.stem(y, linefmt='C1-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "39fb3489",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 6, 5, 2, 9, 9, 5, 9, 2, 1, 5, 8, 0, 5, 1, 6, 9, 9, 9, 8])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7fd06347",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 1., 0., 0., 0.])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h_int"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a9612999",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 3., 6., 5., 2., 9., 9., 5., 9., 2., 1., 5., 8., 0., 5., 1.,\n",
       "       6., 9., 9., 9., 8., 0., 0., 0.])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "706a51b1",
   "metadata": {},
   "source": [
    "# FIR mit Delay \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d51e107c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "System frequencies fs=10, T=0.1\n",
      "Tap with amplitude=4, delay=0.7250000000000001\n",
      "Creating filter of order N=15.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<StemContainer object of 3 artists>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAQ5ElEQVR4nO3df2xd9X3G8eeZMevlR+VVcQd2wsIm5IFgqyuLNos0TRTktCDwkCZRrRXTKoU/1pVurbO4SJP2x0YkT12nrdoaFUalskCVuh6Cdi4rRRUTJTgYYiD1ikpJYtPFCLmU7ooY+7M/7nVkO05y7Xuuz/ne+35JUXyP7e994nv95Nzv+Z5zHRECAKTrV/IOAACoD0UOAImjyAEgcRQ5ACSOIgeAxF2Qx51u2bIltm/fnsddA0CyDh8+/EZEdK7enkuRb9++XePj43ncNQAky/Zra21nagUAEkeRA0DiKHIASFxmRW67zfaE7UezGhMAcH5Z7pHfLelohuMBAGqQyaoV21sl3SzpbyX9ZRZjAlkYnZjW8NiUZubK6uooabC/RwO93XnHAjKV1fLDL0naI+nSjMYD6jY6Ma2hkUmV5xckSdNzZQ2NTEoSZY6mUvfUiu1bJJ2MiMPn+brdtsdtj8/OztZ7t8B5DY9NnS7xJeX5BQ2PTeWUCGiMLObId0q61fZPJT0k6QbbX1/9RRGxPyL6IqKvs/OME5OAzM3Mlde1HUhV3UUeEUMRsTUitku6Q9ITEfGJupMBderqKK1rO5Aq1pGjaQ3296jU3rZiW6m9TYP9PTklAhoj02utRMSTkp7Mckxgo5YOaO45eESnFhbVzaoVNKlcLpoFbJaB3m4dOHRMkvTwXTtyTgM0BlMrAJA4ihwAEkeRA0DiKHIASBxFDgCJo8gBIHEsPwTWgaspoogocqBGXE0RRcXUClAjrqaIoqLIgRpxNUUUFUUO1IirKaKoKHKgRlxNEUXFwU6gRlxNEUVFkQPrwNUUUURMrQBA4ihyAEgcRQ4AiaPIASBxFDkAJI4iB4DEUeQAkDiKHAASR5EDQOIocgBIHEUOAImjyAEgcRQ5ACSOIgeAxFHkAJA4ihwAEscbS6BQRiemNTw2pZm5srp4Bx6gJhQ5CmN0YlpDI5Mqzy9IkqbnyhoamZQkyhw4h7qnVmy/x/Yh2y/Yfsn232QRDK1neGzqdIkvKc8vaHhsKqdEQBqy2CN/R9INEfG27XZJT9n+TkT8MIOx0UJm5srr2g6gou498qh4u3qzvfon6h0Xraero7Su7QAqMlm1YrvN9vOSTkp6PCKeWeNrdtsetz0+Ozubxd2iyQz296jU3rZiW6m9TYP9PTklAtKQSZFHxEJEfEDSVknX2752ja/ZHxF9EdHX2dmZxd2iyQz0duve26/ThW2Vp2V3R0n33n4dBzqB88h01UpEzNl+UtIuSS9mOTZaw0Bvtw4cOiZJeviuHTmnAdKQxaqVTtsd1Y9Lkm6U9KN6xwUA1CaLPfLLJX3Ndpsq/zF8IyIezWBcAEAN6i7yiDgiqTeDLACADeBaKwCQOIocABJHkQNA4ihyAEgcRQ4AiaPIASBxFDkAJI4iB4DEUeQAkDiKHAASR5EDQOIocgBIHEUOAImjyAEgcRQ5ACSOIgeAxFHkAJA4ihwAEkeRA0DiKHIASBxFDgCJo8gBIHEX5B0AaHWjE9MaHpvSzFxZXR0lDfb3aKC3O+9YSAhFDuRodGJaQyOTKs8vSJKm58oaGpmUJMocNWNqBcjR8NjU6RJfUp5f0PDYVE6JkCKKHMjRzFx5XduBtVDkQI66Okrr2g6shSIHcjTY36NSe9uKbaX2Ng329+SUCCniYCeQo6UDmnsOHtGphUV1s2oFG0CRAzkb6O3WgUPHJEkP37Uj5zRIEVMrAJA4ihwAEld3kdveZvv7to/afsn23VkEAwDUJos58nclfS4inrN9qaTDth+PiJczGBsAcB5175FHxOsR8Vz1419IOiqJQ+4AsEkynSO3vV1Sr6Rn1vjcbtvjtsdnZ2ezvFsAaGmZFbntSyR9U9JnI+Kt1Z+PiP0R0RcRfZ2dnVndLQC0vEyK3Ha7KiX+YESMZDEmAKA2WaxasaT7JB2NiC/WHwkAsB5Z7JHvlPRJSTfYfr7652MZjAsAqEHdyw8j4ilJziALAGADOLMTABJHkQNA4ihyAEgcRQ4AiaPIASBxFDkAJI4iB4DEUeQAkDiKHAASR5EDQOIocgBIHEUOAImjyAEgcRQ5ACSOIgeAxFHkAJC4ut9YAq1tdGJaw2NTmpkrq6ujpMH+Hg30ducdC2gpFDk2bHRiWkMjkyrPL0iSpufKGhqZlCTKHNhETK1gw4bHpk6X+JLy/IKGx6ZySgS0JoocGzYzV17XdgCNQZFjw7o6SuvaDqAxKHJs2GB/j0rtbSu2ldrbNNjfk1MioDVxsBMbtnRAc8/BIzq1sKhuVq0AuaDIUZeB3m4dOHRMkvTwXTtyTgO0JqZWACBxFDkAJI4iB4DEUeQAkDiKHAASR5EDQOIocgBIHEUOAInLpMht32/7pO0XsxgPAFC7rPbIH5C0K6OxAADrkEmRR8QPJL2ZxVgAgPXZtDly27ttj9sen52d3ay7BYCmt2lFHhH7I6IvIvo6Ozs3624BoOmxagUAEkeRA0Dislp+eEDS05J6bJ+w/aksxgUAnF8mbywRER/PYhwAwPoxtQIAiaPIASBxFDkAJI4iB4DEUeQAkDiKHAASR5EDQOIocgBIHEUOAInL5MxOAMUxOjGt4bEpzcyV1dVR0mB/jwZ6u/OOhQaiyIEmMjoxraGRSZXnFyRJ03NlDY1MShJl3sQocqCJDI9NnS7xJeX5BQ2PTVHkOWvkKyWKHGgiM3PldW3H5mj0KyUOdgJNpKujtK7t2BzneqWUhWSKfHRiWjv3PaEr9z6mnfue0OjEdN6RgMIZ7O9Rqb1txbZSe5sG+3tySgSp8a+Ukpha4QAOUJul34c9B4/o1MKiulm1UghdHSVNr1HaWb1SSmKPvNEvS4BmMtDbrd4rOvShK9+n/957AyVeAI1+pZTEHjkHcACkrNGvlJIo8ka/LAGARhvo7daBQ8ckSQ/ftSPTsZOYWuEADgCcXRJ75BzAAYCzS6LIpca+LAGA5VK7Xk0yRQ4AmyHF5c5JzJEDwGZJcbkzRQ4Ay6S43JkiB4BlUrxeDUUOAMukuNyZg50AsEyKy50pcgBYJbXlzkytAEDiKHIASBxFDgCJy6TIbe+yPWX7Fdt7sxgTAFCbug922m6T9GVJN0k6IelZ249ExMv1jt1IqV1LAQDOJotVK9dLeiUifiJJth+SdJukzIt815P/rstmj+u1p95b1zhvvP2O5t/4pT6zGKe3zT9mHd5ysbZc8qv1xmw5f/L6W5JU9+PSquM1YsxGZGw1jXqcf9a5Tcp4JUwWRd4t6fiy2yckfWj1F9neLWm3JF1xxRUbuqOPXne53jn68w1973LH3yxrcVmJS9LiYuj4m+W6i/zl6oN/zeXZPPhFHy/rsVpxvEaMmfV4jXjeFP253ajHuffqyzMfN4si9xrb4owNEfsl7Zekvr6+Mz5fi8u+8IWNfNsZ/mDvY2cGVOUf8uq+m+sae89XnpaU3drToo+H1tCI5w3P7exkcbDzhKRty25vlTSTwbgNk+K1FADgbLIo8mclXWX7StsXSrpD0iMZjNswKV5LIQujE9OaODanZ159Uzv3PaHRiem8IwHIQN1TKxHxru1PSxqT1Cbp/oh4qe5kDbS0OqWVVq0sXSz/1MKipDQulg+gNplcayUivi3p21mMtVkGertbqsDOdbH8Vvo5AM2IMztbRIoXywdQG4q8RXCAF2heFHmLaNUDvEAr4HrkLaIVD/ACrYIibyGtdoAXaBVMrQBA4ihyAMlr9ZPdKHIASTvbyW6tVOYUOYCknetkt1ZBkQNIGie7UeQAEsfJbhQ5gMRxshvryAEkjpPdKHIATaDVT3ZjagUAEkeRA0DiKHIA59TqZ02mgCIHcFacNZkGijxD7Lmg2XDWZBoo8oyw54JmxFmTaaDIM8KeC5oRZ02mgSLPCHsuaEacNZkGijwj7LmgGQ30duve269Td0dJltTdUdK9t1/X0iffFBFndmZksL9HQyOTK6ZX2HNBM2j1syZTQJFnhOs9AMgLRZ4h9lwA5IE58gJjXTqaFc/tbFHkBcW6dDQrntvZo8gLinXpaFY8t7NHkRcU69LRrHhuZ48iLyjWpaNZ8dzOHkVeUJxRh2bFczt7dRW57T+y/ZLtRdt9WYUCZ9ShefHczp4jYuPfbF8taVHSVyR9PiLGa/m+vr6+GB+v6UsBAFW2D0fEGTvNdZ0QFBFHq4PXMwwAoA6bNkdue7ftcdvjs7Ozm3W3AND0zrtHbvu/JF22xqfuiYj/qPWOImK/pP1SZWql5oQAgHM6b5FHxI2bEQQAsDEsPwSAxNW7auUPJf2TpE5Jc5Kej4j+Gr5vVtJrG7zbLZLe2OD3bpaiZyx6Pqn4GYueTyJjFoqW7zcionP1xrqKPA+2x9daflMkRc9Y9HxS8TMWPZ9ExiwUPd8SplYAIHEUOQAkLsUi3593gBoUPWPR80nFz1j0fBIZs1D0fJISnCMHAKyU4h45AGAZihwAEpdUkdveZXvK9iu29+adZznb22x/3/bR6qV9784709nYbrM9YfvRvLOsZrvD9kHbP6r+LHfknWk1239RfYxftH3A9nsKkOl+2ydtv7hs2/tsP277x9W/f61g+Yarj/MR29+y3ZFXvmqeMzIu+9znbYftLXlkO59kitx2m6QvS/qopGskfdz2NfmmWuFdSZ+LiKslfVjSnxUs33J3Szqad4iz+EdJ/xkRvy3pd1WwnLa7JX1GUl9EXCupTdId+aaSJD0gadeqbXslfS8irpL0vertvDygM/M9LunaiPgdSf8jaWizQ63ygM7MKNvbJN0k6dhmB6pVMkUu6XpJr0TETyLilKSHJN2Wc6bTIuL1iHiu+vEvVCmgwl0p3/ZWSTdL+mreWVaz/V5Jvy/pPkmKiFMRMZdrqLVdIKlk+wJJF0mayTmPIuIHkt5ctfk2SV+rfvw1SQObmWm5tfJFxHcj4t3qzR9K2rrpwVbmWetnKEn/IGmPpMKuDEmpyLslHV92+4QKWJSSZHu7pF5Jz+QcZS1fUuVJuZhzjrX8pqRZSf9Wnfr5qu2L8w61XERMS/p7VfbOXpf084j4br6pzurXI+J1qbKjIen9Oec5lz+V9J28Q6xm+1ZJ0xHxQt5ZziWlIl/r3SsK9z+k7UskfVPSZyPirbzzLGf7FkknI+Jw3lnO4gJJH5T0LxHRK+mXync64AzVeebbJF0pqUvSxbY/kW+qtNm+R5WpyQfzzrKc7Ysk3SPpr/POcj4pFfkJSduW3d6qArykXc52uyol/mBEjOSdZw07Jd1q+6eqTE3dYPvr+UZa4YSkExGx9ErmoCrFXiQ3Sno1ImYjYl7SiKTfyznT2fyv7cslqfr3yZzznMH2nZJukfTHUbyTWn5Llf+wX6j+zmyV9Jzttd6fIVcpFfmzkq6yfaXtC1U5wPRIzplOc+X97u6TdDQivph3nrVExFBEbI2I7ar8/J6IiMLsTUbEzyQdt730duofkfRyjpHWckzSh21fVH3MP6KCHZBd5hFJd1Y/vlNSzW8Esxls75L0V5JujYj/yzvPahExGRHvj4jt1d+ZE5I+WH2eFkoyRV49KPJpSWOq/OJ8IyJeyjfVCjslfVKVvdznq38+lneoBP25pAdtH5H0AUl/l2+claqvFg5Kek7SpCq/Q7mfxm37gKSnJfXYPmH7U5L2SbrJ9o9VWXWxr2D5/lnSpZIer/6+/Gte+c6RMQmcog8AiUtmjxwAsDaKHAASR5EDQOIocgBIHEUOAImjyAEgcRQ5ACTu/wFMUCb5B1ImMAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "samp_rate = 10\n",
    "period = 1 / samp_rate\n",
    "print(f\"System frequencies fs={samp_rate}, T={period}\")\n",
    "\n",
    "delay = 7.25 * period\n",
    "ampl = 4\n",
    "print(f\"Tap with amplitude={ampl}, delay={delay}\")\n",
    "\n",
    "order = 2 * np.floor(delay / period) + 1 #N\n",
    "print(f\"Creating filter of order N={order}\")\n",
    "\n",
    "skip = np.floor(delay / period) - (order - 1) / 2 #M\n",
    "assert skip >= 0\n",
    "\n",
    "samples = np.arange(0, order + 1) * period - delay\n",
    "h = ampl*(np.sin(samp_rate * samples) / (samp_rate * samples)) #sinc\n",
    "\n",
    "plt.stem(h)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c89c83ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<StemContainer object of 3 artists>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAQ4UlEQVR4nO3df2xdd3nH8fcTJwFX/eFugZW4zRIYZJtoIcO0HQExSllKN60eQhtsAcR+hBWB2KQFGoqQpsHI8KSxiU0QMTYhJhiDzHSizFBF43cK7tw2FGbWwkjrsJGOhl91m9h+9oftNE6d+t7cc+89X9/3S6rqe+7xOU+fXn/89fd877mRmUiSyrWm2wVIklpjkEtS4QxySSqcQS5JhTPIJalwa7tx0g0bNuTmzZu7cWpJKtZtt912f2Y+4fTtXQnyzZs3Mz4+3o1TS1KxIuLby213akWSCmeQS1LhDHJJKpxBLkmFM8glqXBdWbUirUajE1OMjE1y5Ng0Gwf62b1jK8PbBrtdlnqAQS5VYHRiij37DzF9YhaAqWPT7Nl/CMAwV9s5tSJVYGRs8mSIL5o+McvI2GSXKlIvMcilChw5Nt3UdqlKBrlUgY0D/U1tl6pkkEsV2L1jK/3r+pZs61/Xx+4dW7tUkepmdGKK7XsPsOWGT7B97wFGJ6YqO7YXO6UKLF7QHPnYZzkycx4bB85x1YpOavfFcINcqsjwtkGGb//g/INXf6K7xeikOiwLfayL4Qa5pEepQ3DVRV2Whbb7Yrhz5NIqshhcU8emSR4JrirnY0tSl2Wh7b4YbpBLq0hdgqsu6rIstN0Xww1yaRWpS3DVRV2WhQ5vG+QdL7mU9X3zkTs40M87XnJpZdM7zpGreM4JP2LjQD9Ty4R2r65n371j65I5cujestDhbYN86MuHAfin1/xipcd2RK6iOSe8lOvZl2r3SLguHJGraO1e1lWaOq1nr8tfSu0cCdeFQa6iOSf8aHVYz16XZX+9wqkVFa0uF7O0lKtnOssgV9GcE64n/1LqLINcRVu8mDW49gcEuWovZpXGv5Q6yzlyFa8Oc8Jaqk7L/nqBQS6pcot/Eb3xo3dyfHaOwR5f399uBrmktuiFZX914Ry5JBWukiCPiGsiYjIi7o6IG6o4piSpMS1PrUREH/A3wIuA+4CvRMRNmfm1Vo99qreMHuJDt97LbCZ9Ebz8ikt42/ClVZ5CWhVGJ6YYuWfn/Ds79x5wbroHVDEivxy4OzO/mZnHgQ8D11Vw3JPeMnqIDx48zGwmALOZfPDgYd4yeqjK00jFO3nvmZnzSaLn7z3TKyIXwvGsDxDxUuCazPy9hcevAK7IzNed6XuGhoZyfHy84XM8Zc/NzGbymjs/zpO//8gLcu3cLE+f+d7ZF6+WPbDmcXyn71yOxxrW5xxPmv0RF8493PlCjv9o/t/rz+38uWtUx48emmFumZ/pNRGc+/jOr2148OEZAM55XHfXVdSpjgcu2MBVn/vUWX1/RNyWmUOnb6/ivyqW2faoV1JE7AJ2AWzatKmpE8ye4ZfNzJq+Zbe32+xDPwSg7/HndeX8danjgTWP49615zG38BI4Hmu4d+15MEPHw/zBfDwA53T0rPWrY7kQf6zt7XZOPLTwVXd/wdapjgvifys/bhVBfh9wySmPLwaOnL5TZu4D9sH8iLyZE/RFMJvJey+77lHb73nHtU0X3IrRiSne/pHPcH+e3/VPSr/rz54LwNY3f74r59++98Cy974eHOjnCzdc1dFafvO9XwK6v8yt23XU6f8JAH//K/P/7vYbtepWR8WqmCP/CvDUiNgSEeuBlwE3VXDck15+xSVNbW+XxfnHo3mB8494P4068t4zvanlIM/MGeB1wBjwdeAjmXlXq8c91duGL2XnlZvoi/k/4fsi2Hnlpo6vWvGObkt5P436OXnvmYF+gtX7QQpaqpKZ/8y8Gbi5imOdyduGL+36csM6jUBHJ6Z4+w9fOz/F06UlZt5Po56Gtw0a3D3Gd3Y2oS4j0LpM8fTKx2hJdWeQN2H3jq2s61u6SGddX3R8BFqnKZ7hbYNs2zTAFVt+gi/ccFVPh/joxBQTh49x67e+x/a9B3r22ok6zyBv1unrbbqwqqtOUzyat/hX0vHZOcAPgVZnGeRNGBmb5MTc0uQ+MZcdHwnXZYpHj6jTX0nqPQZ5E+oyEnaJWf3U5bWh3mSQN6EuI2EvMtZPXV4b6k0GeRPqNBL2ImO91Om1od7jJwQ1YTEsR8YmOXJsmo1+fJUW+NpQNxnkTarLmy0Wl7odn51je4/fc7ouvajLa0O9x6mVArnU7RH2QjLIi1SnpW7dfhNMnXohdYtBXqC6LHWrw2i4Lr2QuskgL1BdlrrVYTRcl15I3WSQF6guS93qMBquSy+kbnLVSoHqstRt40D/sp9G08nRcF16IXWTQV6oOix1q8v9yOvQC6mbnFrRWfPTaPRYRiem2H7PTrZMXu9tfdvMEbla4mhYy1lc0TQ9cz7wyIomwNdLGzgil1S5Oqxo6iUGuaTK1WFFUy8xyCVVzvX9nWWQS6qc6/s7y4udkirn+v7OMsgltYUrmjrHqRVJKpxBLkmFM8glqXAGuSQVziCXpMK1FOQRMRIR/xkRd0bEv0TEQEV1SZIa1OqI/NPA0zPzMuAbwJ7WS5IkNaOlIM/MT2XmzMLDg8DFrZckSWpGlXPkvwN88kxPRsSuiBiPiPGjR49WeFpJ6m0rvrMzIm4BLlrmqRsz8+ML+9wIzAD/eKbjZOY+YB/A0NBQnlW1kqRHWTHIM/Pqx3o+Il4F/Crwwsw0oCWpw1q610pEXAO8CXh+Zj5YTUmSpGa0Okf+buA84NMRcXtEvKeCmiRJTWhpRJ6ZP1NVIZKks+M7OyWpcAa5JBXOIJekwhnkklQ4g1ySCmeQS1LhDHJJKpxBLkmFM8glqXAGuSQVziCXpMIZ5JJUOINckgpnkEtS4QxySSqcQS5JhTPIJalwBrkkFc4gl6TCGeSSVDiDXJIKZ5BLUuEMckkqnEEuSYUzyCWpcAa5JBXOIJekwhnkklS4SoI8Iv44IjIiNlRxPElS41oO8oi4BHgRcLj1ciRJzapiRP6XwBuBrOBYkqQmtRTkEfFrwFRm3tHAvrsiYjwixo8ePdrKaSVJp1i70g4RcQtw0TJP3Qi8GfjlRk6UmfuAfQBDQ0OO3iWpIisGeWZevdz2iLgU2ALcEREAFwP/ERGXZ+b/VFqlJOmMVgzyM8nMQ8ATFx9HxH8DQ5l5fwV1SZIa5DpySSrcWY/IT5eZm6s6liSpcY7IJalwBrkkFc4gl6TCGeSSVDiDXJIKZ5BLUuEMckkqnEEuSYUzyCWpcAa5JBXOIJekwhnkklQ4g1zSqjY6McX2e3ayZfJ6tu89wOjEVLdLqlxldz+UpLoZnZhiz/5DTM+cD8DUsWn27D8EwPC2wW6WVilH5JJWrZGxSaZPzC7ZNn1ilpGxyS5V1B4GuaRV68ix6aa2l8ogl7RqbRzob2p7qQxySavW7h1b6V/Xt2Rb/7o+du/Y2qWK2sOLnZJWrcULmiNjkxw5Ns3GgX5279i6qi50gkEuaZUb3ja46oL7dE6tSFLhDHJJKpxBLkmFM8glqXAGuSQVziCXpMIZ5JJUOINckgpnkEtS4VoO8oh4fURMRsRdEfHOKoqSJDWupbfoR8QLgOuAyzLz4Yh4YjVlSZIa1eqI/Hpgb2Y+DJCZ3229JElSM1oN8qcBz4uIWyPiMxHx7DPtGBG7ImI8IsaPHj3a4mklSYtWnFqJiFuAi5Z56saF778QuBJ4NvCRiHhyZubpO2fmPmAfwNDQ0KOelySdnRWDPDOvPtNzEXE9sH8huL8cEXPABsAhtyR1SKtTK6PAVQAR8TRgPXB/i8eUJDWh1Q+WeD/w/oj4KnAceNVy0yqSpPZpKcgz8ziws6JaJElnwXd2SlLhDHJJKpxBLkmFM8glqXAGuSQVziCXpMIZ5JJUOINckgpnkEtS4QxySSqcQS5JhTPIJalwBrkkFc4gl6TCGeSSVDiDXJIKZ5BLUuEMckkqnEEuSYUzyCWpcAa5JBXOIJekwhnkklQ4g1ySCmeQS1LhDHJJKpxBLkmFM8glqXAtBXlEPDMiDkbE7RExHhGXV1WYJKkxrY7I3wn8SWY+E3jrwmNJUge1GuQJnL/w9QXAkRaPJ0lq0toWv/8PgbGI+Avmfyk850w7RsQuYBfApk2bWjytJGnRikEeEbcAFy3z1I3AC4E/ysyPRcRvAH8HXL3ccTJzH7APYGhoKM+6YknSEisGeWYuG8wAEfEB4A0LD/8ZeF9FdUmSGtTqHPkR4PkLX18F/FeLx5MkNanVOfLfB/4qItYCD7EwBy5J6pyWgjwzPw88q6JaJElnwXd2SlLhDHJJKpxBLkmFM8glqXAGuSQVziCXpMIZ5JJUOINckgpnkEtS4QxySSqcQS5JhTPIJalwBrkkFc4gl6TCGeSSVDiDXJIKZ5BLUgeMTkyx/Z6dbJm8nu17DzA6MVXZsVv9qDdJ0gpGJ6bYs/8Q0zPnAzB1bJo9+w8BMLxtsOXjOyKXpDYbGZtk+sTskm3TJ2YZGZus5PgGuSS12ZFj001tb5ZBLklttnGgv6ntzTLIJanNdu/YSv+6viXb+tf1sXvH1kqO78VOSWqzxQuaI2OTHDk2zcaBfnbv2FrJhU4wyCWpI4a3DVYW3KdzakWSCmeQS1LhDHJJKpxBLkmFM8glqXCRmZ0/acRR4Ntn+e0bgPsrLGe1sk+NsU+NsU8r60SPfjozn3D6xq4EeSsiYjwzh7pdR93Zp8bYp8bYp5V1s0dOrUhS4QxySSpciUG+r9sFFMI+NcY+NcY+raxrPSpujlyStFSJI3JJ0ikMckkqXG2DPCKuiYjJiLg7Im5Y5vmIiL9eeP7OiPiFbtTZbQ306bcX+nNnRHwxIp7RjTq7aaUenbLfsyNiNiJe2sn66qKRPkXEL0XE7RFxV0R8ptM11kEDP3MXRMS/RsQdC316dduLysza/QP0AfcATwbWA3cAP3/aPtcCnwQCuBK4tdt117RPzwEuXPj6xb3Wp0Z6dMp+B4CbgZd2u+469gkYAL4GbFp4/MRu113TPr0Z+POFr58AfA9Y38666joivxy4OzO/mZnHgQ8D1522z3XAB3LeQWAgIp7U6UK7bMU+ZeYXM/OBhYcHgYs7XGO3NfJaAng98DHgu50srkYa6dNvAfsz8zBAZvZirxrpUwLnRUQA5zIf5DPtLKquQT4I3HvK4/sWtjW7z2rXbA9+l/m/YnrJij2KiEHg14H3dLCuumnktfQ04MKI+PeIuC0iXtmx6uqjkT69G/g54AhwCHhDZs61s6i6fkJQLLPt9HWSjeyz2jXcg4h4AfNB/ty2VlQ/jfToXcCbMnN2fhDVkxrp01rgWcALgX7gSxFxMDO/0e7iaqSRPu0AbgeuAp4CfDoiPpeZP2hXUXUN8vuAS055fDHzv92a3We1a6gHEXEZ8D7gxZn5fx2qrS4a6dEQ8OGFEN8AXBsRM5k52pEK66HRn7n7M/PHwI8j4rPAM4BeCvJG+vRqYG/OT5LfHRHfAn4W+HK7iqrr1MpXgKdGxJaIWA+8DLjptH1uAl65sHrlSuD7mfmdThfaZSv2KSI2AfuBV/TYyGnRij3KzC2ZuTkzNwMfBV7bYyEOjf3MfRx4XkSsjYhzgCuAr3e4zm5rpE+Hmf+rhYj4KWAr8M12FlXLEXlmzkTE64Ax5q8Svz8z74qIP1h4/j3Mry64FrgbeJD534I9pcE+vRX4SeBvF0acM9lDd7FrsEc9r5E+ZebXI+LfgDuBOeB9mfnV7lXdeQ2+nv4U+IeIOMT8VMybMrOtt7f1LfqSVLi6Tq1IkhpkkEtS4QxySSqcQS5JhTPIJalwBrkkFc4gl6TC/T9F1iJTKumwPwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = np.linspace(0, delay + period, samp_rate)\n",
    "f = np.sin(2 * np.pi * samp_rate * t)\n",
    "\n",
    "f_shift = np.convolve(h, f)[:len(f)]\n",
    "\n",
    "plt.stem(t, f, linefmt=\"C0-\")\n",
    "plt.stem(t, f_shift, linefmt='C1-')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15f663c6",
   "metadata": {},
   "source": [
    "#  Test Delay  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "afb9e748",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "System frequencies fs=10, T=0.1\n",
      "Tap with amplitude=4, delay_freq=0.7250000000000001, delay_int=7\n",
      "Creating filter of order N=15.0\n",
      "samples_freq[-0.725 -0.625 -0.525 -0.425 -0.325 -0.225 -0.125 -0.025  0.075  0.175\n",
      "  0.275  0.375  0.475  0.575  0.675  0.775]\n",
      "samples_int[0 1 2 3 4 5 6]\n",
      "h_freq[ 0.45411359 -0.0212347  -0.65442628 -0.84234293 -0.13316324  1.38324124\n",
      "  3.03675078  3.95846335  3.63540672  2.24911074  0.55514326 -0.60966541\n",
      " -0.84150972 -0.35358545  0.26669278  0.51334131]\n",
      "h_ideal[ 3.10262780e-02  2.99830750e-02  2.88692595e-02  2.76870500e-02\n",
      "  2.64388245e-02  2.51271158e-02  2.37546068e-02  2.23241246e-02\n",
      "  2.08386353e-02  1.93012375e-02  1.77151562e-02  1.60837364e-02\n",
      "  1.44104353e-02  1.26988161e-02  1.09525398e-02  9.17535764e-03\n",
      "  7.37110346e-03  5.54368515e-03  3.69707648e-03  1.83530854e-03\n",
      " -3.75389411e-05 -1.91734645e-03 -3.79996360e-03 -5.68121819e-03\n",
      " -7.55692534e-03 -9.42289669e-03 -1.12749496e-02 -1.31089164e-02\n",
      " -1.49206538e-02 -1.67060518e-02 -1.84610433e-02 -2.01816127e-02\n",
      " -2.18638056e-02 -2.35037373e-02 -2.50976019e-02 -2.66416805e-02\n",
      " -2.81323506e-02 -2.95660937e-02 -3.09395037e-02 -3.22492951e-02\n",
      " -3.34923102e-02 -3.46655271e-02 -3.57660666e-02 -3.67911991e-02\n",
      " -3.77383512e-02 -3.86051122e-02 -3.93892397e-02 -4.00886655e-02\n",
      " -4.07015008e-02 -4.12260407e-02 -4.16607694e-02 -4.20043635e-02\n",
      " -4.22556964e-02 -4.24138408e-02 -4.24780722e-02 -4.24478711e-02\n",
      " -4.23229246e-02 -4.21031285e-02 -4.17885880e-02 -4.13796183e-02\n",
      " -4.08767448e-02 -4.02807029e-02 -3.95924372e-02 -3.88131000e-02\n",
      " -3.79440498e-02 -3.69868493e-02 -3.59432624e-02 -3.48152516e-02\n",
      " -3.36049739e-02 -3.23147774e-02 -3.09471966e-02 -2.95049475e-02\n",
      " -2.79909227e-02 -2.64081855e-02 -2.47599639e-02 -2.30496441e-02\n",
      " -2.12807638e-02 -1.94570050e-02 -1.75821866e-02 -1.56602563e-02\n",
      " -1.36952827e-02 -1.16914466e-02 -9.65303250e-03 -7.58441946e-03\n",
      " -5.49007187e-03 -3.37453002e-03 -1.24240037e-03  9.01654268e-04\n",
      "  3.05292479e-03  5.20666595e-03  7.35810667e-03  9.50246043e-03\n",
      "  1.16349357e-02  1.37507466e-02  1.58451231e-02  1.79133223e-02\n",
      "  1.99506380e-02  2.19524121e-02  2.39140447e-02  2.58310043e-02\n",
      "  2.76988383e-02  2.95131833e-02  3.12697744e-02  3.29644561e-02\n",
      "  3.45931908e-02  3.61520691e-02  3.76373182e-02  3.90453114e-02\n",
      "  4.03725766e-02  4.16158043e-02  4.27718560e-02  4.38377715e-02\n",
      "  4.48107764e-02  4.56882893e-02  4.64679278e-02  4.71475148e-02\n",
      "  4.77250846e-02  4.81988877e-02  4.85673958e-02  4.88293061e-02\n",
      "  4.89835454e-02  4.90292733e-02  4.89658850e-02  4.87930140e-02\n",
      "  4.85105339e-02  4.81185596e-02  4.76174484e-02  4.70078001e-02\n",
      "  4.62904572e-02  4.54665036e-02  4.45372638e-02  4.35043009e-02\n",
      "  4.23694144e-02  4.11346372e-02  3.98022324e-02  3.83746893e-02\n",
      "  3.68547189e-02  3.52452494e-02  3.35494203e-02  3.17705767e-02\n",
      "  2.99122632e-02  2.79782166e-02  2.59723589e-02  2.38987898e-02\n",
      "  2.17617778e-02  1.95657526e-02  1.73152954e-02  1.50151300e-02\n",
      "  1.26701130e-02  1.02852236e-02  7.86555385e-03  5.41629729e-03\n",
      "  2.94273859e-03  4.50242226e-04 -2.05575891e-03 -4.56977505e-03\n",
      " -7.08627130e-03 -9.59967955e-03 -1.21044105e-02 -1.45948660e-02\n",
      " -1.70654508e-02 -1.95105853e-02 -2.19247178e-02 -2.43023365e-02\n",
      " -2.66379819e-02 -2.89262594e-02 -3.11618507e-02 -3.33395267e-02\n",
      " -3.54541587e-02 -3.75007304e-02 -3.94743496e-02 -4.13702594e-02\n",
      " -4.31838493e-02 -4.49106660e-02 -4.65464241e-02 -4.80870163e-02\n",
      " -4.95285232e-02 -5.08672230e-02 -5.20996007e-02 -5.32223566e-02\n",
      " -5.42324150e-02 -5.51269319e-02 -5.59033024e-02 -5.65591677e-02\n",
      " -5.70924219e-02 -5.75012172e-02 -5.77839701e-02 -5.79393658e-02\n",
      " -5.79663626e-02 -5.78641958e-02 -5.76323807e-02 -5.72707150e-02\n",
      " -5.67792814e-02 -5.61584481e-02 -5.54088703e-02 -5.45314899e-02\n",
      " -5.35275352e-02 -5.23985195e-02 -5.11462399e-02 -4.97727743e-02\n",
      " -4.82804791e-02 -4.66719848e-02 -4.49501926e-02 -4.31182690e-02\n",
      " -4.11796405e-02 -3.91379878e-02 -3.69972390e-02 -3.47615623e-02\n",
      " -3.24353588e-02 -3.00232534e-02 -2.75300867e-02 -2.49609055e-02\n",
      " -2.23209526e-02 -1.96156571e-02 -1.68506230e-02 -1.40316187e-02\n",
      " -1.11645646e-02 -8.25552183e-03 -5.31067933e-03 -2.33634137e-03\n",
      "  6.61085556e-04  3.67510610e-03  6.69914965e-03  9.72658419e-03\n",
      "  1.27507304e-02  1.57648758e-02  1.87622895e-02  2.17362360e-02\n",
      "  2.46799907e-02  2.75868541e-02  3.04501664e-02  3.32633224e-02\n",
      "  3.60197865e-02  3.87131066e-02  4.13369293e-02  4.38850140e-02\n",
      "  4.63512470e-02  4.87296560e-02  5.10144235e-02  5.31999005e-02\n",
      "  5.52806201e-02  5.72513099e-02  5.91069054e-02  6.08425615e-02\n",
      "  6.24536651e-02  6.39358460e-02  6.52849882e-02  6.64972404e-02\n",
      "  6.75690260e-02  6.84970525e-02  6.92783207e-02  6.99101326e-02\n",
      "  7.03900998e-02  7.07161501e-02  7.08865344e-02  7.08998325e-02\n",
      "  7.07549582e-02  7.04511638e-02  6.99880440e-02  6.93655393e-02\n",
      "  6.85839378e-02  6.76438776e-02  6.65463469e-02  6.52926850e-02\n",
      "  6.38845812e-02  6.23240737e-02  6.06135477e-02  5.87557322e-02\n",
      "  5.67536966e-02  5.46108466e-02  5.23309188e-02  4.99179751e-02\n",
      "  4.73763961e-02  4.47108739e-02  4.19264040e-02  3.90282768e-02\n",
      "  3.60220681e-02  3.29136291e-02  2.97090759e-02  2.64147779e-02\n",
      "  2.30373461e-02  1.95836204e-02  1.60606568e-02  1.24757134e-02\n",
      "  8.83623633e-03  5.14984533e-03  1.42431836e-03 -2.33242388e-03\n",
      " -6.11233392e-03 -9.90725388e-03 -1.37089322e-02 -1.75090406e-02\n",
      " -2.12991916e-02 -2.50709556e-02 -2.88158792e-02 -3.25255026e-02\n",
      " -3.61913783e-02 -3.98050887e-02 -4.33582646e-02 -4.68426034e-02\n",
      " -5.02498876e-02 -5.35720026e-02 -5.68009551e-02 -5.99288913e-02\n",
      " -6.29481141e-02 -6.58511015e-02 -6.86305235e-02 -7.12792593e-02\n",
      " -7.37904144e-02 -7.61573366e-02 -7.83736325e-02 -8.04331828e-02\n",
      " -8.23301579e-02 -8.40590322e-02 -8.56145984e-02 -8.69919811e-02\n",
      " -8.81866500e-02 -8.91944321e-02 -9.00115233e-02 -9.06345000e-02\n",
      " -9.10603287e-02 -9.12863762e-02 -9.13104182e-02 -9.11306474e-02\n",
      " -9.07456810e-02 -9.01545664e-02 -8.93567878e-02 -8.83522701e-02\n",
      " -8.71413833e-02 -8.57249448e-02 -8.41042223e-02 -8.22809343e-02\n",
      " -8.02572502e-02 -7.80357901e-02 -7.56196229e-02 -7.30122635e-02\n",
      " -7.02176692e-02 -6.72402358e-02 -6.40847914e-02 -6.07565904e-02\n",
      " -5.72613061e-02 -5.36050227e-02 -4.97942257e-02 -4.58357923e-02\n",
      " -4.17369800e-02 -3.75054154e-02 -3.31490810e-02 -2.86763017e-02\n",
      " -2.40957312e-02 -1.94163358e-02 -1.46473796e-02 -9.79840698e-03\n",
      " -4.87922599e-03  1.00110106e-04  5.12932134e-03  1.01979203e-02\n",
      "  1.52952321e-02  2.04104147e-02  2.55324798e-02  3.06503146e-02\n",
      "  3.57527030e-02  4.08283487e-02  4.58658970e-02  5.08539582e-02\n",
      "  5.57811308e-02  6.06360245e-02  6.54072845e-02  7.00836144e-02\n",
      "  7.46538010e-02  7.91067371e-02  8.34314465e-02  8.76171070e-02\n",
      "  9.16530745e-02  9.55289065e-02  9.92343857e-02  1.02759543e-01\n",
      "  1.06094680e-01  1.09230392e-01  1.12157592e-01  1.14867527e-01\n",
      "  1.17351807e-01  1.19602419e-01  1.21611751e-01  1.23372609e-01\n",
      "  1.24878241e-01  1.26122348e-01  1.27099109e-01  1.27803190e-01\n",
      "  1.28229769e-01  1.28374542e-01  1.28233745e-01  1.27804164e-01\n",
      "  1.27083144e-01  1.26068609e-01  1.24759063e-01  1.23153608e-01\n",
      "  1.21251946e-01  1.19054389e-01  1.16561864e-01  1.13775922e-01\n",
      "  1.10698736e-01  1.07333109e-01  1.03682471e-01  9.97508850e-02\n",
      "  9.55430408e-02  9.10642566e-02  8.63204746e-02  8.13182571e-02\n",
      "  7.60647807e-02  7.05678297e-02  6.48357883e-02  5.88776313e-02\n",
      "  5.27029141e-02  4.63217610e-02  3.97448529e-02  3.29834130e-02\n",
      "  2.60491927e-02  1.89544549e-02  1.17119577e-02  4.33493531e-03\n",
      " -3.16292005e-03 -1.07674790e-02 -1.84641959e-02 -2.62381307e-02\n",
      " -3.40739725e-02 -4.19560626e-02 -4.98684197e-02 -5.77947654e-02\n",
      " -6.57185500e-02 -7.36229797e-02 -8.14910442e-02 -8.93055449e-02\n",
      " -9.70491235e-02 -1.04704291e-01 -1.12253460e-01 -1.19678969e-01\n",
      " -1.26963119e-01 -1.34088203e-01 -1.41036535e-01 -1.47790482e-01\n",
      " -1.54332496e-01 -1.60645148e-01 -1.66711154e-01 -1.72513412e-01\n",
      " -1.78035031e-01 -1.83259362e-01 -1.88170031e-01 -1.92750967e-01\n",
      " -1.96986439e-01 -2.00861076e-01 -2.04359907e-01 -2.07468386e-01\n",
      " -2.10172419e-01 -2.12458396e-01 -2.14313217e-01 -2.15724319e-01\n",
      " -2.16679702e-01 -2.17167955e-01 -2.17178280e-01 -2.16700518e-01\n",
      " -2.15725169e-01 -2.14243413e-01 -2.12247135e-01 -2.09728942e-01\n",
      " -2.06682181e-01 -2.03100959e-01 -1.98980157e-01 -1.94315445e-01\n",
      " -1.89103299e-01 -1.83341009e-01 -1.77026695e-01 -1.70159312e-01\n",
      " -1.62738663e-01 -1.54765405e-01 -1.46241051e-01 -1.37167982e-01\n",
      " -1.27549441e-01 -1.17389543e-01 -1.06693268e-01 -9.54664662e-02\n",
      " -8.37158486e-02 -7.14489876e-02 -5.86743091e-02 -4.54010860e-02\n",
      " -3.16394290e-02 -1.74002770e-02 -2.69538540e-03  1.24626868e-02\n",
      "  2.80605915e-02  4.40842070e-02  6.05186552e-02  7.73483197e-02\n",
      "  9.45568662e-02  1.12127263e-01  1.30041802e-01  1.48282126e-01\n",
      "  1.66829248e-01  1.85663582e-01  2.04764966e-01  2.24112693e-01\n",
      "  2.43685536e-01  2.63461784e-01  2.83419266e-01  3.03535387e-01\n",
      "  3.23787160e-01  3.44151238e-01  3.64603949e-01  3.85121331e-01\n",
      "  4.05679165e-01  4.26253014e-01  4.46818258e-01  4.67350128e-01\n",
      "  4.87823748e-01  5.08214170e-01  5.28496409e-01  5.48645486e-01\n",
      "  5.68636461e-01  5.88444475e-01  6.08044786e-01  6.27412805e-01\n",
      "  6.46524137e-01  6.65354618e-01  6.83880349e-01  7.02077739e-01\n",
      "  7.19923533e-01  7.37394857e-01  7.54469248e-01  7.71124690e-01\n",
      "  7.87339648e-01  8.03093104e-01  8.18364586e-01  8.33134205e-01\n",
      "  8.47382681e-01  8.61091376e-01  8.74242323e-01  8.86818254e-01\n",
      "  8.98802629e-01  9.10179658e-01  9.20934330e-01  9.31052433e-01\n",
      "  9.40520581e-01  9.49326231e-01  9.57457704e-01  9.64904206e-01\n",
      "  9.71655841e-01  9.77703629e-01  9.83039523e-01  9.87656414e-01\n",
      "  9.91548150e-01  9.94709543e-01  9.97136375e-01  9.98825408e-01\n",
      "  9.99774389e-01  9.99982051e-01  9.99448116e-01  9.98173297e-01\n",
      "  9.96159296e-01  9.93408801e-01  9.89925480e-01  9.85713979e-01\n",
      "  9.80779912e-01  9.75129853e-01  9.68771325e-01  9.61712788e-01\n",
      "  9.53963626e-01  9.45534133e-01  9.36435494e-01  9.26679770e-01\n",
      "  9.16279878e-01  9.05249571e-01  8.93603413e-01  8.81356763e-01\n",
      "  8.68525743e-01  8.55127218e-01  8.41178765e-01  8.26698652e-01\n",
      "  8.11705801e-01  7.96219765e-01  7.80260693e-01  7.63849301e-01\n",
      "  7.47006840e-01  7.29755058e-01  7.12116175e-01  6.94112837e-01\n",
      "  6.75768091e-01  6.57105345e-01  6.38148328e-01  6.18921063e-01\n",
      "  5.99447818e-01  5.79753078e-01  5.59861505e-01  5.39797897e-01\n",
      "  5.19587153e-01  4.99254235e-01  4.78824129e-01  4.58321808e-01\n",
      "  4.37772194e-01  4.17200121e-01  3.96630295e-01  3.76087261e-01\n",
      "  3.55595365e-01  3.35178717e-01  3.14861155e-01  2.94666213e-01\n",
      "  2.74617084e-01  2.54736586e-01  2.35047131e-01  2.15570692e-01\n",
      "  1.96328771e-01  1.77342369e-01  1.58631958e-01  1.40217449e-01\n",
      "  1.22118168e-01  1.04352827e-01  8.69395028e-02  6.98956068e-02\n",
      "  5.32378671e-02  3.69823046e-02  2.11442132e-02  5.73814030e-03\n",
      " -9.22213061e-03 -2.37235968e-02 -3.77540513e-02 -5.13020963e-02\n",
      " -6.43571561e-02 -7.69094874e-02 -8.89501891e-02 -1.00471210e-01\n",
      " -1.11465356e-01 -1.21926294e-01 -1.31848557e-01 -1.41227546e-01\n",
      " -1.50059529e-01 -1.58341643e-01 -1.66071889e-01 -1.73249131e-01\n",
      " -1.79873089e-01 -1.85944334e-01 -1.91464280e-01 -1.96435173e-01\n",
      " -2.00860082e-01 -2.04742889e-01 -2.08088271e-01 -2.10901690e-01\n",
      " -2.13189377e-01 -2.14958311e-01 -2.16216206e-01 -2.16971490e-01\n",
      " -2.17233284e-01 -2.17011380e-01 -2.16316223e-01 -2.15158883e-01\n",
      " -2.13551032e-01 -2.11504922e-01 -2.09033356e-01 -2.06149661e-01\n",
      " -2.02867663e-01 -1.99201659e-01 -1.95166386e-01 -1.90776994e-01\n",
      " -1.86049017e-01 -1.80998338e-01 -1.75641166e-01 -1.69994000e-01\n",
      " -1.64073598e-01 -1.57896950e-01 -1.51481240e-01 -1.44843820e-01\n",
      " -1.38002176e-01 -1.30973897e-01 -1.23776643e-01 -1.16428113e-01\n",
      " -1.08946015e-01 -1.01348035e-01 -9.36518043e-02 -8.58748724e-02\n",
      " -7.80346738e-02 -7.01485002e-02 -6.22334708e-02 -5.43065042e-02\n",
      " -4.63842900e-02 -3.84832618e-02 -3.06195706e-02 -2.28090587e-02\n",
      " -1.50672349e-02 -7.40924970e-03  1.50127586e-04  7.59653178e-03\n",
      "  1.49160234e-02  2.20951092e-02  2.91207622e-02  3.59804400e-02\n",
      "  4.26621028e-02  4.91542297e-02  5.54458342e-02  6.15264789e-02\n",
      "  6.73862882e-02  7.30159608e-02  7.84067807e-02  8.35506264e-02\n",
      "  8.84399802e-02  9.30679351e-02  9.74282010e-02  1.01515110e-01\n",
      "  1.05323619e-01  1.08849316e-01  1.12088414e-01  1.15037761e-01\n",
      "  1.17694830e-01  1.20057723e-01  1.22125164e-01  1.23896498e-01\n",
      "  1.25371680e-01  1.26551275e-01  1.27436444e-01  1.28028941e-01\n",
      "  1.28331097e-01  1.28345814e-01  1.28076550e-01  1.27527309e-01\n",
      "  1.26702624e-01  1.25607545e-01  1.24247621e-01  1.22628887e-01\n",
      "  1.20757841e-01  1.18641435e-01  1.16287047e-01  1.13702469e-01\n",
      "  1.10895881e-01  1.07875838e-01  1.04651239e-01  1.01231317e-01\n",
      "  9.76256070e-02  9.38439292e-02  8.98963649e-02  8.57932335e-02\n",
      "  8.15450691e-02  7.71625969e-02  7.26567100e-02  6.80384452e-02\n",
      "  6.33189591e-02  5.85095046e-02  5.36214066e-02  4.86660385e-02\n",
      "  4.36547985e-02  3.85990857e-02  3.35102772e-02  2.83997049e-02\n",
      "  2.32786325e-02  1.81582335e-02  1.30495685e-02  7.96356398e-03\n",
      "  2.91099109e-03 -2.09755531e-03 -7.05167669e-03 -1.19411905e-02\n",
      " -1.67561490e-02 -2.14868582e-02 -2.61238947e-02 -3.06581236e-02\n",
      " -3.50807142e-02 -3.93831556e-02 -4.35572719e-02 -4.75952355e-02\n",
      " -5.14895808e-02 -5.52332162e-02 -5.88194355e-02 -6.22419285e-02\n",
      " -6.54947910e-02 -6.85725329e-02 -7.14700865e-02 -7.41828131e-02\n",
      " -7.67065095e-02 -7.90374123e-02 -8.11722025e-02 -8.31080085e-02\n",
      " -8.48424084e-02 -8.63734309e-02 -8.76995561e-02 -8.88197148e-02\n",
      " -8.97332864e-02 -9.04400974e-02 -9.09404173e-02 -9.12349548e-02\n",
      " -9.13248523e-02 -9.12116803e-02 -9.08974307e-02 -9.03845086e-02\n",
      " -8.96757245e-02 -8.87742848e-02 -8.76837817e-02 -8.64081832e-02\n",
      " -8.49518209e-02 -8.33193786e-02 -8.15158793e-02 -7.95466720e-02\n",
      " -7.74174180e-02 -7.51340760e-02 -7.27028880e-02 -7.01303632e-02\n",
      " -6.74232623e-02 -6.45885815e-02 -6.16335357e-02 -5.85655415e-02\n",
      " -5.53922002e-02 -5.21212799e-02 -4.87606982e-02 -4.53185037e-02\n",
      " -4.18028587e-02 -3.82220204e-02 -3.45843229e-02 -3.08981590e-02\n",
      " -2.71719616e-02 -2.34141859e-02 -1.96332912e-02 -1.58377225e-02\n",
      " -1.20358931e-02 -8.23616654e-03 -4.44683950e-03 -6.76124398e-04\n",
      "  3.06786745e-03  6.77714235e-03  1.04438404e-02  1.40602515e-02\n",
      "  1.76188304e-02  2.11122119e-02  2.45332251e-02  2.78749075e-02\n",
      "  3.11305182e-02  3.42935512e-02  3.73577469e-02  4.03171046e-02\n",
      "  4.31658929e-02  4.58986604e-02  4.85102453e-02  5.09957845e-02\n",
      "  5.33507222e-02  5.55708171e-02  5.76521497e-02  5.95911283e-02\n",
      "  6.13844945e-02  6.30293283e-02  6.45230515e-02  6.58634314e-02\n",
      "  6.70485830e-02  6.80769710e-02  6.89474104e-02  6.96590672e-02\n",
      "  7.02114574e-02  7.06044462e-02  7.08382455e-02  7.09134118e-02\n",
      "  7.08308420e-02  7.05917701e-02  7.01977616e-02  6.96507086e-02\n",
      "  6.89528232e-02  6.81066310e-02  6.71149634e-02  6.59809499e-02\n",
      "  6.47080089e-02  6.32998393e-02  6.17604101e-02  6.00939503e-02\n",
      "  5.83049386e-02  5.63980914e-02  5.43783520e-02  5.22508778e-02\n",
      "  5.00210284e-02  4.76943524e-02  4.52765747e-02  4.27735824e-02\n",
      "  4.01914120e-02  3.75362345e-02  3.48143422e-02  3.20321335e-02\n",
      "  2.91960990e-02  2.63128070e-02  2.33888883e-02  2.04310219e-02\n",
      "  1.74459204e-02  1.44403149e-02  1.14209406e-02  8.39452220e-03\n",
      "  5.36775927e-03  2.34731209e-03 -6.60212626e-04 -3.64827569e-03\n",
      " -6.61041919e-03 -9.54027998e-03 -1.24316029e-02 -1.52782538e-02\n",
      " -1.80742319e-02 -2.08136822e-02 -2.34909073e-02 -2.61003788e-02\n",
      " -2.86367481e-02 -3.10948576e-02 -3.34697500e-02 -3.57566785e-02\n",
      " -3.79511155e-02 -4.00487615e-02 -4.20455530e-02 -4.39376700e-02\n",
      " -4.57215427e-02 -4.73938583e-02 -4.89515666e-02 -5.03918847e-02\n",
      " -5.17123024e-02 -5.29105853e-02 -5.39847788e-02 -5.49332105e-02\n",
      " -5.57544922e-02 -5.64475214e-02 -5.70114826e-02 -5.74458468e-02\n",
      " -5.77503715e-02 -5.79250997e-02 -5.79703582e-02 -5.78867552e-02\n",
      " -5.76751777e-02 -5.73367882e-02 -5.68730201e-02 -5.62855740e-02\n",
      " -5.55764119e-02 -5.47477517e-02 -5.38020613e-02 -5.27420517e-02\n",
      " -5.15706699e-02 -5.02910910e-02 -4.89067105e-02 -4.74211357e-02\n",
      " -4.58381763e-02 -4.41618356e-02 -4.23963006e-02 -4.05459318e-02\n",
      " -3.86152529e-02 -3.66089403e-02 -3.45318117e-02 -3.23888155e-02\n",
      " -3.01850186e-02 -2.79255956e-02 -2.56158163e-02 -2.32610339e-02\n",
      " -2.08666732e-02 -1.84382181e-02 -1.59811995e-02 -1.35011830e-02\n",
      " -1.10037565e-02 -8.49451808e-03 -5.97906349e-03 -3.46297419e-03\n",
      " -9.51805147e-04  1.54892714e-03  4.03375648e-03  6.49727867e-03\n",
      "  8.93416300e-03  1.13391635e-02  1.37071299e-02  1.60330187e-02\n",
      "  1.83119032e-02  2.05389840e-02  2.27095991e-02  2.48192326e-02\n",
      "  2.68635248e-02  2.88382803e-02  3.07394768e-02  3.25632727e-02\n",
      "  3.43060149e-02  3.59642460e-02  3.75347103e-02  3.90143607e-02\n",
      "  4.04003640e-02  4.16901060e-02  4.28811966e-02  4.39714734e-02\n",
      "  4.49590059e-02  4.58420983e-02  4.66192922e-02  4.72893687e-02\n",
      "  4.78513501e-02  4.83045006e-02  4.86483272e-02  4.88825791e-02\n",
      "  4.90072479e-02  4.90225658e-02  4.89290044e-02  4.87272725e-02\n",
      "  4.84183133e-02  4.80033015e-02  4.74836396e-02  4.68609537e-02\n",
      "  4.61370892e-02  4.53141056e-02  4.43942707e-02  4.33800555e-02\n",
      "  4.22741272e-02  4.10793427e-02  3.97987415e-02  3.84355384e-02]\n"
     ]
    },
    {
     "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": {
      "text/plain": [
       "<StemContainer object of 3 artists>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "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": [
    "samp_rate = 10\n",
    "period = 1 / samp_rate\n",
    "print(f\"System frequencies fs={samp_rate}, T={period}\")\n",
    "\n",
    "delay_freq = 7.25 * period\n",
    "delay_int = int(np.floor(delay_freq/period))\n",
    "ampl = 4\n",
    "print(f\"Tap with amplitude={ampl}, delay_freq={delay_freq}, delay_int={delay_int}\")\n",
    "\n",
    "order = 2 * np.floor(delay / period) + 1 #N\n",
    "print(f\"Creating filter of order N={order}\")\n",
    "\n",
    "skip = np.floor(delay / period) - (order - 1) / 2 #M\n",
    "assert skip >= 0\n",
    "\n",
    "samples_freq = np.arange(0, order + 1) * period - delay_freq\n",
    "print(f\"samples_freq{samples_freq}\")\n",
    "\n",
    "samples_int = np.arange(0,delay_int,1)\n",
    "print(f\"samples_int{samples_int}\")\n",
    "\n",
    "h_freq = ampl*(np.sin(samp_rate * samples_freq) / (samp_rate * samples_freq)) #sinc\n",
    "\n",
    "#h_ideal = np.exp(-1j*delay_int*2*np.pi*samp_rate)\n",
    "print(f\"h_freq{h_freq}\")\n",
    "print(f\"h_ideal{h_ideal}\")\n",
    "\n",
    "t_freq = np.linspace(0, delay_freq + period, samp_rate)\n",
    "t_int = np.linspace(0, delay_int + period, samp_rate)\n",
    "\n",
    "f_freq = np.sin(2 * np.pi * samp_rate * t_freq)#test Signal\n",
    "f_int = np.sin(2 * np.pi * samp_rate * t_int)#test Signal\n",
    "\n",
    "f_shift_freq = np.convolve(h_freq , f_freq)[:len(f_freq)]#Faltung freq \n",
    "f_shift_int = np.convolve(h_int , f_int)[:len(f_int)]#Faltung int \n",
    "\n",
    "\n",
    "\n",
    "#h_int = np.concatenate([np.zeros(delay_int-1), [ampl], np.zeros(3)])\n",
    "#y1 = np.convolve(test.real, h_int)\n",
    "plt.grid(True)\n",
    "plt.stem(t_freq, f_shift_freq, linefmt=\"C0-\")\n",
    "plt.stem(t_int, f_shift_int, linefmt='C1-')\n",
    "plt.show()\n",
    "plt.grid(True)\n",
    "plt.stem(f_shift_freq, linefmt=\"C2-\", label='freq')\n",
    "plt.stem(f_shift_int, linefmt='C3-', label = 'int')\n",
    "#plt.legend(loc=\"upper left\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e5f23991",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f224987a",
   "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
}