about summary refs log tree commit diff
path: root/usth/ICT2.9/filters.ipynb
blob: dd6e41af87a065be5b681906a1150e57def14236 (plain) (blame)
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
800
801
802
803
804
805
806
807
808
809
810
811
812
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Untitled0.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RsxAag6zVgGa",
        "colab_type": "text"
      },
      "source": [
        "# Filter Design"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "S-FLJ4AAY14k",
        "colab_type": "text"
      },
      "source": [
        "## The preparation"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mvme4rlMVkNV",
        "colab_type": "text"
      },
      "source": [
        "First, we load a sample sound as an example for later experiments:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FT2qT4zdVMxC",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import wave\n",
        "\n",
        "import numpy as np\n",
        "\n",
        "with wave.open('blue-ocean-floor.wav', 'r') as wav:\n",
        "    frame_rate, sample_width = wav.getframerate(), wav.getsampwidth()\n",
        "    ocean = (lambda a: a/ a.max())(np.frombuffer(\n",
        "        wav.readframes(wav.getnframes()), dtype=f'i{sample_width}'))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5_47f9h6WcCM",
        "colab_type": "text"
      },
      "source": [
        "Then for convenience purposes, we define a few `matplotlib` wrappers:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0dkqk-_9WsOq",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from math import pi\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "from numpy.fft import fft\n",
        "\n",
        "\n",
        "def plt_time(sequence):\n",
        "    \"\"\"Plot the signal in time domain.\"\"\"\n",
        "    length = len(sequence)\n",
        "    plt.plot(np.linspace(0, length/frame_rate, length), sequence)\n",
        "    plt.show()\n",
        "\n",
        "\n",
        "def plt_fft(sequence):\n",
        "    \"\"\"Plot the magnitude of the FT of the signal.\"\"\"\n",
        "    domain = np.linspace(0, pi*2, len(sequence))\n",
        "    plt.plot(domain, np.abs(fft(sequence)))\n",
        "    plt.show()\n",
        "\n",
        "\n",
        "def plt_db(sequence):\n",
        "    \"\"\"Plot the FT of the signal in dB.\"\"\"\n",
        "    domain = np.linspace(0, pi*2, len(sequence))\n",
        "    FT = fft(sequence)\n",
        "    plt.plot(domain, 20 * np.log10(np.abs(FT/abs(FT).max())))\n",
        "    plt.show()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hzFZU7lxXlrk",
        "colab_type": "text"
      },
      "source": [
        "The sample audio's waveform can then be visualized using"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-dMPhzl6Xw5R",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        },
        "outputId": "593f98e0-f1d3-4c93-e385-aa8988020276"
      },
      "source": [
        "plt_time(ocean)\n",
        "plt_fft(ocean)"
      ],
      "execution_count": 61,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Euu6xt44YRG0",
        "colab_type": "text"
      },
      "source": [
        "It is completely normal that the audio is mainly low frequency, given the `frame_rate` of 44100 Hz, while vocal is around 300 to 1000 Hz and we can usually hear only up to around 10000 Hz."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "g_psAgGiYuMN",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "9cda3d29-6fa2-444c-e227-162ff6a0ea30"
      },
      "source": [
        "print(frame_rate)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "44100\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DiWkQgwXY-Am",
        "colab_type": "text"
      },
      "source": [
        "## The sinc function"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zO-UY4-6ZLAx",
        "colab_type": "text"
      },
      "source": [
        "The ideal low pass filter has the impulse response of `h[n] = sin(w*n) / (pi*n)` which pass frequencies from 0 to `limit = w/pi * frame_rate` hertz.  For the ease of calculation, we define `r =  w/pi` and get `h[n] = sin(pi*n*r) / (pi*n*r/r) = sinc(n*r) * r`.  We then define our own `sinc` sampler as"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JU9Ra87canaJ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def sinc(limit, length=101):\n",
        "    \"\"\"Return the impulse response of the low-pass filter passing\n",
        "    frequencies up to limit herts, sampled to the given length.\n",
        "    \"\"\"\n",
        "    absolute = length >> 1\n",
        "    n = np.arange(-absolute, absolute+1)\n",
        "    r = limit / frame_rate\n",
        "    return np.sinc(n*r) * r"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VGEAxTCxbOw1",
        "colab_type": "text"
      },
      "source": [
        "Just to be sure, we plot a filter passing up to 420 Hz:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GiIuofwLbsHG",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        },
        "outputId": "d0847d62-cc59-4004-d7bd-4bf3678d55ca"
      },
      "source": [
        "plt_fft(sinc(3000))\n",
        "plt_db(sinc(3000))"
      ],
      "execution_count": 85,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WR0SOl2veOiO",
        "colab_type": "text"
      },
      "source": [
        "In order to have something for the later filters to compare with, we apply it to the input:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yR-2V36OeXtU",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        },
        "outputId": "dc55207b-2fb5-4ae7-fe4d-bd60a34512dd"
      },
      "source": [
        "output_sinc = np.convolve(ocean, sinc(3000))\n",
        "plt_time(output_sinc)\n",
        "plt_fft(output_sinc)"
      ],
      "execution_count": 63,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z7PKrdjdb9Xu",
        "colab_type": "text"
      },
      "source": [
        "## The FIR windows"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "brssPyVncKdx",
        "colab_type": "text"
      },
      "source": [
        "As seen from above, the low-pass filter sampled from `sinc` isn't ideal: there's quite some visible passband ripple and this could distort our output.  Luckily we can improve this by multiply the impulse response with a window, whose functions are provided by `scipy`!"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6nv8Ickhcwbt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from scipy.signal import windows\n",
        "\n",
        "\n",
        "def fir(limit, window, length=101):\n",
        "    \"\"\"Return a low-pass filter using the specified windowing technique.\"\"\"\n",
        "    return getattr(windows, window)(length) * sinc(limit, length)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1poaLOrZdJUl",
        "colab_type": "text"
      },
      "source": [
        "We first try the Bartlett window:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "outputId": "ec91de0d-e007-4d83-84b4-50a63450d4ff",
        "id": "Itc6VElKhW9g",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        }
      },
      "source": [
        "bartlett = fir(3000, 'bartlett')\n",
        "plt_fft(bartlett)\n",
        "plt_db(bartlett)"
      ],
      "execution_count": 89,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "A9qPm8wAiEDc",
        "colab_type": "text"
      },
      "source": [
        "Considering only the plot in dB, this seems to be worse than the vanila sinc samples.  Next, we try the Hamming window:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "outputId": "8736f38d-4965-4f3c-ab02-1a36902cdd25",
        "id": "R4Cp5Ya_iUyr",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        }
      },
      "source": [
        "hamming = fir(3000, 'hamming')\n",
        "plt_fft(hamming)\n",
        "plt_db(hamming)"
      ],
      "execution_count": 90,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3dd3hc5Zn38e+tLtmW5CpZ1TK2wb3JNhATCL0b02JKQgKJF0L67puEzb67ZN+QkLrAQgheQ4BQDKGF0HEgdBe5d1u4qLnIZUa21UfP+4dGXmFkyyqjM6P5fa5LF6NzZubcwvZPZ+7zPM8x5xwiIhJdYrwuQEREep7CX0QkCin8RUSikMJfRCQKKfxFRKJQnNcFnKhBgwa5YcOGeV2GiEjEWLZs2V7n3OC29kVM+A8bNoyioiKvyxARiRhmtuNY+9T2ERGJQgp/EZEopPAXEYlCCn8RkSik8BcRiUKehb+ZXWhmm8ys2Mx+4lUdIiLRyJPwN7NY4AHgImAMcJ2ZjfGiFhGRaOTVOP/pQLFzbiuAmS0AZgHru/tA97+zhfqAg+DS1UkJsaQlx5OWHM/MEYNIT0no7kOKiHSar7qeD4v34q9pwF/TQIwZt555Urcfx6vwzwZKW31fBsw4+klmNheYC5CXl9epA93/bjG1DU1t7hs5pC8v3f4F+iRGzFw3EenFDtU1ctWDH/Np5eEj24b0S+xV4X9CnHPzgHkAhYWFnbrrzIb/vBAza3k/6hqb8Nc0sHzHAW5/ajk/en419183+chzRES84JzjR8+tYvu+av5441Qm56WTlhxPUnxsSI7n1QXfciC31fc5wW3drnWomxlJ8bFkpCZx0fih/J8LTuHV1Tt5+MNtoTi0iMgJm//BNl5bs4sfX3gyF47LJCM1KWTBD96F/1JgpJkVmFkCMAd4uaeLuPXM4VwwNoNfvr6RxVv39fThRUQAWLR1H3e/sZGLxmXyzTOG98gxPQl/51wj8G3gTWAD8Kxzbl1P12Fm/PaaiWSmJnH/u8U9fXgREQDuf6eYzNQkfnPNxB5rQXvW83fOvQa85tXxW/RLiueLowbx2ppdOOfU+xeRHtXU5FhV5uOyiVn07cHBJ5rhC4zPTsdf00DJ/mqvSxGRKLNjfzUHaxuZkJ3Wo8dV+AMTcpr/p68q83tciYhEm9VlPgAm5KT36HEV/sDJmf1IjIthdanP61JEJMqsKvWTFB/DqIy+PXpchT8QHxvDmKxUVpfrzF9Eetaach9js9KIi+3ZOFb4B03ITmNtuZ9AU6fmkomIdFhjoIm15VVHWs89SeEfNCEnner6AJ9WHvK6FBGJEsWVh6hpCCj8vTQxN3jRV31/Eekhq0ubW809fbEXFP5HFAzqS5+EWNao7y8iPWR1uY9+iXEUDOzT48dW+AfFxhjjstM03FNEeszqMj/jc9KIien5yaUK/1Ym5qazoaKK+sa2l4AWEekudY0BNuys8qTlAwr/z5iQk0Z9oIlNuw56XYqI9HIbdx6kIeA8udgLCv/PmJDd/Bt4dbku+opIaLXMK1L4h4HcAcn0T4k/cgVeRCRUVpf6GNgngez0ZE+Or/BvxcwYMaQvO/Yfbv/JIiJdsGNfNScN6evZSsIK/6OkJSfgr2n0ugwR6eX8NQ30T4n37PgK/6Okp8Tjr673ugwR6eV8NfWkJyd4dnyF/1HSk+Px1TR4XYaI9HK+6gbSdeYfPtJT4qmuD2isv4iETG1DgLrGJtIU/uEjLbn5D8Ovs38RCZGWfGnJGy8o/I+SltLcg/PXqO8vIqHhq24O/17Z8zez35jZRjNbbWYvmll6q313mFmxmW0yswtCVUNnpAd/E7f84YiIdDdfcFBJb+35vw2Mc85NADYDdwCY2RhgDjAWuBD4g5nFhrCODmn5w1D4i0io+Hpz28c595ZzrmXA/CIgJ/h4FrDAOVfnnNsGFAPTQ1VHR6nnLyKhFk09/5uB14OPs4HSVvvKgts+x8zmmlmRmRVVVlaGuMRmLT04DfcUkVDxt/T8PWz7xHXlxWa2EMhsY9dPnXN/DT7np0Aj8GRH3985Nw+YB1BYWNgjN9ftlxSHGZroJSIh46upJzbG6JvYpQjuki4d2Tl37vH2m9nXgEuBc5xzLeFdDuS2elpOcFtYiIkx0jTRS0RCyFfdQFpyvGfr+kBoR/tcCPwIuNw5V91q18vAHDNLNLMCYCSwJFR1dEZacrx6/iISMv6ahiMjC70Sys8c9wOJwNvB326LnHO3OufWmdmzwHqa20G3O+cCIayjw9KT4zXaR0RCxl/T4OnsXghh+DvnRhxn313AXaE6dlelpSSo7SMiIeOrbmBQX+8meIFm+LYpPVkre4pI6Phq6j0d5gkK/zap5y8ioeSvbiA9RWf+YSc9pTn8m5p6ZHSpiESRQJOjqrZRZ/7hKC05niYHB+t0Ry8R6V5VNd5P8AKFf5taPo75NeJHRLpZOKzrAwr/Nml9HxEJFb/O/MPXkZU9taa/iHSzluWc0zxcyx8U/m3Smv4iEirhsKInKPzblHbkzF/hLyLdyxcGK3qCwr9NLb+RqxT+ItLNdOYfxhLjYkmOjz3SmxMR6S6+6gb6JsYRH+tt/Cr8jyE9RYu7iUj3C4elHUDhf0xa019EQsEfXMvfawr/Y9D6PiISCv6aBs8v9oLC/5jSU+I1w1dEup1P4R/e0pMTNMlLRLqdT22f8KYLviLS3Zxz+GvqPZ/dCwr/Y0pLiaeusYnahrC6w6SIRLCahgANAae2TzjT4m4i0t1auglq+4Sx9ODHMrV+RKS7HFnaIRrC38z+2cycmQ0Kfm9mdp+ZFZvZajObEuoaOuPIyp6a5Ssi3aRlEElab2/7mFkucD5Q0mrzRcDI4Ndc4MFQ1tBZavuISHc7chevKLjg+1/Aj4DWN8OdBTzumi0C0s1saIjr6LCW8NcsXxHpLkd6/r35zN/MZgHlzrlVR+3KBkpbfV8W3NbWe8w1syIzK6qsrAxRpW1raftoopeIdBdfTfj0/OO68mIzWwhktrHrp8C/0tzy6TTn3DxgHkBhYaFr5+ndqm9iHLExpraPiHQbf00D8bFGSkKs16V0Lfydc+e2td3MxgMFwCozA8gBlpvZdKAcyG319JzgtrBiZqQnx2uWr4h0m+bZvQkEc9FTIWn7OOfWOOeGOOeGOeeG0dzameKc2wW8DHw1OOrnVMDvnNsZijq6Ki1Zs3xFpPs0z+7t0jl3t/GiiteAi4FioBr4ugc1nJC0FK3sKSLdx1fdQHqK9yN9oIfCP3j23/LYAbf3xHG7alDfREr3V3tdhoj0EpUH6ygY1MfrMgDN8D2urLQkyn01XpchIr2Ac44KXw1Z6clelwIo/I8rKz2Zg7WNHKxV60dEuqaqtpHD9QGyFf7hr+U39E5/rceViEikqwh2EXTmHwGy0pMA1PoRkS5rCf+hwVzxmsL/OI6c+ft05i8iXVMR7CCo7RMBhvRLIjbGjvzGFhHprApfDfGxxuC+iV6XAij8jys2xshMTVL4i0iXVfhqyEhNIibG+9m9oPBvV1Z6EhV+hb+IdM1OX23YXOwFhX+7hqYlU6Gev4h0UbmvJmz6/aDwb1dWejI7/TU0NfXooqIi0osEmhy7qmoZmhYeI31A4d+u7PQkGgKOvYfrvC5FRCJU5cE6Ak1ObZ9IMjSt+Q9LrR8R6ayWuUJq+0SQlt/UGvEjIp0VbrN7QeHfrmyFv4h00U5/eM3uBYV/u1KT40hJiFXbR0Q6rcJXS7/EOFKTvL93bwuFfzvM7MiIHxGRzginpZxbKPxPQFZ6sto+ItJpFf6asGr5gML/hDTf1EVtHxHpnIowm90LCv8TkpWezN5DddQ1BrwuRUQiTG1DgP2H68NqmCeEOPzN7DtmttHM1pnZr1ttv8PMis1sk5ldEMoaukPLrLxduqmLiHTQkXX8w2h2L4TwBu5m9iVgFjDROVdnZkOC28cAc4CxQBaw0MxGOefC9rS65Td2ua+G/IHhcfNlEYkMLSMFo6ntcxtwt3OuDsA5tye4fRawwDlX55zbBhQD00NYR5fppi4i0lktqwJHU9tnFHCGmS02s/fMbFpwezZQ2up5ZcFtYSsz+HFNI35EpKMqfDWYQUZqL2r7mNlCILONXT8NvvcA4FRgGvCsmQ3v4PvPBeYC5OXldaXULkmKj2VQ3wSt6y8iHVbhq2Fw30QS4sJrfE2Xwt85d+6x9pnZbcALzjkHLDGzJmAQUA7ktnpqTnBbW+8/D5gHUFhY6Omays1j/dX2EZGO2ekPv2GeENq2z0vAlwDMbBSQAOwFXgbmmFmimRUAI4ElIayjW+QNSKF4zyGvyxCRCOKco3jPIfIGpHhdyueEMvwfAYab2VpgAXCTa7YOeBZYD7wB3B7OI31aTM3vT7mvRn1/ETlhZQdq2OmvpXBYf69L+ZyQDfV0ztUDNx5j313AXaE6dihMGzYAgKXb9zNrUlhfnxaRMLF0+37gf/MjnITXFYgwNnpoKv0S41iybb/XpYhIhFi6fT+pSXGcnNHP61I+R+F/gmJjjCn5/RX+InLCFm/bT+GwAcTEmNelfI7CvwOmFwxgy55DHDhc73UpIhLm9h6qY2vl4bBs+YDCv0Na9/1FRI6nKJgT0wvC72IvKPw7ZEJOGgmxMQp/EWnXkm0HSIyLYXx2uteltEnh3wFJ8bFMzE1jyfYDXpciImFu6fb9TMpND7uZvS3Cs6owNm3YANaV+6mub/S6FBEJU4fqGllX4Wd6QXj2+0Hh32HTCgbQ2ORYUeLzuhQRCVPLdxygyYXn+P4WCv8OmprfHzM05FNEjmnp9v3EGEzJD8+LvaDw77DUpHhGZ6Yq/EXkmBZv28/YrDT6JoZsEYUuU/h3wtmnDGHxtn2U7q/2uhQRCTPb9x5m6fb9nHXyYK9LOS6FfyfceGo+MWb86aPtXpciImHm0Y+3Exdj3HhqvtelHJfCvxMy05K4dMJQni0qpaq2wetyRCRM+GsaeLaolMsmZIXdnbuOpvDvpFtmDudQXSPPLi1t/8kiEhWeWVpCdX2Am2cWeF1KuxT+nTQ+J43pwwbwp4+20xho8rocEfFYY6CJxz7ewYyCAYzLTvO6nHYp/Lvg5pkFlPtqeGv9bq9LERGPvbFuF+W+Gm6JgLN+UPh3yXljMsgbkMJD731KU5OntxgWEQ8Fmhzz3t9K/sAUzhmd4XU5J0Th3wWxMcZ3zxnJqjI/j3y0zetyRMQjD3+4ldVlfr53zkhiw3Dt/rYo/LvoqinZnDcmg1+/sYlNuw56XY6I9LANO6v47ZubuWBsBrMnR84tXhX+XWRm/PLK8aQmx/H9Z1ZS1xj296IXkW5S1xjgB8+sJDU5nl/MHo9ZZJz1QwjD38wmmdkiM1tpZkVmNj243czsPjMrNrPVZjYlVDX0lEF9E7n7ygls2FnF79/e7HU5ItJDfvfWZjbuOsivrx7PwL6JXpfTIaE88/818DPn3CTg34PfA1wEjAx+zQUeDGENPebcMRlcNz2Ph97byjNLS7wuR0RC7KnFJcx7fys3zMjj7FMi4yJva6FcdcgBqcHHaUBF8PEs4HHnnAMWmVm6mQ11zu0MYS094meXj6XCV8MdL6yhX1I8F48f6nVJIhICf1tVwU9fWsOXTh7MnZeP9bqcTgnlmf/3gd+YWSnwW+CO4PZsoPW02LLgts8xs7nBllFRZWVlCEvtHglxMTx44xSm5PXnewtW8N7m8K9ZRDrmH5v28MNnVzItfwB/uGEq8bGReem0S1Wb2UIzW9vG1yzgNuAHzrlc4AfAwx19f+fcPOdcoXOucPDg8F4hr0VKQhwPf20aI4b0Y+7jRbyxdpfXJYlIN3lj7U7+6c/LGJXRj/lfKyQ5IdbrkjqtS+HvnDvXOTeuja+/AjcBLwSf+hdgevBxOZDb6m1ygtt6jbTkeJ64ZTqjh6Zy25PLePyT7V6XJCJd9KePtnHbk8sZk5XKn2+ZQWpSvNcldUkoP69UAGcGH58NbAk+fhn4anDUz6mAvzf0+482sG8iT3/zVM45JYN//+s6fvHaBgKaBSwScQJNjp+/sp6f/W09543O4KlvnMqAPglel9Vlobzg+03gXjOLA2ppHtkD8BpwMVAMVANfD2ENnkpOiOWhr0zlzpfXMe/9rayvqOLeOZMibkiYSLTae6iO7z69go8/3cdNp+Xz75eNjZgZvO2x5kE34a+wsNAVFRV5XUanPbO0hP/713UMSEnggRumMDWM7+0pIlC0fT+3P7UcX3UD/++KcVxbmNv+i8KMmS1zzhW2tS8yL1NHoC9Py+OF204nIS6GLz/0Cff9fYuWghYJQw2BJu5ZuJkvz1tEUnwsL3zr9IgM/vYo/HvQuOw0/vadmVwyYSi/f3szV//xE7ZWHvK6LBEJ+rTyEFc/+DH3LNzCZROG8vK3ZzI2K/zX5u8MhX8PS0uO5945k/nv6yazbe9hLr7vAx5671N9ChDxUGOgiT++9ykX3/sBO/ZX88D1U7hnzmTSkiN7RM/xhPKCrxzHZROzmDZsAP/20lp++fpGXl5Vwa+umhARdwAS6U3WlPn58fOrWb+zivPGZPDzK8aF/f13u4Mu+HrMOcfra3fxHy+vY9+hOm6Ykc8/nz+K9JTIH0omEs581fX87q3NPLl4B4P6JvKfs8Zy4bjetSTL8S746szfY2bGxeOH8oURg/j9W5v486IdvLK6gv9zwSl8eVpurxlWJhIuAk2Op5eU8Nu3NnGwtpGvnjaMH54/KuInbXWUzvzDzIadVfzHy+tYsm0/p2T2446LR3PmqMhY2kIknDnn+MfmSu5+bSObdh9kRsEAfjZrLKdkprb/4gh1vDN/hX8Ycs7x2ppd/OqNjZTsr+aMkYP40QWnMD5H1wNEOmNNmZ9fvbGRD4v3kj8whR9feAoXjcuMqJuvdIbCP0LVNzbxxKId3PfOFnzVDVw8PpMfnjeKEUP6eV2aSETYsvsgv3trM2+s20V6SjzfPXskN56aT0JcdAx0VPhHuKraBh7+YBvzP9hKTUOAyydm8e2zRzJiSF+vSxMJS8V7DnLf34v52+oK+iTE8Y0zCrhlZgH9oq2vr/DvHfYfrueh9z7l8U92UNsY4LIJWdz+pRGcnKlPAiIAG3dVcf87xby6ZifJ8bF85bR8/umLJ/WKhdg6Q+Hfy+w7VMe8D7by5092UF0f4NzRGXzrSycxJU/rBUl0WrbjAA/+o5iFG/aQkhDLTacP45tnDI/a0G+h8O+lDhyu57FPtvPox9vxVTcwvWAAc88YztmnDCFGQ0Sll2tqcvx94x7+5/2tLNm+n/SUeL5+egE3nZ6veTJBCv9e7nBdIwuWlvLIh9so99UwfHAfbplZwJWTcyL6TkMibamub+SF5eU88tE2tlYeJjs9mZtnFjBnWi59EjV1qTWFf5RoDDTx6pqd/M8HW1lbXkVacjzXTc/jK6flk52e7HV5Il1S7qvh8U+28/TiEqpqGxmfncY3vzici8dlEheh99ENNYV/lHHOUbTjAI98uI031zXfQ/i8MRncdNowTjtpYK8f2yy9h3OOjz/dx2Mfb2fhht0AXDguk5u/UMDU/P76u9wOLe8QZcyMacMGMG3YAMoOVPPk4hIWLCnhzXW7OWlwH26Ykc9VU3JIS4muYW8SOfzVDTy3vIwnF+9ga+VhBvRJ4NYzT+KGU/UptrvozD9K1DYEeGX1Tp5cvIMVJT4S42K4dEIW18/IY0peus6gxHPOOZbtOMDTS0p5ZXUFdY1NTMlL54YZ+VwyYShJ8bp+1VFq+8hnrC3389SSEv66opzD9QFGZfTly9PymD05O+qHxknP23+4nhdXlLNgSQlb9hyib2Icl0/K4sYZ+YzJ6r3r7vQEhb+06XBdI39bVcHTS0tZVeojITaG88ZkcO20XGaOGKQVRSVkAk2OD7ZU8peiMt5av4uGgGNibjrXT8/l0glZGrXTTUIW/mZ2DXAnMBqY7pwrarXvDuAWIAB81zn3ZnD7hcC9QCww3zl394kcS+EfWht3VfHM0lJeXFGOr7qBoWlJXDklm6un5lIwqI/X5UkvsbXyEM8tK+OF5eXsqqolPSWeKyfn8OVpuZqpHgKhDP/RQBPwEPAvLeFvZmOAp4HpQBawEBgVfNlm4DygDFgKXOecW9/esRT+PaOuMcDC9Xv4y7JS3t9cSZODwvz+XDU1h0smDI26Nc+l66pqG3h19U6eW1bGsh0HiDE4c9RgrinM5ZzRQ0iMUy8/VEI22sc5tyF4gKN3zQIWOOfqgG1mVkzzLwKAYufc1uDrFgSf2274S89IjIvlkglDuWTCUHb5a3lxRTnPLy/jjhfWcOfL6zh/bCZXTsnmjBGDNLZajqkx0MQHW/by/PIy3l6/m7rGJkYO6ctPLjqF2ZOzo+I2ieEuVI21bGBRq+/LgtsASo/aPuNYb2Jmc4G5AHl5ed1corQnMy2J2846iVvPHM6qMj8vLC/j5VUV/G1VBYP6JnL5xCyunJLN2KxUjRYSnHOsq6jiheXlvLyqgr2H6uifEs+cablcOSWHCTlp+nsSRtoNfzNbCGS2seunzrm/dn9J/8s5Nw+YB81tn1AeS47NzJiUm86k3HT+7ZIxvLtpDy8uL+eJRTt45KNtjMroyxWTs7liUjZZGoMddcp9Nby0opyXVpSzZc8hEmJjOGf0EGZPzuask4dEzdr5kabd8HfOnduJ9y0Hclt9nxPcxnG2SwRIiIvhgrGZXDA2E191Pa+s3slLK8r59Rub+M2bm5hRMIDZk7O5aLyuD/Rm/poGXl+zkxdXlLN4234Apg3rz12zx3Hp+CxNIIwA3TLU08z+wWcv+I4FnuJ/L/j+HRgJGM0XfM+hOfSXAtc759a1dwxd8A1vJfuqeWll89nf1r2HSYiL4bzRGVwxOZszRw3W2V8vUN/YxD827eGlleUs3LCH+sYmhg/qw+zJ2VwxOZvcASlelyhHCeVon9nAfwODAR+w0jl3QXDfT4GbgUbg+86514PbLwbuoXmo5yPOubtO5FgK/8jgnGN1mZ8XV5Tzt1UV7DtcT/+UeC6dkMUVk7M1mzjCOOdYXuLjxRVlvLJ6J77qBgb2SeCy4PWe8dnq44czTfISTzQEmvhwy15eWFHOW+t2UdfYxLCBKVwxOZsrJ+eQN1BniuFqx77DvLiinBdXlLNjXzVJ8TGcPyaT2VOymTliEPEa6RURFP7iuYO1Dby+dhcvLi9n0bZ9ONfcI75yiuYPhAt/TfN4/BeWl1G04wBmcNrwgcyenM2F4zKj7v63vYHCX8JKy+iQ55eXsbXyMInBi8hXT83hC1pWokcFmhwfFe/luWVlvBn8dHbS4D5cNTVHo7d6AYW/hCXnHKvK/Dy/rHn+gL+mgay0JK6amsM1U3PVFgqhHfsO89yyMp5bVsZOfy1pyfFcPjGLq6bmMFHj8XsNhb+EvbrGAG+v381fisp4f0slzsHpJw1kzvQ8LhiboSUAukFtQ4A31+1iwZJSPtm6jxiDL44azDVTczl3jJZZ6I0U/hJRdvpreK6ojGeKSik7UEP/lHiunprD9TPytchcJ2ytPMTTS0r4y7IyfNUN5A5I5tqpuVxdmMPQNLV1ejOFv0SkpibHR5/u5eklJby1bjeNTY6ZIwbx1dPyOWd0hq4NHEegyfH2+t38edF2PireR1yMccHYTK6bnsfpJw0kRv/vooLCXyLenqpani0q5anFJVT4a8npn8xXTs1nzvQ80pI1CqWFv7qBp5eW8OdPdlDuqyErLYnrZ+Rx7bRchvTTYmrRRuEvvUZjoImFG3bz6MfbWbR1PykJsVxbmMstMwuieoZpyb5qHvloG88WlVJdH+C04QO56fR8zh2dodVXo5jCX3ql9RVVzP9wKy+vrKDJOS6dkMW3vnQSp2RGz63/Nu6q4g/vfsorqyuIjTEum5jFN2YO1+0PBVD4Sy+3y1/LIx9t48lFOzhcH+Dc0Rl8/9yRjMtO87q0kFlb7ueehZtZuGEPfRJiufHUfG6eWaB18uUzFP4SFXzV9Tz68Xb+9NF2/DUNXDQukx+eN4qRGb3n9oCbdx/k929t5o11u0hLjufmLxTwtdOHaRVNaZPCX6KKv6aBhz/cxsMfbKWmIcC1hbn88PxREX3Bc8/BWn735maeXVZKn4Q4bplZwC1nFGhZDDkuhb9Epf2H63ng3WIe+3g7iXEx3H72CG6ZWRBRk5lqGwI8/OE2/vBuMfWBJr562jBu/9IIBvRJ8Lo0iQAKf4lq2/Ye5hevbeDt9bsZPrgPv5w9nhnDB3pdVrsWbd3Hv76whq17D3P+mAzuuHi0JrlJhyj8RYD3Nlfyby+toXR/DXOm5XLHxaPDco6Av6aBX7y6gWeKSskbkMJds8dxxsjBXpclEUjhLxJUXd/IvQu3MP/DbWSmJnHfdZOYmj/A67KOKNq+n+8tWMmuqlq+cUYB3z9nFMkJkdOmkvByvPDX7A+JKikJcdxx8Wieu/U0YmLg2ocWcf87Wwg0eXsSFGhy3Pf3LVz70CfExhjP33Y6d1w0WsEvIaPwl6g0Oa8/r373DC4ZP5TfvrWZbzy2lEN1jZ7UcrC2gVseW8rv397MZROzePW7M5mUm+5JLRI9FP4StVKT4rl3ziR+fsU43t+yl2v++Ak7/TU9WkOFr4Zr/vgJH2zZy12zx3HPlyfpjlnSIxT+EtXMjBtPzeeRr02jdH81VzzwEesrqnrk2Osq/FzxwEeUH6jh0a9P44YZ+bqJivSYLoW/mV1jZuvMrMnMClttP8/MlpnZmuB/z261b2pwe7GZ3Wf62y5h4MxRg3nuttOIMePGhxdTvOdgSI+3ZfdBbpy/mLgY4/lvna7RPNLjunrmvxa4Enj/qO17gcucc+OBm4A/t9r3IPBNYGTw68Iu1iDSLU7JTOWpb55KjBk3zF9M6f7qkBynZF81N8xfTHxsDE/PPZVRvWj5CYkcXQp/59wG59ymNravcM5VBL9dBySbWaKZDQVSnXOLXPMY08eBK7pSg0h3KhjUhye+MZ3ahiZumL+Y3VW13fr+u/y13PDwIuoDTTzxjRnkD9SkLfFGT/T8r75M/sUAAAi6SURBVAKWO+fqgGygrNW+suC2NpnZXDMrMrOiysrKEJcp0uyUzFQe/fo09h2q47YnltEYaOqW920INHHrE8s4cLiBx74+XWf84ql2w9/MFprZ2ja+Zp3Aa8cCvwL+qTPFOefmOecKnXOFgwerJyo9Z3Jef35x5XiWl/i4753ibnnP+/6+hZWlPu6+ajwTNZRTPBbX3hOcc+d25o3NLAd4Efiqc+7T4OZyIKfV03KC20TCzqxJ2by3qZL739nCF0cOonBY52cCL9m2nwfeLebqqTlcOiGrG6sU6ZyQtH3MLB14FfiJc+6jlu3OuZ1AlZmdGhzl81Xgr6GoQaQ7/GzWWHL6p/C9BSupqm3o1Hv4axr4wTMryR2Qwp2Xj+3mCkU6p6tDPWebWRlwGvCqmb0Z3PVtYATw72a2Mvg1JLjvW8B8oBj4FHi9KzWIhFK/pHjumTOJXVW13P36xk69x92vb2B3VS33zplM38R2P2yL9Igu/U10zr1Ic2vn6O0/B35+jNcUAeO6clyRnjQlrz/XT89jwdISvnP2CIamJZ/wayt8NfylqIwbZuRpyQYJK5rhK3IC5n5xOE0O5n+wrUOv+58Ptja//syTQlGWSKcp/EVOQO6AFGZNzOLpJSUcOFx/Qq/Zd6iOBUtKmTUpm+z0E/+0INITFP4iJ+jWs06iuj7Aox9vP6HnP/rxdmobA9x21vDQFibSCQp/kRM0KqMf543J4NGPt7e7/PPB2gYe+3g754/JYMQQTeaS8KPwF+mAb511Ev6aBp5eXHLc5z21uISq2ka+ddaIHqpMpGMU/iIdMDmvPxNz03l97c7jPu+1tbuYnJeumbwSthT+Ih00o2AAa8urqGsMtLm/tiHA+go/0wvC597AIkdT+It00JS8dOoDTce86cu6Cj8NAceUvP49XJnIiVP4i3TQ5GCoLy/xtbl/+Q5f8Hlq+Uj4UviLdFBGahLZ6cksLznQ5v4VpQfI6Z/MkH5JPVyZyIlT+It0wuS8dFYe58xfLR8Jdwp/kU6YnNefcl/N5+70VeGrYVdVLVPU8pEwp/AX6YSWcF++47OtnxUlLf1+nflLeFP4i3TCmKxUEmJjWFH62dbP8pIDJMbFMHpoqkeViZwYhb9IJyTGxTIuO7WNM/8DTMhJIyFO/7QkvOlvqEgnTcnrz+pyP/WNzTd4r2sMsLa8Si0fiQgKf5FOmpzXn/rGJjbsbJ7stb6iivpAky72SkRQ+It00pT84EXf4Hj/5brYKxFENxQV6aShaclkpiZxz8ItPLW4hD0H68hOTyYjVZO7JPwp/EW64F8uOJl3Nu4GYGRGX84dneFxRSInpkvhb2bXAHcCo4HpwZuzt96fB6wH7nTO/Ta47ULgXiAWmO+cu7srNYh46eqpOVw9NcfrMkQ6rKs9/7XAlcD7x9j/e+D1lm/MLBZ4ALgIGANcZ2ZjuliDiIh0UJfO/J1zGwDM7HP7zOwKYBtwuNXm6UCxc25r8DkLgFk0fzoQEZEeEpLRPmbWF/gx8LOjdmUDpa2+LwtuO9b7zDWzIjMrqqys7P5CRUSiVLvhb2YLzWxtG1+zjvOyO4H/cs4d6kpxzrl5zrlC51zh4MGDu/JWIiLSSrttH+fcuZ143xnA1Wb2ayAdaDKzWmAZkNvqeTlAeSfeX0REuiAkQz2dc2e0PDazO4FDzrn7zSwOGGlmBTSH/hzg+lDUICIix9alnr+ZzTazMuA04FUze/N4z3fONQLfBt4ENgDPOufWdaUGERHpOHPOeV3DCSksLHRFRUXtP1FERAAws2XOucI290VK+JtZJbCjky8fBOztxnJ6WqTXD5H/M0R6/RD5P4Pq77h851ybo2UiJvy7wsyKjvXbLxJEev0Q+T9DpNcPkf8zqP7upVU9RUSikMJfRCQKRUv4z/O6gC6K9Poh8n+GSK8fIv9nUP3dKCp6/iIi8lnRcuYvIiKtKPxFRKJQrw5/M7vQzDaZWbGZ/cTrejrKzB4xsz1mttbrWjrDzHLN7F0zW29m68zse17X1FFmlmRmS8xsVfBnOHql2ohgZrFmtsLMXvG6ls4ws+1mtsbMVppZxM32NLN0M3vOzDaa2QYzO83zmnprzz9445jNwHk0Lx29FLjOORcx9w4wsy8Ch4DHnXPjvK6no8xsKDDUObfczPrRvLDfFRH2Z2BAH+fcITOLBz4EvuecW+RxaR1iZj8ECoFU59ylXtfTUWa2HSh0zkXkJC8zewz4wDk338wSgBTnnM/Lmnrzmf+RG8c45+qBlhvHRAzn3PvAfq/r6Czn3E7n3PLg44M0r+d0zPs3hCPXrGVp8vjgV0SdMZlZDnAJMN/rWqKRmaUBXwQeBnDO1Xsd/NC7w79DN46R0DKzYcBkYLG3lXRcsGWyEtgDvO2ci7Sf4R7gR0CT14V0gQPeMrNlZjbX62I6qACoBP4UbL3NN7M+XhfVm8NfwkTwzm7PA993zlV5XU9HOecCzrlJNN9/YrqZRUwLzswuBfY455Z5XUsXzXTOTaH5/t+3B1uikSIOmAI86JybTPOtbT2/Btmbw78c3TjGc8E++fPAk865F7yupyuCH9XfBS70upYO+AJwebBnvgA428ye8LakjnPOlQf/uwd4kea2bqQoA8pafWJ8juZfBp7qzeG/lOCNY4IXWOYAL3tcU1QJXix9GNjgnPu91/V0hpkNNrP04ONkmgcQbPS2qhPnnLvDOZfjnBtG87+Bd5xzN3pcVoeYWZ/ggAGC7ZLzgYgZAeec2wWUmtnJwU3nAJ4PegjJnbzCgXOu0cxabhwTCzwSaTeOMbOngbOAQcGb5vyHc+5hb6vqkC8AXwHWBHvmAP/qnHvNw5o6aijwWHD0WAzNNyCKyOGSESwDeLH5XII44Cnn3BveltRh3wGeDJ6IbgW+7nE9vXeop4iIHFtvbvuIiMgxKPxFRKKQwl9EJAop/EVEopDCX0QkCin8RUSikMJfRCQK/X/vqC88t4k6WgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WuYjHCFOihPf",
        "colab_type": "text"
      },
      "source": [
        "The Hamming window seems to provide a smoother filter (i.e. almost no ramples); other than that it's quite equivalent to the original filter."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "outputId": "b5f2cd8a-2055-4650-a08f-9c4917ed4133",
        "id": "DflFR72-i582",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 513
        }
      },
      "source": [
        "blackman = fir(3000, 'blackman')\n",
        "plt_fft(blackman)\n",
        "plt_db(blackman)"
      ],
      "execution_count": 91,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sNmW3UPVjMNV",
        "colab_type": "text"
      },
      "source": [
        "The Blackman seems to provide a slightly better result, with the gain dropping noticiably faster in the transition bandwidth."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kal1ldxbpxSh",
        "colab_type": "text"
      },
      "source": [
        "There is very little point ploting the output signal however, since the original is already too complicated for human eyes.  Pretty much all we will see is very similar to that of the vanila sinc samples.  Instead, we write the output to files and listen to them instead:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LuJy6wpdqUAi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def write(signal, filename):\n",
        "    \"\"\"Write the given signal to the corresponding filename.\"\"\"\n",
        "    with wave.open(f'{filename}.wav', 'w') as wav:\n",
        "        wav.setnchannels(1)\n",
        "        wav.setsampwidth(sample_width)\n",
        "        wav.setframerate(frame_rate)\n",
        "        width = sample_width << 3\n",
        "        wav.writeframesraw(getattr(np, f'int{width}')(signal * 2**(width - 1)))\n",
        "\n",
        "\n",
        "write(np.convolve(ocean, sinc(3000)), 'output_sinc')\n",
        "write(np.convolve(ocean, bartlett), 'output_bartlett')\n",
        "write(np.convolve(ocean, hamming), 'output_hamming')\n",
        "write(np.convolve(ocean, blackman), 'output_blackman')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wIlx2i3Mqy2p",
        "colab_type": "text"
      },
      "source": [
        "After a quick listen, `output_{sinc,bartlett}` seems to have better soundstage than the other two, which means Hamming and Blackman does better jobs filtering *away* high frequencies.  `output_hamming` seems to be the most *dull* to me, which means it's the best filtered one.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3k6HmI3XsTAK",
        "colab_type": "text"
      },
      "source": [
        "## The IIR filters"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6tBjWTKNwBKq",
        "colab_type": "text"
      },
      "source": [
        "In this section, we are going to examine a few IIR filters.  Before we start, let's define a thin wrapper for convenience:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ez0jOaiawNfc",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from scipy import signal\n",
        "\n",
        "\n",
        "def iir(limit, design, order=4):\n",
        "    \"\"\"Return the specified IIR filter.\"\"\"\n",
        "    if design == 'cheby1': return signal.cheby1(order, 1, limit/frame_rate)\n",
        "    return getattr(signal, design)(order, limit/frame_rate)\n",
        "\n",
        "\n",
        "def plt_iir(b, a):\n",
        "    \"\"\"Plot the given IIR filter in linear as well as log (dB) magnitude.\"\"\"\n",
        "    w, h = signal.freqz(b, a)\n",
        "    plt.plot(w, abs(h))\n",
        "    plt.show()\n",
        "    plt.plot(w, 20*np.log10(abs(h)))\n",
        "    plt.show()\n",
        "\n",
        "\n",
        "def apply_iir(data, b, a):\n",
        "    \"\"\"Apply the given IIR filter to data.\"\"\"\n",
        "    return signal.lfilter(b, a, data)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "iuTzduyKz7EG",
        "colab_type": "text"
      },
      "source": [
        "We can then respectively plot the Chebyshev, Butterworth and Bessel filters in frequency domain:\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yYawU_7G0B_x",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "outputId": "29933810-3ae2-4ae2-87da-7a858784009e"
      },
      "source": [
        "cheby1 = iir(3000, 'cheby1')\n",
        "plt_iir(*cheby1)"
      ],
      "execution_count": 108,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "r2qImpDh1OIs",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "outputId": "17c3b88e-4e7a-432d-e6f2-8a3d0e7e0477"
      },
      "source": [
        "butter = iir(3000, 'butter')\n",
        "plt_iir(*butter)"
      ],
      "execution_count": 110,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deXRc5Znn8e9TpbW077ssg4XBNtiAMNAQQpoQnPS0nU7oCUmfJGRjugMnycw5PSfpnkl3cjrT6VkyWbtpmjBN6ARIkzQxYQskoQ1JWGSwwbuFV0mWrV2yVkv1zh9VkkuyLMlSlW6V6vc5p45u3fvq3ufVtZ977/ve+15zziEiIsnF53UAIiKy9JT8RUSSkJK/iEgSUvIXEUlCSv4iIkkoxesA5qO4uNjV1dV5HYaISELZvn17h3OuZKZlCZH86+rqaGxs9DoMEZGEYmZHz7cs6s0+ZvaAmZ0ys13nWW5m9m0zazKzN83sqmjHICIis4tFm/8/A5tmWf5eoD78uQv4hxjEICIis4h6s49zbpuZ1c1SZAvwAxd6tPhlM8s3swrn3Ilox9I9MMpt39yGzwyfgZnh94WmfWaYEf5uBNL8rCjK4srafP7g8gqKstOjHY6ISNzwos2/Cjge8b05PG9K8jezuwhdGVBbW7ugDaX4jVsuK8M5x3jQEXSEpl1oOugcwaAj6Bx9Q2O8fKiTf3ujha8/vY+/eN9l/Mm1tZjZwmopIhLH4rbD1zl3H3AfQENDw4IGIMrJSOVvP3D5Bf3OvrY+vvbkXv7b47voGRzlnt+vX8imRUTimhf3+bcANRHfq8Pz4sKl5bk8+ImNvH9DJf/nuQO8erjL65BERKLOi+S/FfhY+K6f64DeWLT3L4bPZ/yPD1xOZV4mX3liNxr5VESWm1jc6vkw8DtgtZk1m9mnzOxPzexPw0WeAg4BTcA/AZ+NdgzREEhL4Qvvrmd3ax//fqDd63BERKIqFnf7fHiO5Q64O9rbjYUtG6r4n8/u50evHOPm1aVehyMiEjUa22cWaSk+/ujKKn617xQ9g6NehyMiEjVK/nPYtK6csaBj28EOr0MREYkaJf85rK/OpyCQygv7T3kdiohI1Cj5z8HvM95RX8K2A+0Eg7rrR0SWByX/ebh5dQkdp0fZ3drndSgiIlGh5D8P119cBEDjUT3wJSLLg5L/PFTkZVKWm86O4z1ehyIiEhVK/vO0oSZfyV9Elg0l/3naUFPA0c5BugZ0v7+IJD4l/3naUJMPwE6d/YvIMqDkP09XVOdhBjublfxFJPEp+c9TVnoKdUVZ7G/r9zoUEZFFU/K/AKvLctin5C8iy4CS/wW4tCKHI50DDI6OeR2KiMiiKPlfgEvLc3AODp487XUoIiKLouR/AS4tzwVC7/kVEUlkSv4XoLYwQGaqX+3+IpLwlPwvgM9nXFKWrTt+RCThKflfoPqyHA6eUpu/iCQ2Jf8LVF+aTXv/iF7rKCIJTcn/AtWXZQPQpLN/EUlgSv4XqL40B4ADut1TRBKYkv8FqsrPJDPVz8FT6vQVkcSl5H+BfD5jVWm2mn1EJKEp+S9AfWm2nvIVkYSm5L8A9WU5tPUN0zt0xutQREQWRMl/AepLdcePiCQ2Jf8FOHu7pzp9RSQxKfkvQHVBgIxUn273FJGEpeS/AH6fcXFJtoZ5EJGEpeS/QPWl2TSdVLOPiCQmJf8Fqi/LobV3mP5h3fEjIolHyX+BdMePiCQyJf8Fqi8LjfGjdn8RSURK/gtUWxggLcWnM38RSUhK/gs0ccfPAXX6ikgCinryN7NNZrbfzJrM7IszLL/TzNrNbEf48+lox7BUNMaPiCSqqCZ/M/MD3wPeC6wBPmxma2Yo+qhzbkP4c380Y1hKl5Rl09IzxMDImNehiIhckGif+W8Empxzh5xzo8AjwJYobyNurAq/2EXt/iKSaKKd/KuA4xHfm8Pzpvugmb1pZo+ZWc1MKzKzu8ys0cwa29vboxxmdEyM8aM7fkQk0XjR4fsEUOecuwJ4DnhwpkLOufuccw3OuYaSkpIlDXC+VhQGSPP79FYvEUk40U7+LUDkmXx1eN4k51ync24k/PV+4Ooox7BkUvw+LirJUqeviCScaCf/14B6M1tpZmnAHcDWyAJmVhHxdTOwN8oxLKn6shz2t+nMX0QSS1STv3NuDLgHeJZQUv+xc263mX3VzDaHi33OzHab2U7gc8Cd0Yxhqa2tzKWlZ4jugVGvQxERmbeUaK/QOfcU8NS0eV+OmP4S8KVob9crl1flAbCrtZd31Mdn34SIyHR6wneR1lWGk39Ln8eRiIjMn5L/IuUFUqkpzGRXS6/XoYiIzJuSfxRcXpXHrlYlfxFJHEr+UbCuKo+jnYPq9BWRhKHkHwVX1RYA8Mbxbo8jERGZHyX/KFhfnU+Kz2g8ouQvIolByT8KMtP8rK3MpfGokr+IJAYl/yi5ekUhO4/3cGY86HUoIiJzUvKPkqtXFDAyFuQt3fIpIglAyT9KrruoEIDfHOzwOBIRkbkp+UdJUXY6aypyealJyV9E4p+SfxS9o76Y149167WOIhL3lPyj6Mb6Ys6MO1493OV1KCIis1Lyj6Jr6goJpPl5fu9Jr0MREZmVkn8UZaT6uXl1Cb/Yc5Jg0HkdjojIeSn5R9lta8tp7x/RUA8iEteU/KPsXZeWkuo3nnqrzetQRETOS8k/ynIzUnnX6lJ+tqNFT/uKSNxS8o+B/9hQQ8fpUV7Y3+51KCIiM1Lyj4GbV5dQnJ3Oo68d8zoUEZEZKfnHQIrfx4euqeaX+05xpGPA63BERM6h5B8jH7++jlSfj/tfOuR1KCIi51Dyj5HS3Azef2Ul/9rYTFvvsNfhiIhMoeQfQ/e8q56gc3zrlwe8DkVEZAol/xiqLQrwJ9eu4NHXjrP3RJ/X4YiITFLyj7HP31JPQSCNL/7kTcY15IOIxAkl/xgryErjrzavZWdzL//wQpPX4YiIAEr+S+IPr6hg8/pKvvHcAX6jl72ISBxQ8l8CZsbffuByVpVm858e2s5bzXrPr4h4S8l/iWSlp/DgJzeSl5nKx//fq+xpVQewiHhHyX8JVeRl8i+fvpY0v4/b7/0tz+/RS19ExBtK/ktsZXEWP7vnBlaVZvOZhxr56hN7GBod9zosEUkySv4eKMvN4NG7ruej163ggd8c5j3f/He27mzV279EZMko+XskM83PV7es40efuZastBQ+9/Ab3PbNbTz08lEGRsa8Dk9EljlzLv7PNhsaGlxjY6PXYcRMMOh44s1W7n/xMG+19BJI8/OuS0vZtLacd9QXkx9I8zpEEUlAZrbdOdcw07KUpQ5GzuXzGVs2VLF5fSVvHO/hXxubeW5PG0++eQKA1WU5XLOygMur8lhdnkt9aTZZ6dp1IrJwUT/zN7NNwLcAP3C/c+7r05anAz8ArgY6gQ85547Mts7lfuY/k/Gg441j3bx8qJNXDnex/Wg3gxEdw1X5mVQVZFId/lmZn0lhVtrZTyCNvMxUfD7zsBYi4qUlO/M3Mz/wPeBWoBl4zcy2Ouf2RBT7FNDtnFtlZncAfwd8KJpxLAd+n9FQV0hDXSH3EDoYHO8aZP/Jfg609fN2+2laeoZ4+VAnbX3DzNRX7LPQ8wVZaSkE0v2hn2l+stNTCKSnEEj1k5biI9XvIzXFSPdPTId+pvkt9DPFR4rfh8/Ab4bPZ/jM8PtCD7D5LfTd55u63GehevhsorxhBgbY5DHJJqdD8y1ierJERPmI+WZYxLyJbxPbmFjRTPOn/26snN1KTFYeu1UnZtiT/35isu6YrXl2PjMy0/xRX2+02w42Ak3OuUMAZvYIsAWITP5bgL8OTz8GfNfMzCVC54OH/D6jrjiLuuIsbltbPmXZ2HiQU/0jdA2M0jUwSvfg6OT06ZExBkfGGRgdY3B0nIGRMU71jzDQOcDgyDij40HOjAUZHQ99tBdE4suGmnwev/uGqK832sm/Cjge8b0ZuPZ8ZZxzY2bWCxQBUwa9MbO7gLsAamtroxzm8pLi91GZH2r6Wayx8SBnxl3ooDAeZHQs9PPMeJCgC12BBJ0jGISgc4w7h3OO8WBomQvPC7pQR3bQubO/40K/M3GAcUDkMf/s/IgyLlSOcNnJ0i5U7twyM88n4nedO7vdWB7rYnkgjW3ciXkGENu/t3d/k9KcjJisN257DZ1z9wH3QajN3+NwkkaK30eKHzKJ/mWmiMSPaN/n3wLURHyvDs+bsYyZpQB5hDp+RURkiUQ7+b8G1JvZSjNLA+4Atk4rsxX4eHj6duBXau8XEVlasbjV833ANwnd6vmAc+5rZvZVoNE5t9XMMoCHgCuBLuCOiQ7iWdbZDhxdRFjFTOtTSDCJHj8kfh0SPX5I/Dokevyw9HVY4ZwrmWlBQjzhu1hm1ni+e10TQaLHD4lfh0SPHxK/DokeP8RXHTS2j4hIElLyFxFJQsmS/O/zOoBFSvT4IfHrkOjxQ+LXIdHjhziqQ1K0+YuIyFTJcuYvIiIRlPxFRJLQskn+ZrbJzPabWZOZfXGG5elm9mh4+StmVrf0Uc5uHnW408zazWxH+PNpL+I8HzN7wMxOmdmu8yw3M/t2uH5vmtlVSx3jbOYR/81m1hvx9//yUsc4FzOrMbNfm9keM9ttZp+foUzc7od5xh/X+8HMMszsVTPbGa7DV2Yo430+cuGBuRL5Q+iBsreBi4A0YCewZlqZzwL3hqfvAB71Ou4F1OFO4LtexzpLHW4CrgJ2nWf5+4CnCY2Oex3witcxX2D8NwM/9zrOOepQAVwVns4BDszw7yhu98M844/r/RD+u2aHp1OBV4DrppXxPB8tlzP/yaGknXOjwMRQ0pG2AA+Gpx8DbrFYDv594eZTh7jmnNtG6Knt89kC/MCFvAzkm1nF0kQ3t3nEH/eccyecc6+Hp/uBvYRG0o0Ut/thnvHHtfDf9XT4a2r4M/3OGs/z0XJJ/jMNJT39H8yUoaSBiaGk48V86gDwwfCl+mNmVjPD8ng23zrGs+vDl/NPm9lar4OZTbgp4UpCZ56REmI/zBI/xPl+MDO/me0ATgHPOefOuw+8ykfLJfkniyeAOufcFcBznD1zkKXxOqGxUtYD3wEe9zie8zKzbOAnwBecc31ex3Oh5og/7veDc27cObeB0MjGG81sndcxTbdckv9yGEp6zjo45zqdcyPhr/cTeg9yIpnPfopbzrm+ict559xTQKqZFXsc1jnMLJVQ4vyhc+6nMxSJ6/0wV/yJsh8AnHM9wK+BTdMWeZ6PlkvyXw5DSc9Zh2ntspsJtYcmkq3Ax8J3m1wH9DrnTngd1HyZWflEu6yZbST0/yeeTiAIx/d9YK9z7hvnKRa3+2E+8cf7fjCzEjPLD09nEnqn+b5pxTzPR3H7Jq8L4UKvg7wHeJazQ0nvtoihpAn9g3rIzJoIDyXtXcTnmmcdPmdmm4ExQnW407OAZ2BmDxO6E6PYzJqBvyLU2YVz7l7gKUJ3mjQBg8AnvIl0ZvOI/3bgz8xsDBgiNBx5PJ1AANwAfBR4K9zmDPAXQC0kxH6YT/zxvh8qgAfNzE/owPRj59zP4y0faXgHEZEktFyafURE5AIo+YuIJCElfxGRJJQQHb7FxcWurq7O6zBERBLK9u3bO9x53uHrWfI3s03Atwjd2XK/c+7r5ytbV1dHY2PjksUmIrIcmNnR8y3zpNknfAvU94D3AmuAD5vZGi9iERFJRl6d+U8OYgZgZhODmO2J5kZGxsZ56WAHPjMw8JnhMzBCP8/OM8wIzQsv85nh9xkFWWkUZ6eRnuKPZmgiIp7yKvnPNLDUtZEFzOwu4C6A2traBW2kf3iMTz0Yneai/EAqq8tyWFeVx8aVhdy4qpis9IToMhEROUfcZi/n3H2EX3bc0NCwoCfR8jJT+dndN+CAoHM4F3p/QTDyJ6H5E8uDzuFC2+fMuKN7YJSO0yOc6B1md2sf//LyUb7/0mHS/D6uv7iI919ZyW1rywmkxe2fUkTkHF5lrCUZWCrV72N9TX5U13lmPEjjkW5+te8kT+9q4z8/upNA2i42rSvng1dVc91FRfh98fSaABGRc3kyvEN4FLsDwC2Ekv5rwEecc7tnKt/Q0ODi8W6fYNDReLSbn77ezJNvnaB/eIzy3Aw2b6jk/RuquKwih/h6X4yIJBMz2+6ca5hxmVdj+5jZ+4BvcnYQs6+dr2y8Jv9Iw2fGeX7vSR5/o4UX9rczFnSsLsthy5WVbNlQRVV+ptchikiSicvkfyESIflH6hoY5cm3TvD4Gy1sP9oNQMOKAm5bW85ta8upLQp4HKGIJAMlfw8d6xzkZztaeGpXG3tPhF5IdGl5Du9ZW8571pSxtjJXTUMiEhNK/nHieNcgz+5u4xd7TtJ4pIugg+LsdG6qL+amS0q4sb6Y4ux0r8MUkWVCyT8OdZ4e4df729l2oJ2XmjroGhgFYF1VLjeuKuG6iwq5ekUBORmpHkcqIolKyT/OBYOOXa29bDvQzrYDHbx+rJuxoMNnsLYy9FDZxpWFXFNXSGFWmtfhikiCUPJPMIOjY7xxrIdXDnfx6uFO3jjWw8hYEID60myurM1nQ00B62vyWF2WQ4pfI3OLyLmU/BPcyNg4bzX38srhLl470sXO4z10D54BICPVx7rKPNbX5LMh/KkuyFQnsogo+S83zjmOdw3xxvFudh7vZWdzD7taeievDvIyU7msIoc1FXmsqcxlTUUuq0qzSUvRFYJIMpkt+WtAmgRkZtQWBagtCrBlQxUQGnZif1s/O473sLu1jz0n+vjRq0cZPhM6IKT6jVWlOaypyA0fGHKpL8uhODtNVwkiSUjJf5lI9ftYV5XHuqq8yXnjQcfhjgH2nOhjT2sfe0/0se1gOz95vXmyTEEglfrSHFaVZXNJaTb1ZTnUl2ZTkpOug4LIMqbkv4z5fcaq0mxWlWazeX3l5PxT/cPsO9FP06nTHDzVz8GTp/n5zlb6hscmy+RlplJfmk19WTarSnO4qCSLi4qzqMrPVAezyDKg5J+ESnMyKM3J4KZLzr7a0zlH++kRmk6e5uCp0xw42c/BU6d5Zlcb3YNnX72Q6jdqCgNcVJzFyuIsVhZnU1cc4KLibMpydbUgkiiU/AUI9SNMHBR+b1XxlGWdp0c43DHAoY4BDncMcCT888WDHZOdzACBND91RRMHhSxqiwKsKAz1TZTlZODTUNcicUPJX+ZUlJ1OUXY6DXWFU+YHg44TfcMcmTgwtA9wuOM0e0708czuNsaDZ+8kS/P7qC7MpLYwMPmpiZjWW9FElpb+x8mC+XxGVX4mVfmZ3DDtauHMeJDWniGOdQ1Ofo6Hf24/2k1/RP8CQHF22pSDQU1hgOqCTGoKApTnZZCqfgaRqFLyl5hI9ftYUZTFiqKsc5Y55+gdOnPeA8MTO1uJuGjAZ1CWm0FVfibVBZlUFWRSlR+gqiD8PT+TjFT/EtZOJPEp+cuSMzPyA2nkB9K4ovrc12xOXDU0dw/R0j1Ec88Qzd2DtHQP0Xi0myfePDGlSQlCVw6hg0MgfHAIfaoLQz81QJ7IVEr+Endmu2oAGBsPcrJ/hJbuIVp6QgeF5u4hWnqG2Huij+f2nmQ0oiMaIDcjhaqCwNmrh/xMKvMzJw8UethNko2SvyScFL9v8sweCs9ZHgw6OgYmDg5Dkz+bu4c43jXIy4c6OT0ytc8hLcUXPiBkhNcdCE2HDw4VeZkaHkOWFSV/WXZ8vrO3rV5ZWzBjmd6hM7R0D9HaEzowtPaEmpdauod4YX87p/pHppQ3g9Kc9NDVwsRn2hVErpqWJIEo+UtSystMJS8zlTWVuTMuHxkbp613eLLPoTV8YGjtHWJXSy+/2H2S0fGpTUs56SnnHBAmDhbVBZmUZKfrWQeJG0r+IjNIT/HP2u8Q2bTU2jM82ffQ0jNMS0+oY7p36MyU30n1GxV5E01LEx3TGZNNTJW6a0mWkJK/yAJMbVqauUz/8Blae4Ynm5RaI/offvt2Byf7hpl20xLF2emhA0JBJpV5U5uWqgsyyctMVce0RIWSv0iM5GSksro8ldXlOTMuPzMeDDUtTTQphfsfWnqG2NfWzy/3npoyfAZAVpr/nCalyP6H0px0Dbwn86LkL+KRVL+PmvDTzDNxztE1MDrljqWJzumWnqEpb3Sb4PcZ5eEH4kIHiKlNTJX5mQTS9N9eFpn8zeyPgb8GLgM2OucaI5Z9CfgUMA58zjn3bHj+JuBbgB+43zn39cXEILJcmdnkuEozPQwHofc9hw4Gw5PPPbSGp1893EVb3/A5D8QVBFKndkxPdkoHWFEc0F1LSWKxpwC7gA8A/xg508zWAHcAa4FK4HkzuyS8+HvArUAz8JqZbXXO7VlkHCJJKZCWwqrSHFaVzty0NPFAXOu0q4eW7iEOtYdGZh0cHZ/yO4VZaawoClBXlMWKokD4k0VdURYFAfU5LBeLSv7Oub3ATP8YtgCPOOdGgMNm1gRsDC9rcs4dCv/eI+GySv4iMRD5QNw1decunxhnqbk7NITG0c5BjnQOcrRzgFcPd/H4jhYiX/Odk5FCXVFouO66iINCXVFAb39LMLFq/KsCXo743hyeB3B82vxrZ1qBmd0F3AVQW3ue2ylEZFEix1mKfAXohOEz4zR3D3G0c2DyoHCkc5BdLb08s2vqsN3Z6SlcXJLFxSXZXFyaPTldWxQgPUW3sMabOZO/mT0PlM+w6C+dcz+Lfkghzrn7gPsAGhoa3BzFRSQGMlL9k68CnW5iAL4jnYOTL/h5u/00Lx/q5KdvtEyW8/uM2sLA2QNDSTYXl2axqiSHvID6F7wyZ/J3zr17AettAWoivleH5zHLfBFJIJED8L0z4pWgAAMjY5MHg7dPnebt9tD0toMdUwbdK8/NYHV5DpdW5HBpeQ6ry3K5uDRLVwpLIFbNPluBH5nZNwh1+NYDrwIG1JvZSkJJ/w7gIzGKQUQ8kpWewrqqvHOaksaDjpbuId5uP83+k/3sb+tnX1s/v3u7c3K4jBSfcVFJFqvLc7m0PHRQWFOZS3luhvoUomixt3r+EfAdoAR40sx2OOduc87tNrMfE+rIHQPuds6Nh3/nHuBZQrd6PuCc272oGohIwvD7jNqi0Hud33Vp6eT8M+NBjnQMsLetn/1tfexv6+f18It9JhRnp3N5VS6XV+dzRVUel1fnUZab4UU1lgVzLv6b0xsaGlxjY+PcBUVkWekfPsP+tn52t/bxZnMvb7X00HTq9OSwGKU56VxRHbrC2FCTz1UrCvScQgQz2+6ca5hpmR71E5G4lZORSkNdIQ11Z9/bMDg6xp7wwWBXSy9vtvTyy32ncC409Pbqshwa6gpoWFHI1SsKqC7IVHPRDHTmLyIJ7/TIGDuO9dB4tIvtR7t541jP5At7ynLTaagr5PqLirhxVTErigJJczDQmb+ILGvZ6SncWF/MjfXFQKhjeV9bH9uPdtN4pJvXjnTx5JsnAKjKz+TGVcXcUF/M711cRHF2upehe0Zn/iKy7DnnONwxwG+aOnipqYPfvd1J33DoymBtZS7vvqyMW9eUsbYyd1ldFcx25q/kLyJJZzzo2NXSy0tNHbyw/xTbj3YTdKHnDm65rJRb15Rxw6piUhN8eGwlfxGRWXSeHuHX+9t5fs9Jth1sZ3B0nPxAKu9dV8Hm9ZVcu7IwIV/BqeQvIjJPw2fGeelgB0+82covdp9k6Mw45bkZbN5QyYeuqeHiknOHuohXSv4iIgswODrG83tPsXVHCy/sb2cs6LjuokI+cu0KbltbFvfDUCj5i4gs0qn+Yf61sZmHXz1Gc/cQRVlpfPz36vjY9SvID6R5Hd6MlPxFRKIkGHS82NTBg789wq/2nSKQ5ueOa2r5zE0rqcjL9Dq8KZT8RURiYF9bH/f9+yG27mzF5zM+fv0KPnvzKgqy4uNKQMlfRCSGmrsH+ebzB/np681kpaVw9++v4lM3rvT8VtHZkn9i38QqIhIHqgsC/O8/Xs8zX7iJjSsL+frT+/iDb79I45Eur0M7LyV/EZEouaQsh+/feQ3/9LEGTg+Pcfu9v+O/P76L4TPjXod2DiV/EZEou3VNGc/9l3fyyRtW8tDLR9ny3d9w4GS/12FNoeQvIhIDWekpfPkP1/DgJzfSOTDC5u++xDO72rwOa5KSv4hIDL3zkhKe+vw7uKwilz/74Xbuf/EQ8XCjjZK/iEiMleZk8PBnruN96yr4myf38vWn93l+ANB4/iIiSyAj1c93PnwlRdlp/OO2Q/h9xp/fttqzIaSV/EVElojPZ/z1H67lzLjj7194m5KcdD5xw0pPYlHyFxFZQj6f8bX3r6Pj9Ah/8+Re6ktzJt9AtqRxLPkWRUSSnM9n/N8PbeDikizu/tHrtPUOL30MS75FEREhOz2Ff/xoA6NjQf78sZ1L3gG8qORvZv/LzPaZ2Ztm9m9mlh+x7Etm1mRm+83stoj5m8Lzmszsi4vZvohIIltZnMVf/sFlvHiwg5+83rKk217smf9zwDrn3BXAAeBLAGa2BrgDWAtsAv7ezPxm5ge+B7wXWAN8OFxWRCQpfWRjLRtq8vm7Z/bRP3xmyba7qOTvnPuFc24s/PVloDo8vQV4xDk34pw7DDQBG8OfJufcIefcKPBIuKyISFLy+YyvbF5Le/8I9794eOm2G8V1fRJ4OjxdBRyPWNYcnne++ecws7vMrNHMGtvb26MYpohIfFlfk8+ta8r4598e4fTI2Ny/EAVzJn8ze97Mds3w2RJR5i+BMeCH0QrMOXefc67BOddQUlISrdWKiMSlz958Mb1DZ3j4lWNLsr057/N3zr17tuVmdifwH4Bb3Nnu6hagJqJYdXges8wXEUlaV9YWcE1dAQ+/doxPv2NlzJ/8XezdPpuA/wpsds4NRizaCtxhZulmthKoB14FXgPqzWylmaUR6hTeupgYRESWi9uvruZQ+wA7m3tjvq3Ftvl/F8gBnjOzHWZ2L4BzbjfwY2AP8Axwt3NuPNw5fA/wLLAX+HG4rIhI0nvv5RWkp/j4yfbmmG9rUcM7OOdWzbLsa8DXZpj/FPDUYrYrIrIc5Wak8u41ZTy96wRf2bwWny92Te24ykoAAAVTSURBVD96wldEJI68+7JSOk6Psqs1tk0/Sv4iInHknZeUAvDiwY6YbkfJX0QkjhRmpVFfms2rh7tiuh0lfxGROHPNykJeP9pNMBi7wd6U/EVE4sz66jz6R8Y42jU4d+EFUvIXEYkzl1XkArD3RF/MtqHkLyISZy4py8FnSv4iIkklI9VPbWGAQ+0DMduGkr+ISByqKQxwvFtt/iIiSaW2MMAxdfiKiCSX2sIAPYNn6IvR272U/EVE4lB1QQCAlu6hmKxfyV9EJA4VZ6cB0DUwGpP1K/mLiMShgiwlfxGRpFMQCCX/nkElfxGRpJEfSAWga0AdviIiSSPV7yMnI4VunfmLiCSXgkCakr+ISLIpyEqje1DNPiIiSaUgkErXwEhM1r2oF7iLiEjsfPvDV5KR4o/JupX8RUTiVG5GaszWrWYfEZEkpOQvIpKEzLnYvSA4WsysHTi6iFUUAx1RCscLiR4/JH4dEj1+SPw6JHr8sPR1WOGcK5lpQUIk/8Uys0bnXIPXcSxUoscPiV+HRI8fEr8OiR4/xFcd1OwjIpKElPxFRJJQsiT/+7wOYJESPX5I/DokevyQ+HVI9PghjuqQFG3+IiIyVbKc+YuISAQlfxGRJLRskr+ZbTKz/WbWZGZfnGF5upk9Gl7+ipnVLX2Us5tHHe40s3Yz2xH+fNqLOM/HzB4ws1Nmtus8y83Mvh2u35tmdtVSxzibecR/s5n1Rvz9v7zUMc7FzGrM7NdmtsfMdpvZ52coE7f7YZ7xx/V+MLMMM3vVzHaG6/CVGcp4n4+ccwn/AfzA28BFQBqwE1gzrcxngXvD03cAj3od9wLqcCfwXa9jnaUONwFXAbvOs/x9wNOAAdcBr3gd8wXGfzPwc6/jnKMOFcBV4ekc4MAM/47idj/MM/643g/hv2t2eDoVeAW4bloZz/PRcjnz3wg0OecOOedGgUeALdPKbAEeDE8/BtxiZraEMc5lPnWIa865bUDXLEW2AD9wIS8D+WZWsTTRzW0e8cc959wJ59zr4el+YC9QNa1Y3O6HecYf18J/19Phr6nhz/Q7azzPR8sl+VcBxyO+N3PuP5jJMs65MaAXKFqS6OZnPnUA+GD4Uv0xM6tZmtCiZr51jGfXhy/nnzaztV4HM5twU8KVhM48IyXEfpglfojz/WBmfjPbAZwCnnPOnXcfeJWPlkvyTxZPAHXOuSuA5zh75iBL43VCY6WsB74DPO5xPOdlZtnAT4AvOOf6vI7nQs0Rf9zvB+fcuHNuA1ANbDSzdV7HNN1ySf4tQORZcHV43oxlzCwFyAM6lyS6+ZmzDs65TufcxGt97geuXqLYomU++yluOef6Ji7nnXNPAalmVuxxWOcws1RCifOHzrmfzlAkrvfDXPEnyn4AcM71AL8GNk1b5Hk+Wi7J/zWg3sxWmlkaoQ6UrdPKbAU+Hp6+HfiVC/e2xIk56zCtXXYzofbQRLIV+Fj4bpPrgF7n3Amvg5ovMyufaJc1s42E/v/E0wkE4fi+D+x1zn3jPMXidj/MJ/543w9mVmJm+eHpTOBWYN+0Yp7no2XxJi/n3JiZ3QM8S+iumQecc7vN7KtAo3NuK6F/UA+ZWROhTr07vIv4XPOsw+fMbDMwRqgOd3oW8AzM7GFCd2IUm1kz8FeEOrtwzt0LPEXoTpMmYBD4hDeRzmwe8d8O/JmZjQFDwB1xdgIBcAPwUeCtcJszwF8AtZAQ+2E+8cf7fqgAHjQzP6ED04+dcz+Pt3yk4R1ERJLQcmn2ERGRC6DkLyKShJT8RUSSkJK/iEgSUvIXEUlCSv4iIklIyV9EJAn9f0mQGt3m27boAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1ByMdegV1O9X",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "outputId": "523fc3e9-09b2-49ee-e626-e667fe3d7abf"
      },
      "source": [
        "bessel = iir(3000, 'bessel')\n",
        "plt_iir(*bessel)"
      ],
      "execution_count": 109,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zkPBz9lt1eTY",
        "colab_type": "text"
      },
      "source": [
        "We then apply these to the input a pay listen:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YA0Z9AZP1kI8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "write(apply_iir(ocean, *cheby1), 'output_chebyshev')\n",
        "write(apply_iir(ocean, *butter), 'output_butterworth')\n",
        "write(apply_iir(ocean, *bessel), 'output_bessel')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "n5u3BNy-3Ys8",
        "colab_type": "text"
      },
      "source": [
        "As shown in the frequency domain, these filters are not as effective as the ones we discovered in FIR, at least using the configurations above.  The outputs sound a lot clearer which indicates some higher frequency sounds excapes from the filters."
      ]
    }
  ]
}