{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# Design of Digital Filters\n", "\n", "*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [Sascha.Spors@uni-rostock.de](mailto:Sascha.Spors@uni-rostock.de).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: Non-Recursive versus Recursive Filter\n", "\n", "In the following example, the characteristics and computational complexity of a non-recursive and a recursive filter are compared for a particular design. Quantization is not considered. In order to design the filters we need to specify the requirements. This is typically done by a *tolerance scheme*. The scheme states the desired frequency response and allowed deviations. This is explained at an example.\n", "\n", "We aim at the design of a low-pass filter with \n", "\n", "1. unit amplitude with an allowable symmetric deviation of $\\delta_\\text{p}$ for $|\\Omega| < \\Omega_\\text{p}$\n", "2. an attenuation of $a_\\text{s}$ for $|\\Omega| > \\Omega_\\text{s}$\n", "\n", "where the indices p and s denote the pass- and stop-band, respectively. The region between the pass-band $\\Omega_\\text{p}$ and the stop-band $\\Omega_\\text{s}$ is known as *transition-band*. The phase of the filter is not specified.\n", "\n", "The resulting tolerance scheme is illustrated for the design parameters $\\Omega_\\text{p} = \\frac{\\pi}{3}$, $\\Omega_\\text{s} = \\frac{\\pi}{3} + 0.05$, $\\delta_\\text{p} = 1.5$ dB and $a_\\text{s} = -60$ dB." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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b2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Gb250TmFtZSAvRGVqYVZ1U2Fucy1PYmxpcXVlCi9JdGFsaWNBbmdsZSAwIC9NYXhXaWR0aCAxMzUwIC9TdGVtViAwIC9UeXBlIC9Gb250RGVzY3JpcHRvciAvWEhlaWdodCAwID4+CmVuZG9iagoxMiAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNSAwIG9iago8PCAvSCAxNiAwIFIgL2UgMTcgMCBSIC9qIDE4IDAgUiA+PgplbmRvYmoKMjMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyNTkgPj4Kc3RyZWFtCnicPVJJcsMwDLv7FXwCd0nvSacn5//XAvTUlxBjigAIpneLytn4aStZfuTHLjtLIrd8B22T+4qqB6RugswlxyVXiFnK50qQWLSUmVifqQ7KzzWoVfjCT8xMTIckEUvIST2KsH5eB/egfr2k81tk/KNjg9JbkkwFnRrulaOU2LBUnxrkHjTdlFafmXZlByyNN2SlJnX69dPjB0swpS8S0UGIxJ/kcocsCykH8Xau3kB4V7sg1VMrDztEmo+R3lIFqzkzAUtG0w4jYG3WmCBVArxFawi0FuLyhU4rIj45N3QwTVWehciwUuFYe89oDRe6hrzScHqScf/5H7wr3tfvH9rzZmQKZW5kc3RyZWFtCmVuZG9iagoyNCAwIG9iago8PCAvQkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMzcKL1N1YnR5cGUgL0Zvcm0gL1R5cGUgL1hPYmplY3QgPj4Kc3RyZWFtCnicPVG7ccUwDOs9BUbgR/xonneXKtm/DSg5KXiAKREE5Kcs0YWfZ4jg+1nu/8gDkq1QbYQnNBWRDdPA50kRWG6kJtxe3OeEbJUj9uJcIMIQ7TwJaaQLFjsZC94XP4+rHmasuWH8vjOafVR01VEdvHsO42ZNP06U3evNrI5bm/t0764Th2tIJp/3H5yUSqeXLIM6S7iwNpoa1uO8KMZYzDj+J6qwTbK2owrB0iVIKtCAGEoSxoDFLf4iJ1oOC9qbG2nrnclOqjSKhhejDN6g9UY4inSRfJhrK4OxqZg2vvnkJTfo+2e/n69fA2ta6wplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNjQgPj4Kc3RyZWFtCnicMzM0VDBQ0DUCEmaGJgrmRpYKKYZcQD6IlcsFE8sBs8xMzIAsY1NTJJYBkDYyNYPTEBmgAXAGRH8aAClPFE4KZW5kc3RyZWFtCmVuZG9iagoyNiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMwNCA+PgpzdHJlYW0KeJw9kjuSwzAMQ3udghfIjPiT5PNkJ5X3/u0+MslWgEmJACgvdZmypjwgaSYJ/9Hh4WI75XfYns3MwLVELxPLKc+hK8TcRfmymY26sjrFqsMwnVv0qJyLhk2TmucqSxm3C57DtYnnln3EDzc0qAd1jUvCDd3VaFkKzXB1/zu9R9l3NTwXm1Tq1BePF1EV5vkhT6KH6UrifDwoIVx7MEYWEuRT0UCOs1yt8l5C9g63GrLCQWpJ57MnPNh1ek8ubhfNEA9kuVT4TlHs7dAzvuxKCT0StuFY7n07mrHpGps47H7vRtbKjK5oIX7IVyfrJWDcUyZFEmROtlhui9We7qEopnOGcxkg6tmKhlLmYlerfww7bywv2SzIlMwLMkanTZ44eMh+jZr0eZXneP0BbPNzOwplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNTQgPj4Kc3RyZWFtCnicMzY2VzBQMDQyV9A1MjZVMDI0UDA3M1FIMeSCMXPBLLBsDhdcIYQJks+Bq8zhSgMATJAPFQplbmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjMwID4+CnN0cmVhbQp4nDVRSW7DMAy86xXzgQDiLr/HQU/t/68d0glgYGhLnM0RGxsReInBz0HkxlvWjJr4m8ld8bs8FR4Jt4InUQRehnvZCS5vGJf9OMx88F5aOZMaTzIgF9n08ETIYJdA6MDsGtRhm2kn+oaEz45INRtZTl9L0EurEChP2X6nC0q0rerP7bMutO1rTzjZ7aknlU8gnluyApeNV0wWYxn0ROUuxfRBqrOFnoTyonwOsvmoIRJdopyBJwYHo0A7sOe2n4lXhaB1dZ+2jaEaKR1P/zY0NUki5BMlnNnSuFv4/p57/fwDplRTnwplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjI3ID4+CnN0cmVhbQp4nDVPO7IDIQzrOYUukBmMbWDPs5lUL/dvn2SyDRL+SPL0REcmXubICKzZ8bYWGYgZ+BZT8a897cOE6j24hwjl4kKYYSScNeu4m6fjxb9d5TPWwbsNvmKWFwS2MJP1lcWZy3bBWBoncU6yG2PXRGxjXevpFNYRTCgDIZ3tMCXIHBUpfbKjjDk6TuSJ52KqxS6/72F9waYxosIcVwVP0GRQlj3vJqAdF/Tf1Y3fSTSLXgIykWBhnSTmzllO+NVrR8dRiyIxJ6QZ5DIR0pyuYgqhCcU6OwoqFQWX6nPK3T7/aF1bTQplbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ1ID4+CnN0cmVhbQp4nEVQu41DMQzrPQUXCGD9LHued0iV2789SkZwhSFaP5JaEpiIwEsMsZRv4kdGQT0LvxeF4jPEzxeFQc6EpECc9RkQmXiG2kZu6HZwzrzDM4w5AhfFWnCm05n2XNjknAcnEM5tlPGMQrpJVBVxVJ9xTPGqss+N14GltWyz05HsIY2ES0klJpd+Uyr/tClbKujaRROwSOSBk0004Sw/Q5JizKCUUfcwtY70cbKRR3XQydmcOS2Z2e6n7Ux8D1gmmVHlKZ3nMj4nqfNcTn3usx3R5KKlVfuc/d6RlvIitduh1elXJVGZjdWnkLg8/4yf8f4DjqBZPgplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ3ID4+CnN0cmVhbQp4nE1Ru21EMQzr3xRc4ADra3meC1Jd9m9DyQiQwiChLymnJRb2xksM4QdbD77kkVVDfx4/MewzLD3J5NQ/5rnJVBS+FaqbmFAXYuH9aAS8FnQvIivKB9+PZQxzzvfgoxCXYCY0YKxvSSYX1bwzZMKJoY7DQZtUGHdNFCyuFc0zyO1WN7I6syBseCUT4sYARATZF5DNYKOMsZWQxXIeqAqSBVpg1+kbUYuCK5TWCXSi1sS6zOCr5/Z2N0Mv8uCounh9DOtLsMLopXssfK5CH8z0TDt3SSO98KYTEWYPBVKZnZGVOj1ifbdA/59lK/j7yc/z/QsVKFwqCmVuZHN0cmVhbQplbmRvYmoKMzIgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA5MCA+PgpzdHJlYW0KeJxNjUESwCAIA++8Ik9QRND/dHrS/1+r1A69wE4CiRZFgvQ1aksw7rgyFWtQKZiUl8BVMFwL2u6iyv4ySUydhtN7twODsvFxg9JJ+/ZxegCr/XoG3Q/SHCJYCmVuZHN0cmVhbQplbmRvYmoKMzMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNjMgPj4Kc3RyZWFtCnicRZC5dQQxDENzVYESeIA66hk/R7P9pwtpvN5A+niEeIg9CcNyXcWF0Q0/3rbMNLyOMtyN9WXG+KixQE7QBxgiE1ejSfXtijNU6eHVYq6jolwvOiISzJLjq0AjfDqyx0Nb25l+Oq9/7CHvE/8qKuduYQEuqu5A+VIf8dSP2VHqmqGPKitrHmravwi7IpS2fVxOZZy6ewe0wmcrV/t9A6jnOoAKZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDY4ID4+CnN0cmVhbQp4nDMyt1AwULA0ARKGFiYK5mYGCimGXEC+qYm5Qi4XSAzEygGzDIC0JZyCiFtCNEGUglgQpWYmZhBJOAMilwYAybQV5QplbmRzdHJlYW0KZW5kb2JqCjM1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNDUgPj4Kc3RyZWFtCnicMzK3UDBQsDQBEoYWJgrmZgYKKYZclhBWLhdMLAfMAtGWcAoingYAn30MtQplbmRzdHJlYW0KZW5kb2JqCjM2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjU1ID4+CnN0cmVhbQp4nEWRS5IDIAhE956CI4D85DyZmlVy/+00mEw2dpeo/YRKI6YSLOcUeTD9yPLNZLbptRyrnY0CiiIUzOQq9FiB1Z0p4sy1RLX1sTJy3Okdg+IN566cVLK4UcY6qjoVOKbnyvqq7vy4LMq+I4cyBWzWOQ42cOW2YYwTo81Wd4f7RJCnk6mj4naQbPiDk8a+ytUVuE42++olGAeCfqEJTPJNoHWGQOPmKXpyCfbxcbvzQLC3vAmkbAjkyBCMDkG7Tq5/cev83v86w53n2gxXjnfxO0xru+MvMcmKuYBF7hTU8z0XresMHe/JmWNy031D51ywy91Bps/8H+v3D1CKZogKZW5kc3RyZWFtCmVuZG9iagozNyAwIG9iago8PCAvQkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzNwovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJzjMjQwUzA2NVXI5TI3NgKzcsAsI3MjIAski2BBZNMAAV8KCgplbmRzdHJlYW0KZW5kb2JqCjM4IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTYxID4+CnN0cmVhbQp4nEWQSxLDIAxD95xCR/BHBnyedLpK77+tIU2zgKexQAZ3JwSptQUT0QUvbUu6Cz5bCc7GeOg2bjUS5AR1gFak42iUUn25xWmVdPFoNnMrC60THWYOepSjGaAQOhXe7aLkcqbuzvlHcPVf9Uex7pzNxMBk5Q6EZvUp7nybHVFd3WR/0mNu1mt/FfaqsLSspeWE285dM6AE7qkc7f0FqXM6hAplbmRzdHJlYW0KZW5kb2JqCjM5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjE0ID4+CnN0cmVhbQp4nD1QuxFDMQjrPQUL5M587TfPy6XL/m0knKRCNkISlJpMyZSHOsqSrClPHT5LYoe8h+VuZDYlKkUvk7Al99AK8X2J5hT33dWWs0M0l2g5fgszKqobHdNLNppwKhO6oNzDM/oNbXQDVocesVsg0KRg17YgcscPGAzBmROLIgxKTQb/rXL3UtzvPRxvooiUdPCu+eX0y88tvE49jkS6vfmKa3GmOgpEcEZq8op0YcWyyEOk1QQ1PQNrtQCu3nr5N2hHdBmA7BOJ4zSlHEP/1rjH6wOHilL0CmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA4MCA+PgpzdHJlYW0KeJxFjLsNwDAIRHumYAR+JmafKJWzfxsgStxwT7p7uDoSMlPeYYaHBJ4MLIZT8QaZo2A1uEZSjZ3so7BuX3WB5npTq/X3BypPdnZxPc3LGfQKZW5kc3RyZWFtCmVuZG9iago0MSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE0NyA+PgpzdHJlYW0KeJw9T7kNAzEM6z0FFzjAeixb81yQ6rJ/G8pGUggiQPGRZUfHClxiApOOORIvaT/4aRqBWAY1R/SEimFY4G6SAg+DLEpXni1eDJHaQl1I+NYQ3q1MZKI8rxE7cCcXowc+VBtZHnpAO0QVWa5Jw1jVVl1qnbACHLLOwnU9zKoE5dEnaykfUFRCvXT/n3va+wsAby/rCmVuZHN0cmVhbQplbmRvYmoKNDIgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNDkgPj4Kc3RyZWFtCnicNY9LDgMhDEP3OYUvMFJ+hHAeqq6m9982YVoJCQvbL8EWg5GMS0xg7Jhj4SVUT60+JCOPukk5EKlQNwRPaEwMM2zSJfDKdN8ynlu8nFbqgk5I5OmsNhqijGZew9FTzgqb/svcJGplRpkDMutUtxOysmAF5gW1PPcz7qhc6ISHncqw6E4xotxmRhp+/9v0/gJ7MjBjCmVuZHN0cmVhbQplbmRvYmoKNDMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA0OSA+PgpzdHJlYW0KeJwzNrRQMFAwNDAHkkaGQJaRiUKKIRdIAMTM5YIJ5oBZBkAaojgHriaHKw0AxugNJgplbmRzdHJlYW0KZW5kb2JqCjQ0IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTU3ID4+CnN0cmVhbQp4nEWQuRFDMQhEc1VBCRKwCOqxx9F3/6kX+Uq0bwAth68lU6ofJyKm3Ndo9DB5Dp9NJVYs2Ca2kxpyGxZBSjGYeE4xq6O3oZmH1Ou4qKq4dWaV02nLysV/82hXM5M9wjXqJ/BN6PifPLSp6FugrwuUfUC1OJ1JUDF9r2KBo5x2fyKcGOA+GUeZKSNxYm4K7PcZAGa+V7jG4wXdATd5CmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzMzIgPj4Kc3RyZWFtCnicLVI5jiQxDMv9Cn5gAOvy8Z4eTNT7/3RJVQUFqmzLPORyw0QlfiyQ21Fr4tdGZqDC8K+rzIXvSNvIOohryEVcyZbCZ0Qs5DHEPMSC79v4GR75rMzJswfGL9n3GVbsqQnLQsaLM7TDKo7DKsixYOsiqnt4U6TDqSTY44v/PsVzF4IWviNowC/556sjeL6kRdo9Ztu0Ww+WaUeVFJaD7WnOy+RL6yxXx+P5INneFTtCaleAojB3xnkujjJtZURrYWeDpMbF9ubYj6UEXejGZaQ4AvmZKsIDSprMbKIg/sjpIacyEKau6Uont1EVd+rJXLO5vJ1JMlv3RYrNFM7rwpn1d5gyq807eZYTpU5F+Bl7tgQNnePq2WuZhUa3OcErJXw2dnpy8r2aWQ/JqUhIFdO6Ck6jyBRL2Jb4moqa0tTL8N+X9xl//wEz4nwBCmVuZHN0cmVhbQplbmRvYmoKNDYgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA2OCA+PgpzdHJlYW0KeJwzMzZTMFCwMAISpqaGCuZGlgophlxAPoiVywUTywGzzCzMgSwjC5CWHC5DC2MwbWJspGBmYgZkWSAxILrSAHL4EpEKZW5kc3RyZWFtCmVuZG9iago0NyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMxNyA+PgpzdHJlYW0KeJw1UktyQzEI279TcIHOmL99nnSyau6/rYQnK7AtQEIuL1nSS37UJdulw+RXH/clsUI+j+2azFLF9xazFM8tr0fPEbctCgRREz34MicVItTP1Og6eGGXPgOvEE4pFngHkwAGr+FfeJROg8A7GzLeEZORGhAkwZpLi01IlD1J/Cvl9aSVNHR+Jitz+XtyqRRqo8kIFSBYudgHpCspHiQTPYlIsnK9N1aI3pBXksdnJSYZEN0msU20wOPclbSEmZhCBeZYgNV0s7r6HExY47CE8SphFtWDTZ41qYRmtI5jZMN498JMiYWGwxJQm32VCaqXj9PcCSOmR0127cKyWzbvIUSj+TMslMHHKCQBh05jJArSsIARgTm9sIq95gs5FsCIZZ2aLAxtaCW7eo6FwNCcs6Vhxtee1/P+B0Vbe6MKZW5kc3RyZWFtCmVuZG9iago0OCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE3ID4+CnN0cmVhbQp4nDM2tFAwgMMUQy4AGpQC7AplbmRzdHJlYW0KZW5kb2JqCjQ5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzM4ID4+CnN0cmVhbQp4nDVSOa7dQAzrfQpdIIB2zZznBal+7t+GlF8KQ7RWipqOFpVp+WUhVS2TLr/tSW2JG/L3yQqJE5JXJdqlDJFQ+TyFVL9ny7y+1pwRIEuVCpOTksclC/4Ml94uHOdjaz+PI3c9emBVjIQSAcsUE6NrWTq7w5qN/DymAT/iEXKuWLccYxVIDbpx2hXvQ/N5yBogZpiWigpdVokWfkHxoEetffdYVFgg0e0cSXCMjVCRgHaB2kgMObMWu6gv+lmUmAl07Ysi7qLAEknMnGJdOvoPPnQsqL8248uvjkr6SCtrTNp3o0lpzCKTrpdFbzdvfT24QPMuyn9ezSBBU9YoaXzQqp1jKJoZZYV3HJoMNMcch8wTPIczEpT0fSh+X0smuiiRPw4NoX9fHqOMnAZvAXPRn7aKAxfx2WGvHGCF0sWa5H1AKhN6YPr/1/h5/vwDHLaAVAplbmRzdHJlYW0KZW5kb2JqCjUwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ4ID4+CnN0cmVhbQp4nC1ROZIDQQjL5xV6QnPT77HLkff/6QrKAYOGQyA6LXFQxk8Qlive8shVtOHvmRjBd8Gh38p1GxY5EBVI0hhUTahdvB69B3YcZgLzpDUsgxnrAz9jCjd6cXhMxtntdRk1BHvXa09mUDIrF3HJxAVTddjImcNPpowL7VzPDci5EdZlGKSblcaMhCNNIVJIoeomqTNBkASjq1GjjRzFfunLI51hVSNqDPtcS9vXcxPOGjQ7Fqs8OaVHV5zLycULKwf9vM3ARVQaqzwQEnC/20P9nOzkN97SubPF9Phec7K8MBVY8ea1G5BNtfg3L+L4PePr+fwDqKVbFgplbmRzdHJlYW0KZW5kb2JqCjUxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjEwID4+CnN0cmVhbQp4nDVQyw1DMQi7ZwoWqBQCgWSeVr11/2tt0DthEf9CWMiUCHmpyc4p6Us+OkwPti6/sSILrXUl7MqaIJ4r76GZsrHR2OJgcBomXoAWN2DoaY0aNXThgqYulUKBxSXwmXx1e+i+Txl4ahlydgQRQ8lgCWq6Fk1YtDyfkE4B4v9+w+4t5KGS88qeG/kbnO3wO7Nu4SdqdiLRchUy1LM0xxgIE0UePHlFpnDis9Z31TQS1GYLTpYBrk4/jA4AYCJeWYDsrkQ5S9KOpZ9vvMf3D0AAU7QKZW5kc3RyZWFtCmVuZG9iagoyMSAwIG9iago8PCAvQmFzZUZvbnQgL0RlamFWdVNhbnMgL0NoYXJQcm9jcyAyMiAwIFIKL0VuY29kaW5nIDw8Ci9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSA0MCAvcGFyZW5sZWZ0IC9wYXJlbnJpZ2h0IDQ2IC9wZXJpb2QgNDggL3plcm8gL29uZSAvdHdvIC90aHJlZQovZm91ciAvZml2ZSAvc2l4IC9zZXZlbiA2NiAvQiA4NCAvVCA5NyAvYSA5OSAvYyAvZCAvZSAxMDQgL2ggL2kgMTA4IC9sIC9tCi9uIC9vIDExNCAvciAvcyAxMjQgL2JhciBdCi9UeXBlIC9FbmNvZGluZyA+PgovRmlyc3RDaGFyIDAgL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udERlc2NyaXB0b3IgMjAgMCBSCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9MYXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMTkgMCBSID4+CmVuZG9iagoyMCAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE5hbWUgL0RlamFWdVNhbnMgL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjE5IDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9CIDIzIDAgUiAvVCAyNSAwIFIgL2EgMjYgMCBSIC9iYXIgMjcgMCBSIC9jIDI4IDAgUiAvZCAyOSAwIFIgL2UgMzAgMCBSCi9maXZlIDMxIDAgUiAvZm91ciAzMiAwIFIgL2ggMzMgMCBSIC9pIDM0IDAgUiAvbCAzNSAwIFIgL20gMzYgMCBSIC9uIDM4IDAgUgovbyAzOSAwIFIgL29uZSA0MCAwIFIgL3BhcmVubGVmdCA0MSAwIFIgL3BhcmVucmlnaHQgNDIgMCBSIC9wZXJpb2QgNDMgMCBSCi9yIDQ0IDAgUiAvcyA0NSAwIFIgL3NldmVuIDQ2IDAgUiAvc2l4IDQ3IDAgUiAvc3BhY2UgNDggMCBSIC90aHJlZSA0OSAwIFIKL3R3byA1MCAwIFIgL3plcm8gNTEgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAyMSAwIFIgL0YyIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDAuMyAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjMgPj4KL0EzIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0RlamFWdVNhbnMtT21lZ2EgMjQgMCBSIC9EZWphVnVTYW5zLW1pbnVzIDM3IDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDEwIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKNTIgMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDIwMDEyMTA5NTcyMCswMicwMCcpCi9DcmVhdG9yIChtYXRwbG90bGliIDMuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCAzLjEuMSkgPj4KZW5kb2JqCnhyZWYKMCA1MwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAxMzYwOCAwMDAwMCBuIAowMDAwMDEzMzEwIDAwMDAwIG4gCjAwMDAwMTMzNTMgMDAwMDAgbiAKMDAwMDAxMzQ5NSAwMDAwMCBuIAowMDAwMDEzNTE2IDAwMDAwIG4gCjAwMDAwMTM1MzcgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk3IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMTU2MCAwMDAwMCBuIAowMDAwMDAyOTAzIDAwMDAwIG4gCjAwMDAwMDI2OTUgMDAwMDAgbiAKMDAwMDAwMjM2NiAwMDAwMCBuIAowMDAwMDAzOTU2IDAwMDAwIG4gCjAwMDAwMDE1ODEgMDAwMDAgbiAKMDAwMDAwMTc0MSAwMDAwMCBuIAowMDAwMDAyMTQxIDAwMDAwIG4gCjAwMDAwMTE5MTQgMDAwMDAgbiAKMDAwMDAxMTcxNCAwMDAwMCBuIAowMDAwMDExMjQ5IDAwMDAwIG4gCjAwMDAwMTI5NjcgMDAwMDAgbiAKMDAwMDAwNDAwOCAwMDAwMCBuIAowMDAwMDA0MzQwIDAwMDAwIG4gCjAwMDAwMDQ3MTEgMDAwMDAgbiAKMDAwMDAwNDg0NyAwMDAwMCBuIAowMDAwMDA1MjI0IDAwMDAwIG4gCjAwMDAwMDUzNTAgMDAwMDAgbiAKMDAwMDAwNTY1MyAwMDAwMCBuIAowMDAwMDA1OTUzIDAwMDAwIG4gCjAwMDAwMDYyNzEgMDAwMDAgbiAKMDAwMDAwNjU5MSAwMDAwMCBuIAowMDAwMDA2NzUzIDAwMDAwIG4gCjAwMDAwMDY5ODkgMDAwMDAgbiAKMDAwMDAwNzEyOSAwMDAwMCBuIAowMDAwMDA3MjQ2IDAwMDAwIG4gCjAwMDAwMDc1NzQgMDAwMDAgbiAKMDAwMDAwNzc0NCAwMDAwMCBuIAowMDAwMDA3OTc4IDAwMDAwIG4gCjAwMDAwMDgyNjUgMDAwMDAgbiAKMDAwMDAwODQxNyAwMDAwMCBuIAowMDAwMDA4NjM3IDAwMDAwIG4gCjAwMDAwMDg4NTkgMDAwMDAgbiAKMDAwMDAwODk4MCAwMDAwMCBuIAowMDAwMDA5MjEwIDAwMDAwIG4gCjAwMDAwMDk2MTUgMDAwMDAgbiAKMDAwMDAwOTc1NSAwMDAwMCBuIAowMDAwMDEwMTQ1IDAwMDAwIG4gCjAwMDAwMTAyMzQgMDAwMDAgbiAKMDAwMDAxMDY0NSAwMDAwMCBuIAowMDAwMDEwOTY2IDAwMDAwIG4gCjAwMDAwMTM2NjggMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA1MiAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNTMgPj4Kc3RhcnR4cmVmCjEzODIyCiUlRU9GCg==\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.patches as mpatches\n", "import scipy.signal as sig\n", "\n", "%matplotlib inline\n", "\n", "\n", "def plot_tolerance_scheme(Omp, Oms, d_p, a_s):\n", " Omp = Omp * np.pi\n", " Oms = Oms * np.pi\n", "\n", " p = [\n", " [0, -d_p],\n", " [Omp, -d_p],\n", " [Omp, -300],\n", " [np.pi, -300],\n", " [np.pi, a_s],\n", " [Oms, a_s],\n", " [Oms, d_p],\n", " [0, d_p],\n", " ]\n", " polygon = mpatches.Polygon(p, closed=True, facecolor=\"r\", alpha=0.3)\n", " plt.gca().add_patch(polygon)\n", "\n", "\n", "Omp = 0.3 # normalized corner frequency of pass-band\n", "Oms = 0.3 + 0.05 # normalized corner frequency of stop-band\n", "d_p = 1.5 # one-sided pass-band ripple in dB\n", "a_s = -60 # stop-band attenuation in dB\n", "\n", "plt.figure(figsize=(10, 5))\n", "plot_tolerance_scheme(Omp, Oms, d_p, a_s)\n", "plt.title(\"Tolerance scheme\")\n", "plt.xlabel(r\"$\\Omega$\")\n", "plt.ylabel(r\"$|H(e^{j \\Omega})|$ in dB\")\n", "plt.axis([0, np.pi, -70, 3])\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* What corner frequencies $f_\\text{p}$ and $f_\\text{s}$ result for a sampling frequency of $f_\\text{s} = 48$ kHz?\n", "\n", "Solution: It follows that $f_\\text{p} = \\frac{\\Omega_\\text{p}}{\\pi} \\cdot \\frac{f_\\text{s}}{2} = 8$ kHz and $f_\\text{s} = \\frac{\\Omega_\\text{s}}{\\pi} \\cdot \\frac{f_\\text{s}}{2} \\approx 8.4$ kHz, since the normalized frequency $\\Omega = \\pi$ corresponds to $\\frac{f_\\text{s}}{2}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The comparison of non-recursive and recursive filters depends heavily on the chosen filter design algorithm. For the design of the non-recursive filter a technique is used which bases on numerical optimization of the filter coefficients with respect to the desired response. The [Remez algorithm](https://en.wikipedia.org/wiki/Remez_algorithm), as implemented in `scipy.signal.remez`, is used for this purpose. The parameters for the algorithm are the corner frequencies of the pass- and stop-band, as well as the desired attenuation in the stop-band. For the recursive filter, a [Chebyshev type II](https://en.wikipedia.org/wiki/Chebyshev_filter) design is used. Here the parameters are the corner frequency and attenuation of the stop-band. The order of both filters has been chosen manually to fit the given tolerance scheme." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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MCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAy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MgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTkgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjIgMCBvYmoKPDwgL0IgMjMgMCBSIC9NIDI0IDAgUiAvTiAyNSAwIFIgL2EgMjcgMCBSIC9iYXIgMjggMCBSIC9jIDI5IDAgUiAvZCAzMCAwIFIKL2UgMzEgMCBSIC9lcXVhbCAzMiAwIFIgL2ZpdmUgMzMgMCBSIC9mb3VyIDM0IDAgUiAvZyAzNSAwIFIgL2h5cGhlbiAzNiAwIFIKL2kgMzcgMCBSIC9uIDM5IDAgUiAvbyA0MCAwIFIgL29uZSA0MSAwIFIgL3AgNDIgMCBSIC9wYXJlbmxlZnQgNDMgMCBSCi9wYXJlbnJpZ2h0IDQ0IDAgUiAvcGVyaW9kIDQ1IDAgUiAvciA0NiAwIFIgL3MgNDcgMCBSIC9zZXZlbiA0OCAwIFIKL3NpeCA0OSAwIFIgL3NwYWNlIDUwIDAgUiAvdCA1MSAwIFIgL3RocmVlIDUyIDAgUiAvdHdvIDUzIDAgUiAvdSA1NCAwIFIKL3YgNTUgMCBSIC96ZXJvIDU2IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMjEgMCBSIC9GMiAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAwLjMgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC4zID4+Ci9BMyA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BNCA8PCAvQ0EgMC44IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDAuOCA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRGVqYVZ1U2Fucy1PbWVnYSAyNiAwIFIgL0RlamFWdVNhbnMtbWludXMgMzggMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago1NyAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjAwMTIxMDk1NzIwKzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMS4xKSA+PgplbmRvYmoKeHJlZgowIDU4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDI0NDM3IDAwMDAwIG4gCjAwMDAwMjQwOTYgMDAwMDAgbiAKMDAwMDAyNDEzOSAwMDAwMCBuIAowMDAwMDI0MzI0IDAwMDAwIG4gCjAwMDAwMjQzNDUgMDAwMDAgbiAKMDAwMDAyNDM2NiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTcgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDExMTg3IDAwMDAwIG4gCjAwMDAwMTI1MzEgMDAwMDAgbiAKMDAwMDAxMjMyMyAwMDAwMCBuIAowMDAwMDExOTk0IDAwMDAwIG4gCjAwMDAwMTM1ODQgMDAwMDAgbiAKMDAwMDAxMTIwOSAwMDAwMCBuIAowMDAwMDExMzY5IDAwMDAwIG4gCjAwMDAwMTE3NjkgMDAwMDAgbiAKMDAwMDAyMjY0MSAwMDAwMCBuIAowMDAwMDIyNDQxIDAwMDAwIG4gCjAwMDAwMjE5NDUgMDAwMDAgbiAKMDAwMDAyMzY5NCAwMDAwMCBuIAowMDAwMDEzNjM2IDAwMDAwIG4gCjAwMDAwMTM5NjggMDAwMDAgbiAKMDAwMDAxNDEyNyAwMDAwMCBuIAowMDAwMDE0Mjc0IDAwMDAwIG4gCjAwMDAwMTQ2NDUgMDAwMDAgbiAKMDAwMDAxNTAyMiAwMDAwMCBuIAowMDAwMDE1MTQ4IDAwMDAwIG4gCjAwMDAwMTU0NTEgMDAwMDAgbiAKMDAwMDAxNTc1MSAwMDAwMCBuIAowMDAwMDE2MDY5IDAwMDAwIG4gCjAwMDAwMTYyMTIgMDAwMDAgbiAKMDAwMDAxNjUzMiAwMDAwMCBuIAowMDAwMDE2Njk0IDAwMDAwIG4gCjAwMDAwMTcxMDUgMDAwMDAgbiAKMDAwMDAxNzIyOSAwMDAwMCBuIAowMDAwMDE3MzY5IDAwMDAwIG4gCjAwMDAwMTc1MzkgMDAwMDAgbiAKMDAwMDAxNzc3MyAwMDAwMCBuIAowMDAwMDE4MDYwIDAwMDAwIG4gCjAwMDAwMTgyMTIgMDAwMDAgbiAKMDAwMDAxODUyMSAwMDAwMCBuIAowMDAwMDE4NzQxIDAwMDAwIG4gCjAwMDAwMTg5NjMgMDAwMDAgbiAKMDAwMDAxOTA4NCAwMDAwMCBuIAowMDAwMDE5MzE0IDAwMDAwIG4gCjAwMDAwMTk3MTkgMDAwMDAgbiAKMDAwMDAxOTg1OSAwMDAwMCBuIAowMDAwMDIwMjQ5IDAwMDAwIG4gCjAwMDAwMjAzMzggMDAwMDAgbiAKMDAwMDAyMDU0MiAwMDAwMCBuIAowMDAwMDIwOTUzIDAwMDAwIG4gCjAwMDAwMjEyNzQgMDAwMDAgbiAKMDAwMDAyMTUxOCAwMDAwMCBuIAowMDAwMDIxNjYyIDAwMDAwIG4gCjAwMDAwMjQ0OTcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyA1NyAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgNTggPj4Kc3RhcnR4cmVmCjI0NjUxCiUlRU9GCg==\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/pdf": "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TGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMTIgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udE5hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTM1MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAz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MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMCAwIG9iago8PCAvTiAyMSAwIFIgL1AgMjMgMCBSIC9hIDI0IDAgUiAvYyAyNSAwIFIgL2QgMjYgMCBSIC9lIDI3IDAgUgovZXF1YWwgMjggMCBSIC9maXZlIDI5IDAgUiAvaCAzMCAwIFIgL2h5cGhlbiAzMSAwIFIgL2kgMzIgMCBSIC9uIDM0IDAgUgovbyAzNSAwIFIgL29uZSAzNiAwIFIgL3AgMzcgMCBSIC9wYXJlbmxlZnQgMzggMCBSIC9wYXJlbnJpZ2h0IDM5IDAgUgovcGVyaW9kIDQwIDAgUiAvciA0MSAwIFIgL3MgNDIgMCBSIC9zcGFjZSA0MyAwIFIgL3RocmVlIDQ0IDAgUiAvdHdvIDQ1IDAgUgovdSA0NiAwIFIgL3YgNDcgMCBSIC96ZXJvIDQ4IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjEgMTkgMCBSIC9GMiAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EzIDw8IC9DQSAwLjggL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC44ID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9EZWphVnVTYW5zLU9ibGlxdWUtcGhpIDE2IDAgUiAvRGVqYVZ1U2Fucy1PbWVnYSAyMiAwIFIKL0RlamFWdVNhbnMtbWludXMgMzMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago0OSAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjAwMTIxMDk1NzIxKzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMS4xKSA+PgplbmRvYmoKeHJlZgowIDUwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDEzMzEzIDAwMDAwIG4gCjAwMDAwMTI5ODQgMDAwMDAgbiAKMDAwMDAxMzAyNyAwMDAwMCBuIAowMDAwMDEzMTY5IDAwMDAwIG4gCjAwMDAwMTMxOTAgMDAwMDAgbiAKMDAwMDAxMzIxMSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTggMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAyMDQ3IDAwMDAwIG4gCjAwMDAwMDMwMDAgMDAwMDAgbiAKMDAwMDAwMjc5MiAwMDAwMCBuIAowMDAwMDAyNDgzIDAwMDAwIG4gCjAwMDAwMDQwNTMgMDAwMDAgbiAKMDAwMDAwMjA2OCAwMDAwMCBuIAowMDAwMDExNjAwIDAwMDAwIG4gCjAwMDAwMTE0MDAgMDAwMDAgbiAKMDAwMDAxMDkzNCAwMDAwMCBuIAowMDAwMDEyNjUzIDAwMDAwIG4gCjAwMDAwMDQwNzUgMDAwMDAgbiAKMDAwMDAwNDIyMiAwMDAwMCBuIAowMDAwMDA0NTkzIDAwMDAwIG4gCjAwMDAwMDQ4MzEgMDAwMDAgbiAKMDAwMDAwNTIwOCAwMDAwMCBuIAowMDAwMDA1NTExIDAwMDAwIG4gCjAwMDAwMDU4MTEgMDAwMDAgbiAKMDAwMDAwNjEyOSAwMDAwMCBuIAowMDAwMDA2MjcyIDAwMDAwIG4gCjAwMDAwMDY1OTIgMDAwMDAgbiAKMDAwMDAwNjgyOCAwMDAwMCBuIAowMDAwMDA2OTUyIDAwMDAwIG4gCjAwMDAwMDcwOTIgMDAwMDAgbiAKMDAwMDAwNzI2MiAwMDAwMCBuIAowMDAwMDA3NDk2IDAwMDAwIG4gCjAwMDAwMDc3ODMgMDAwMDAgbiAKMDAwMDAwNzkzNSAwMDAwMCBuIAowMDAwMDA4MjQ0IDAwMDAwIG4gCjAwMDAwMDg0NjQgMDAwMDAgbiAKMDAwMDAwODY4NiAwMDAwMCBuIAowMDAwMDA4ODA3IDAwMDAwIG4gCjAwMDAwMDkwMzcgMDAwMDAgbiAKMDAwMDAwOTQ0MiAwMDAwMCBuIAowMDAwMDA5NTMxIDAwMDAwIG4gCjAwMDAwMDk5NDIgMDAwMDAgbiAKMDAwMDAxMDI2MyAwMDAwMCBuIAowMDAwMDEwNTA3IDAwMDAwIG4gCjAwMDAwMTA2NTEgMDAwMDAgbiAKMDAwMDAxMzM3MyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDQ5IDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSA1MCA+PgpzdGFydHhyZWYKMTM1MjcKJSVFT0YK\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = 152 # length of non-recursive filter\n", "M = 13 # order of recursive filter\n", "\n", "# design of non-recursive filter\n", "h = sig.remez(\n", " N, [0, Omp / 2, Oms / 2, 1 / 2], [1, 10 ** ((a_s - 5) / 20)], weight=[1, 1]\n", ")\n", "\n", "# design of recursive filter\n", "b, a = sig.cheby2(M, -a_s, Oms)\n", "\n", "# compute frequency response of filter\n", "Om, Hn = sig.freqz(h, worN=8192)\n", "Om, Hr = sig.freqz(b, a, worN=8192)\n", "\n", "# plot frequency response\n", "plt.figure(figsize=(10, 5))\n", "plt.plot(Om, 20 * np.log10(np.abs(Hn)), \"b-\", label=r\"non-recursive N=%d\" % N)\n", "plt.plot(Om, 20 * np.log10(np.abs(Hr)), \"g-\", label=r\"recursive N=%d\" % M)\n", "plot_tolerance_scheme(Omp, Oms, d_p, a_s)\n", "plt.title(\"Magnitude response\")\n", "plt.xlabel(r\"$\\Omega$\")\n", "plt.ylabel(r\"$|H(e^{j \\Omega})|$ in dB\")\n", "plt.legend()\n", "plt.axis([0, np.pi, -70, 3])\n", "plt.grid()\n", "# plot phase\n", "plt.figure(figsize=(10, 5))\n", "plt.plot(Om, np.unwrap(np.angle(Hn)), label=r\"non-recursive N=%d\" % N)\n", "plt.plot(Om, np.unwrap(np.angle(Hr)), label=r\"recursive N=%d\" % M)\n", "plt.title(\"Phase response\")\n", "plt.xlabel(r\"$\\Omega$\")\n", "plt.ylabel(r\"$\\varphi(\\Omega)$ in rad\")\n", "plt.legend(loc=3)\n", "plt.xlim([0, np.pi])\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercises**\n", "\n", "* How do both designs differ in terms of their magnitude and phase responses?\n", "* Calculate the number of multiplications and additions required to realize the non-recursive filter\n", "* Calculate the number of multiplications and additions required to realize the recursive filter in [transposed direct form II](../recursive_filters/direct_forms.ipynb#Transposed-Direct-Form-II)\n", "* Decrease the corner frequencies and adapt the order of the filters to match the tolerance scheme\n", "\n", "Solution: Inspection of the magnitude response $|H(e^{j \\Omega})|$ for the designed non-recursive and recursive filters reveals that both fulfill the given tolerance scheme. An obvious difference between both filters is the structure of the magnitude response in the stop-band $\\Omega > \\Omega_\\text{s}$. While the magnitude of the non-recursive filter shows a high number of fluctuations below the desired attenuation, these are much less for the recursive filter. This is a consequence of the different orders of the filters and their respective number of zeros. The non-recursive filter requires $N$ multiplications and $N-1$ additions to compute one output sample, hence 152 multiplications and 151 additions. The recursive filter in transposed direct form II is realized by 7 SOS. Each of the SOS requires 5 multiplications and 4 additions per output sample, resulting in a total of 35 multiplications and 28 additions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to evaluate the computational complexity of both filters, the execution time is measured when filtering a signal $x[k]$ of length $L=10^5$ samples. The non-recursive filter is realized by direct convolution, the recursive filter in transposed direct form II using the respective Python functions. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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IC9wZXJpb2QgNDggL3plcm8gL29uZSAvdHdvIC90aHJlZSA1MyAvZml2ZSA2OSAvRSA5OQovYyAxMDEgL2UgMTA1IC9pIDEwOSAvbSAvbiAvbyAxMTQgL3IgL3MgL3QgL3UgL3YgMTIwIC94IF0KL1R5cGUgL0VuY29kaW5nID4+Ci9GaXJzdENoYXIgMCAvRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250RGVzY3JpcHRvciAxMyAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NSAvTmFtZSAvRGVqYVZ1U2FucwovU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxMiAwIFIgPj4KZW5kb2JqCjEzIDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMTM0MiAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTUgMCBvYmoKPDwgL0UgMTYgMCBSIC9jIDE3IDAgUiAvZSAxOCAwIFIgL2ZpdmUgMTkgMCBSIC9oeXBoZW4gMjAgMCBSIC9pIDIxIDAgUgovbSAyMiAwIFIgL24gMjMgMCBSIC9vIDI0IDAgUiAvb25lIDI1IDAgUiAvcGVyaW9kIDI2IDAgUiAvciAyNyAwIFIKL3MgMjggMCBSIC9zcGFjZSAyOSAwIFIgL3QgMzAgMCBSIC90aHJlZSAzMSAwIFIgL3R3byAzMiAwIFIgL3UgMzMgMCBSCi92IDM0IDAgUiAveCAzNSAwIFIgL3plcm8gMzYgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMCAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjM3IDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMDAxMjEwOTU3MjUrMDInMDAnKQovQ3JlYXRvciAobWF0cGxvdGxpYiAzLjEuMSwgaHR0cDovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKG1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgMy4xLjEpID4+CmVuZG9iagp4cmVmCjAgMzgKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDgzMjkgMDAwMDAgbiAKMDAwMDAwODEzNSAwMDAwMCBuIAowMDAwMDA4MTY3IDAwMDAwIG4gCjAwMDAwMDgyNjYgMDAwMDAgbiAKMDAwMDAwODI4NyAwMDAwMCBuIAowMDAwMDA4MzA4IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5OSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDEyMTIgMDAwMDAgbiAKMDAwMDAwNjgyMiAwMDAwMCBuIAowMDAwMDA2NjIyIDAwMDAwIG4gCjAwMDAwMDYyMDAgMDAwMDAgbiAKMDAwMDAwNzg3NSAwMDAwMCBuIAowMDAwMDAxMjMyIDAwMDAwIG4gCjAwMDAwMDEzODMgMDAwMDAgbiAKMDAwMDAwMTY4NiAwMDAwMCBuIAowMDAwMDAyMDA0IDAwMDAwIG4gCjAwMDAwMDIzMjQgMDAwMDAgbiAKMDAwMDAwMjQ0OCAwMDAwMCBuIAowMDAwMDAyNTg4IDAwMDAwIG4gCjAwMDAwMDI5MTYgMDAwMDAgbiAKMDAwMDAwMzE1MCAwMDAwMCBuIAowMDAwMDAzNDM3IDAwMDAwIG4gCjAwMDAwMDM1ODkgMDAwMDAgbiAKMDAwMDAwMzcxMCAwMDAwMCBuIAowMDAwMDAzOTQwIDAwMDAwIG4gCjAwMDAwMDQzNDUgMDAwMDAgbiAKMDAwMDAwNDQzNCAwMDAwMCBuIAowMDAwMDA0NjM4IDAwMDAwIG4gCjAwMDAwMDUwNDkgMDAwMDAgbiAKMDAwMDAwNTM3MCAwMDAwMCBuIAowMDAwMDA1NjE0IDAwMDAwIG4gCjAwMDAwMDU3NTggMDAwMDAgbiAKMDAwMDAwNTkxNyAwMDAwMCBuIAowMDAwMDA4Mzg5IDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gMzcgMCBSIC9Sb290IDEgMCBSIC9TaXplIDM4ID4+CnN0YXJ0eHJlZgo4NTQzCiUlRU9GCg==\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import timeit\n", "\n", "reps = 1000 # number of repetitions for timeit\n", "\n", "# setup environment for timeit\n", "tsetup = \"import numpy as np; import scipy.signal as sig; from __main__ import h, a, b; x=np.random.normal(size=int(1e5))\"\n", "# non-recursive filter\n", "tn = timeit.timeit('np.convolve(x, h, mode=\"full\")', setup=tsetup, number=reps)\n", "# recursive filter\n", "tr = timeit.timeit(\"sig.lfilter(b, a, x)\", setup=tsetup, number=reps)\n", "\n", "# show the results\n", "plt.figure(figsize=(5, 3))\n", "plt.bar(1, tn / reps * 1000)\n", "plt.bar(2, tr / reps * 1000)\n", "plt.title(\"Execution time\")\n", "plt.xticks([1, 2], (\"non-recursive\", \"recursive\"))\n", "plt.ylabel(\"time in ms\")\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercises**\n", "\n", "* Do the execution times correspond with the number of algorithmic operations calculated in the previous exercise?\n", "* Estimate the computational load for the filtering of a signal with a sampling rate of 48 kHz\n", "* How could the execution time of the non-recursive filter be decreased?\n", "* Finally, would you prefer the non-recursive or the recursive design for a practical implementation? Consider the numerical complexity, as well as numerical aspects in your decision.\n", "\n", "Solution: On general purpose processors, the numerical complexity is mainly determined by the number of multiplications. The ratio of multiplications per output sample for the non-recursive and the recursive filter is given as $\\frac{152}{35} \\approx 4.3$, the ratio of execution times in above example as $\\frac{4.8 \\mathrm{ ms}}{1.5 \\mathrm{ ms}} \\approx 3.2$. The difference between both can be related to the implementation of both methods and their execution on the given hardware. Note that the execution times and their ratio may differ for other environments. The number of samples used in the measurement above relates to a signal with $\\frac{10^5}{f_s} \\approx 2$ seconds length. The computational load for the non-recursive filter can hence be estimated as $\\frac{4.8 \\mathrm{ ms}}{2000 \\mathrm{ ms}} \\approx 2.4 \\cdot 10^{-6}$. The execution time for the non-recursive filter may be decreased by using a fast convolution algorithm." ] }, { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "**Copyright**\n", "\n", "This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples*." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.5" } }, "nbformat": 4, "nbformat_minor": 1 }