Skip to content

Instantly share code, notes, and snippets.

@suikan4github
Last active June 30, 2023 05:15
Show Gist options
  • Save suikan4github/4769d85469b7c1a71d1729467b5b0f22 to your computer and use it in GitHub Desktop.
Save suikan4github/4769d85469b7c1a71d1729467b5b0f22 to your computer and use it in GitHub Desktop.
信号処理基礎:窓関数法によるFIRフィルタの特性比較
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 窓関数法によるFIRフィルタの特性比較\n",
"2017年3月6日 by [酔漢](http://bfin.sakura.ne.jp/?p=871)\n",
"\n",
"窓関数法は、比較的単純にFIRフィルタを設計することができる方法である。\n",
"\n",
"理想レンガ壁特性をもつLPFのインパルス応答は、sinc()関数になる。この関数は $$ sinc(x) = sin(x)/x $$ で定義される関数で、比較的容易に値を計算できる。しかしながら、xの範囲が±無限大に広がるため、インパルス応答の長さが無限大になり、実装できない。\n",
"\n",
"このsinc()関数に窓関数を適用することでインパルス応答を有限長に抑えるのが窓関数法によるフィルタ設計である。\n",
"\n",
"インパルス応答を有限長に制限する結果、特性は理想レンガ壁特性からずれる。具体的には、カットオフ周波数付近でのゲインのダレ、阻止域での減衰量の低下があげられる。\n",
"\n",
"以下では代表的な窓関数を使う設計の特性を紹介する。なお、この直後のセルの終わり付近で、シミュレーションのパラメタを設定している。フィルタの特性を変更して観察したい場合には、その部分を編集すれば良い。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import struct\n",
"import wave\n",
"import numpy as np\n",
"import scipy.signal\n",
"from pylab import *\n",
"import matplotlib.pylab as plt\n",
"\n",
"\n",
"def show_freq_response(b, fs, fc, ntaps):\n",
" b = list(b)\n",
"\n",
" N = 1024 # FFTのサンプル数\n",
"\n",
" # 最低でもN点ないとFFTができないので0.0を追加\n",
" for i in range(N):\n",
" b.append(0.0)\n",
"\n",
" # フィルタ係数の周波数特性を計算する\n",
" B = np.fft.fft(b[0:N])\n",
" freqList = np.fft.fftfreq(N, d=1.0/fs)\n",
" response = [20*log10(np.sqrt(c.real ** 2 + c.imag ** 2)) for c in B]\n",
"\n",
"\n",
" # フィルタの周波数特性をプロットする\n",
" plt.subplot(121)\n",
" n = len(freqList) // 2\n",
" plt.xscale(\"log\")\n",
" plt.plot(freqList[:n], response[:n], linestyle='-', label = str(ntaps))\n",
" # 0to fnyq Hz, -100 to 5dB\n",
" plt.axis([0, fs/2, -100, 5])\n",
" plt.xlabel(\"frequency [Hz]\")\n",
" plt.ylabel(\"Gain[dB]\")\n",
" plt.legend()\n",
" \n",
" # フィルタの周波数特性(詳細)をプロットする\n",
" plt.subplot(122)\n",
" n = len(freqList) // 2\n",
" plt.xscale(\"log\")\n",
" plt.plot(freqList[:n], response[:n], linestyle='-', label = str(ntaps))\n",
" # around Fc, -50 to 2.5dB\n",
" plt.axis([fc/2, fc*2, -50, 2.5])\n",
" plt.xlabel(\"frequency [Hz]\")\n",
" plt.ylabel(\"Gain[dB]\")\n",
" plt.legend()\n",
" \n",
" \n",
"if __name__ == '__main__':\n",
" fs = 48000 # [Hz]\n",
" fc = 3000 # [Hz]\n",
" fnyq = fs / 2.0 # ナイキスト周波数[Hz]\n",
"\n",
" # シミュレーションにかけるタップ数のリスト。タップ数は1024以下にすること\n",
" tapslist = [63, 127, 511]\n",
"\n",
" # ナイキスト周波数が1になるように正規化\n",
" nfc = fc / fnyq # 正規化カットオフ周波数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 窓関数ごとの特性\n",
"Scipy.signalで使える窓関数に関しては、[Scipy.signal.get_window](\"https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.get_window.html\")を参照\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ハミング窓\n",
"FFTに使用する際、周波数分解能はハン窓より良いがダイナミックレンジが悪いとされる。FIRフィルタに使うと、帯域外のフロアレベルが高めになる。\n",
"$$ w(x) = 0.54 - 0.46 cos 2 \\pi x $$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\nptMkGBf/AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f11f81926a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" for numtaps in tapslist:\n",
" # 窓関数法によるフィルタの設計\n",
" b = scipy.signal.firwin(numtaps, nfc, None, 'hamming' )\n",
" # フィルタ係数とフィルタされた信号のFFTを見る\n",
" show_freq_response(b, fs, fc, numtaps)\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ハン窓\n",
"区間の両端で連続な窓関数。比較的良い特性を持つ上に、区間のハーフ・オーバーラップ時に窓関数の和が全区間で1になるという性質を持っているため、FFTによるフィルタを作るときなど好んで使われる。\n",
"\n",
"FIRフィルタに使うと、帯域外へと落ちていくスロープがなだらかになる。しかし、帯域外のフロアはハミング窓を使う場合より低い。\n",
"$$ w(x) = 0.5 - 0.5 cos(2 \\pi x) $$"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n01/dsHgzAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f11c943c9b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" for numtaps in tapslist:\n",
" # 窓関数法によるフィルタの設計\n",
" b = scipy.signal.firwin(numtaps, nfc, None, 'hann' )\n",
" # フィルタ係数とフィルタされた信号のFFTを見る\n",
" show_freq_response(b, fs, fc, numtaps)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 三角窓\n",
"簡単に作ることができるが、特性に見るべきものはない。フィルタの特性も凡庸。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAEOCAYAAADPIMPHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VFXawPHfmZZeSE9IIAkJgRAgjSpSFBQpIuIqLLqK\nYAVF17Wt7WVZV0TXhrquFQsiWFZEASmiKL0FCL1DaAklpGeSzHn/mCQkkDJJpiU538/nOjP3nrn3\nGbmZZ865554jpJQoiqIoir1pHB2AoiiK0jqpBKQoiqI4hEpAiqIoikOoBKQoiqI4hEpAiqIoikOo\nBKQoiqI4hEpAiqIoikOoBKQoiqI4hEpAiqIoikOoBKQoiqI4hM7RAdhaQECAjIyMdHQYSgu1efPm\ns1LKQHsfV53Xii1t3rw5B1grpRxqy+O0+AQUGRnJpk2bHB2G0kIJIY464rjqvFZsSQix39bJB1QT\nnKIoiuIgKgEpiqIoDqESkKIoiuIQLf4akKIoSlOVlJSQkZFBUVGRo0OxKldXV8LDw9Hr9Q45frNL\nQEKIocCbgBb4UEo5w8EhKYpVqHPbeWVkZODl5UVkZCRCCEeHYxVSSs6dO0dGRgZRUVEOiaFZNcEJ\nIbTAO8ANQDwwTggR79ioFKXp1Lnt3IqKivD3928xyQdACIG/v79Da3XNKgEBPYEDUspDUkoj8BUw\nysExKYo1qHPbybWk5FPB0Z+puTXBtQWOV3mdAfSq6w0Hzu7ipg+6WbRzIWtZX9OKGsuKK8vWdbwG\nlKipbOOOdeUzUW31pc8ghTBvEJpqj1KUPxcCQfmj0KLT6zEYDLjr3fHQeeBh8MDdKwwPF18C3ALo\nH96fQHe737PZXDTo3D58fh93zLm2/JWo8nDpX1VU/4et8mVj3ibQoEGg0WjQaHRoNTq0Wh1arR6t\nVodGo0dozI8arQ6h0SOEBk35IkT5HoS4tA5xxfbK50JzRXmDxoCL1gWD9tLjFc81LrhoXdBr9bho\nzc/ddG4O//J0hOzsbCZNmkR6ejpCCD7++GMWLVrEggUL0Gg0BAUFMXv2bMLCwhwdqkWaWwKyiBDi\nXuBeAL92bniZDNW215xnGrBWgrxsS205qZacVmMpy8qWv6Omvz1Z8wspqr0y//eyshWvK1aL8kIa\nJCARVRYN0lx1FpfWVShCcEEI8jUa8jXmx5LyLwqBYFLXSTyc/HADPqlSofp57YLIO1Zr2er/KhXr\nLjFVPArzc4nAVP5aAqby17J8u6l8f+bywvxaCEzCvF6K8vLV9lGxb1n53Fp8XHyI8o6iS0AXuvh3\nwd/NHz9XPyK8IvDQe1jxSM5l6tSpDB06lG+++Qaj0UhBQQFdunRh+vTpALz11lv84x//4L333nNw\npJZpbgnoBBBR5XV4+bpqpJTvA+8DpKamys/vU3eMN5XJJCk1SUpNJkpNkrIySYnJRJlJUlpSSm5e\nLkdOnGLHwWPsOHgcQ0kR42PdGee9E7n9S452v4XXvFz4YvcXTOo6CXe9u6M/krOp99yuel53Sugu\n7x24GGmS5h9DJhMSE8IkMUkT0mROAVKaQJqQEoQ0YZImqNwmQZowlZVQVlyIyVhImbEAWWJ+Tkkh\nlBZCSRFlxkJMxoJq67SyBD2l6CnFQAkGSvHQmfDSm/DQSVy1mBe9QCtNIMuQplJM0oTJZKJMmjBS\nhtFUgrE4l2IhMQpBsRAYtQaM/tEUh3SluG0SJZ7BFJuMFJcVU1hayMm8kxzMPsh3+79jzu451f5H\npgSn8J/B/8FN52bTfzB7u3jxIqtWrWL27NkAGAwGDIbqP67z8/ObVc2wuSWgjUCsECIK8x/nWODP\njg2pddBoBAaNwFDbZcMAL+Ijwxh2VQo5RSW888sBnv/9EN+EJzGvlz8x62cxevh0fj/xO0dzjtLZ\nv7N9P4Dza9C57emqp1+cY5tZ8opLOX2xyLzkFHH6YiGHzxZwICuPQ5l55BaXAiAEdAzyIrm9L0nt\n2tA7yp92/u7oAdeKnZlMUJQN2Ufh3EE4lQbHN8CmubBxDoR2h74PQ/xtoL30tVVqKuVYzjGyi7M5\nV3SOPef38MH2D5i2dhov9XvJJl/G0xbuZNfJHKvuMz7MmxdGdqmzzOHDhwkMDGTChAls27aNlJQU\n3nzzTTw8PHjmmWf47LPP8PHxYeXKlVaNzZaaVQKSUpYKIaYAP2PuqvqxlHKng8NSLuPtqufpYZ1J\nad+GKV9uZaJ2MF94zid0148AnMo/pRLQZZrjue3poiMmyJOYIM8rtkkpycotZu+ZXLYey2bz0Qv8\ntP0UczeYL3PFBnkyOD6YwZ2DSYrwRaPRgLufeQlLgq63mHeUlwW7F8C69+DbifD7azDiNWjXGwCd\nRke0b3TlcYe0H4KL1oVZW2eRHJTMrXG32v5/hJ2UlpayZcsWZs2aRa9evZg6dSozZsxg+vTpvPji\ni7z44ou89NJLvP3220ybNs3R4VpESNmQKw/NT2pqqlSDNjrOgrQTTP0qjc9iVxF/4n0GtQ/n6Z5P\n8+fOLaPiKoTYLKVMtfdxm+N5bTJJDmbl8fv+syzffYb1h89TZpIEeLowJrktY3u2Iyqglus3JhPs\n/gF+fgZyMqDPFBg8rVptqLKoNHHHojsoMZUwf+R8q8S+e/duOnd27I+m06dP07t3b44cOQLA77//\nzowZM/jpp58qyxw7doxhw4aRnp5u8X5r+mz2Oq+bWzdspZkZldiWW1PDmXYwFj+TCR0aMgsyHR2W\n4gAajSA22Iu7+0Xx5T292fLsEN4cm0hKe18+/OMwg179lXHvr2PhtpOUlJkufzN0uQmmbIAek2Dt\n2/D5TVBw/srjCA39w/uz5/wesouy7fTpbC8kJISIiAj27t0LwIoVK4iPj2f//v2VZRYsWECnTp0c\nFWKDNasmOKV5emZYPAN2neGEpj2eQF5JnqNDUpyAj7ueUYltGZXYlsycIuZvOs7cDcd5aO5W2vm5\n8/C1sdyUGIZOW+V3ssEDhv8b2qbCwqnw6Y1w5w/mprsqeoX24u20t9l0ZhOD2w+28yeznVmzZjF+\n/HiMRiPR0dF88sknTJo0ib1796LRaGjfvn2z6QEHKgEpduDjrmfywBiWL+2ER2k6+UaVgJTqgrxd\nmXJNLA8MjGHlnkxeX76Pv329jXdXHmDq4FhGdAtDq6nSoSBxHHgGwdxx5iR014/g5lu5uUtAF9x0\nbqw/tb5FJaDExMQr5oH69ttvHRRN06kmOMUuxvaMYJe2E55lZeTlnXJ0OIqT0moEg+OD+fGhfrx3\newp6rYapX6Ux+t3VbM+4rDkt5loYNxey9sC3k8BUVrlJr9GTHJzMhtMb7PwJlIZQCUixCy9XPeHd\nBuJpMpGTe9rR4ShOTgjB0IQQFk+9mtdv686pi0WMemc10xbupNB4KdEQcy0MmwkHlsEv/6y2j14h\nvTh08RBZBVl2jl6xlEpAit0M75eK3qQlu+CCo0NRmgmNRjA6KZwVjw3g9l7t+WT1EYa/9Tvbjlep\nDaXeDSl3wR+vwcFL98D0DO0JwMbTG+0ctWIplYAUu4kJ9kbgTkFZy5pTRbE9b1c9029KYM6kXhSV\nlHHLe2v4ZPVhKm8jGToD/GPgh4ehOBeAjm06ohEaDl486MDIlbqoBKTYlbtrG4pFGcfP5Ts6FKUZ\nuiomgEVTr2ZAx0CmLdzFI/PSKCopA70bjHoXLh6HZc8D5utAwe7BnMw76eColdqoBKTYVRvfEEo0\nsH7bDkeHojRTvu4GPvhLKo9fH8eCtJPc9v46snKLoV0v6HU/bPoETm0HIMwzTCUgJ6YSkGJXPr6h\nFAnB8b1bHR2K0owJIZg8KIb/3pHCvtO53PLeGo6dK4CBT5q7Yy99FqSkrWdbTuRdMV5xs3T33XcT\nFBREQkJC5brHH3+cTp060a1bN0aPHk12tvna2Jw5c0hMTKxcNBoNaWlpjgq9VioBKXbl4hFEqRBc\nPLUfY6k1B+hXWqPru4Qw555eXCwsYcx7a9ifo4MBT8Hh3+DAcsI8w8gsyKSkrMTRoTbZXXfdxZIl\nS6qtGzJkCOnp6Wzfvp2OHTvy0ksvATB+/HjS0tJIS0vj888/JyoqisTEREeEXSeVgBS7cnH3B8Bf\nnmLLMdUbTmm65HZt+Pq+PkgJ4z5Yz/52t4JfNKz4B2EeYUgkp/Obf9f//v374+dXfcSH6667Dp3O\nPJ5A7969ycjIuOJ9c+fOZezYsXaJsaHUSAiKXbnozAPwB2uy2HD4PL2j/R0ckdISxAZ78dW9vRn7\n/jr+/MkWlvSfgv+Kv9L2ojnxnMg/QYR3RD17sdDip+C0la9hhnSFG2Y0aRcff/wxt9122xXr582b\nx4IFC5q0b1tRNSDFrly0LgCEG86zVdWAFCuKCfJk7j29KCkzcevaCMo8wwjb8T1Ai++I8OKLL6LT\n6Rg/fny19evXr8fd3b3adSNnompAil1VJCA/zXm2Hs9GStmsZnBUnFtssBcf39WD8R+s5yOv4Uw4\n+gGaqPbW7YjQxJqKtc2ePZsff/yRFStWXPG39NVXXzFu3DgHRVY/VQNS7KoiAWlMeRQX5HLorLof\nSLGu5HZtmDUuiTcv9KFE40Gw0LfYGtCSJUuYOXMmP/zwA+7u1ae5N5lMzJ8/32mv/4BKQIqduZZf\nAzIKQZDIZstR1QynWN/g+GAeHZbEPGM/QgtzOXnxqKNDarJx48bRp08f9u7dS3h4OB999BFTpkwh\nNzeXIUOGkJiYyP33319ZftWqVURERBAdHV3HXh1LNcEpdmXQGgAo0gja6XPYeTKHPzk4JqVlmtgv\nipmHxxGes5HV5w84Opwmmzt37hXrJk6cWGv5gQMHsm7dOluG1GSqBqTYVUUTXLEQdPMtYvepHAdH\npLRUQggeHnsjOpMf500FHD3XcmZHbSlUAlLsyqAx14BKEHT2LGDXqZxLA0oqipW5GbR0iL0WKQT/\nmfcBJpM615yJSkCKXem1egCMWh2RLnnkFpVyIrvQwVEpLVlk5yEA+J//hS/WN/9rQS2JSkCKXVXU\ngIxuvoRqzE0iu0/lOjIkpYXz9QgGoJvLbl5ZtIODWWpKeGehEpBiVxU1oBJXb3zLzgOwR10HUmyo\njUsbAIqFkUG6Hfx1/jZKy9Q4hM5AJSDFriqvAbl6oy3IJMzHVd0LpNiUj6sPANkunjzZdjvbjmfz\n/u+HHByVAioBKXZW0Q27xOAJuafpEOSpmkQUm/LSe6EVWrKD4mh7ZhXDO7dh1ooDnGyG1x4jIyPp\n2rUriYmJpKamAvD111/TpUsXNBoNmzZtqix77tw5Bg0ahKenJ1OmTHFUyHVSCUixK72mvBOCiwcU\nnifWT8/BzDzVE06xGSEEPi4+ZPuEQkk+07qewyQlLy7a7ejQGmXlypWkpaVVJpuEhAS+++47+vfv\nX62cq6sr06dP59VXX3VEmBZRCUixq8pecHo3ALr4FJNvLCMzt9iRYSktnI+LD9ku7mDwJODEciYP\niuGn7adYc+Cso0Nrss6dOxMXF3fFeg8PD/r164erq6sDorKMGglBsSud0CEQlOjNfxQdPIoAOJiZ\nR7C38/6hKM2br4svF425EHMt7F3MvQ+/ytebj/PCDztZNPVq9FrLf4u/vOFl9pzfY9X4Ovl14sme\nT9ZbTgjB4MGD0Wq13Hfffdx7771WjcPeVA1IsSshBHqNHmP5taB2LgUA6jqQYlM+Lj5kF2dD3HDI\nO4Nr5jaeH9GF/Zl5fLrmiKPDs9gff/xBWloaixcv5p133mHVqlWODqlJVA1IsTuD1kCJ1nzqtZHZ\neBj8OZilesIpttPGpQ27zu2C2CEgtLB3MYOveZYBHQN5a8V+/pQagY+b3qJ9WVJTsZW2bdsCEBQU\nxOjRo9mwYcMV136aE1UDUuzOnIDMf+yi4CzRgaonnGJbvi6+XCy+iHRrA+E94OAvCCF4YmgcOUWl\nfNgMumXn5+eTm5tb+Xzp0qVOO9GcpVQCUuxOp9FhRILODfKziArw4LC6F0ixIR8XH4rLiiksLYQO\n18DJrVBwni5hPgzvGsrHfxzmXJ5zd4Q5c+YM/fr1o3v37vTs2ZPhw4czdOhQ/ve//xEeHs7atWsZ\nPnw4119/feV7IiMj+etf/8rs2bMJDw9n165dDvwEV3K6BCSEeEUIsUcIsV0I8T8hhG+VbU8LIQ4I\nIfYKIa6vaz+K8zJoDJSYSsAjEPLPEhXgwYnsQopKyhwdms0IIf4khNgphDAJIVIv26bOaxvzdTF/\njVwsvggdBgESDv0KwKNDYiksKeO/q5y7FhQdHc22bdvYtm0bO3fu5JlnngFg9OjRZGRkUFxczJkz\nZ/j5558r33PkyBHOnz9PXl4eGRkZxMfHOyr8GjldAgKWAQlSym7APuBpACFEPDAW6AIMBd4VQmgd\nFqXSaAatAWOZETwCID+L6EAPpITj5wscHZotpQM3A9WuGqvz2j4qElB2cTaEJYOLDxxaCUBMkBc3\nJbXl0zVHyMwpcmSYrY7TJSAp5VIpZWn5y3VAePnzUcBXUspiKeVh4ADQ0xExKk2j1+gxmozlNaAs\nIv09AFr0kDxSyt1Syr01bFLntR34uJQPx1OcDVodRPeHgyuh/AboqdfGUmaSvLOy+U9c15w4XQK6\nzN3A4vLnbYHjVbZllK9TmhmDtnoTXGSAOQG10utA6ry2g2pNcADRg+DicThnTjjt/T34U2oEczcc\n54yqBdmNQxKQEGK5ECK9hmVUlTLPAKXAnEbs/14hxCYhxKasrCxrhq5YgV6jp6SspLIJzsdVR4Cn\ngSPNPAFZcl43cf/qvG4kX9cqTXAAUQPMj0f+qCxz/4BoSk2mWu8LaonDRTn6MznkPiAp5eC6tgsh\n7gJGANfKS/+HTgARVYqFl6+raf/vA+8DpKamtryzppnTa/UUlxaDVyCUGaE4h0h/j2bfBFffeV0L\ndV7bQbUmOAD/DuARBEfXQOoEwFwLGpoQwhfrjvLgoBg8XS59Pbq6unLu3Dn8/f0RQtg9fluQUnLu\n3DmHDtXjdDeiCiGGAk8AA6SUVa9K/wB8KYR4DQgDYoENDghRaSKDxkCeKc/cBAeVPeF+29cqf9Wr\n89oO9Bo9nnrPSwlICGjfF46uNl8HKk8q91wdzaIdp5m/8Th394uqfH94eDgZGRm0tJqnq6sr4eHh\n9Re0EadLQMDbgAuwrPyXxjop5f1Syp1CiPnALsxNc5OllC23324LdqkTQoB5RX4WUYEBfL05g7zi\n0mq/PFsKIcRoYBYQCPwkhEiTUl6vzmv7qRyOp0JkP9j1PWQfhTaRACS1a0OPyDZ89Mdh/tKnPbry\nMeL0ej1RUVE17FVpCqfrhCCljJFSRkgpE8uX+6tse1FK2UFKGSelXFzXfhTnZdAayq8BVdSAsogq\n7wnX3K8D1UZK+T8pZbiU0kVKGSylvL7KNnVe24Gvi2/1BNS+r/nx6Jpq5e65OpoT2YUsTj9tx+ha\nJ6dLQErLV60XHJTXgFp1TzjFDnxdfLlYdPHSisDO4OprboarYnDnYKIDPHh/1SGHX6Rv6VQCUuxO\nr9Gbb0R19zevyD9beS+QSkCKrfi4+HDRWCUBaTTl14HWViun0QgmXh3FjhMX2XLsgp2jbF1UAlLs\nTq/Rm2tAOoP5F2h+Fq56LWE+rioBKTbjZfAiv+Sy8yu8B5w/CAXnq62+KbEtni465qw/ZscIWx+V\ngBS7qxyKBypHQwCIClSDkiq246H3IM942ajr4T3Mjxkbq5d10TEqMYwft58iu8BopwhbH5WAFLur\n7AUH5gSUV56AAjw4lJWn2t0Vm/DQe2A0GS/9+AFomwxCc0UCAhjfqz3GUhPfbqnxtizFClQCUuzO\noDVQaio1JxqftuYhUYBIfw9yiko5n69+cSrW56E3X2es1gxn8IDgLjUmoPgwbxIjfPly/VH1o8hG\nVAJS7K7iiyDHmAO+7eFiBpSVEB/mDcCOExfreruiNIqn3hOghutAPSFjM5iuvP1qfK92HMzKZ/3h\n81dsU5pOJSDF7iK8zCPPHM89Dv4xIMvg3EG6tvVBCEg7nl3PHhSl4WpPQD3AmAtZVw5WPqJbGF6u\nOr5UnRFsQiUgxe7ae7cH4PDFwxCWaF55YhNernrigr1Yd+icA6NTWioPg7nmnVdiWUcEADeDljHJ\n4SxOP6Wahm1AJSDF7iK9I/EyeLHh9AYIiDM3wy15Gn6dweDOwWw4fJ6sXOeeHllpfjx0NVwDAvPA\npC4+cGpbje+7NTWCkjLJj9tP2jrEVkclIMXutBot8X7x5hqQRgNjPoKQbvDrS4wLPIwQgkfmbeXH\n7Sc5m6cSkWIdlTWgy7tiCwGh3WpNQPFh3nQK8eI71RvO6lQCUhzCx8XH3AkBIKIH3P4tuHjT9sRi\nnhvemY1HLjDly61c//qqlj5Vt2InldeASmu41yykG5xJh7LSK7cBNye3Je14Ngez8mrcrjSOSkCK\nQ3i7eF+anRJA7wrt+sDRNdx1VRQ7/u86vrq3N0UlZfxr0W7HBaq0GJUJyFhDAgrtDqVFcHZfje8d\nldgWjYDvt6pakDWpBKQ4hI/BXAOqdn9F+77mL4D8s7jotPSO9ueOPpEs3XWGTDVNstJEbjo3BOLK\nTghgTkBQazNcsLcrV8UE8L+tJzCZ1D1B1qISkOIQPi4+lJpKKSwtvLSybYr58VRa5arbekRQZpL8\nsE1dAFaaRgiBh97jyk4IAAGxoHOD09trff/NyW3JuFDIpqNqgFJrUQlIcQhvg/mm02rNcCEJ5sfT\nOypXRQV4EBvk2VpnS1WszEPvUXMNSKOFkK611oAAru8SgrtBy3dbMmwYYeuiEpDiED4uPgCXOiIA\nuLUBn3bVEhDA1bGBrD98nqISNVGo0jSees+aa0BgboY7tR1Mpho3uxt0DE0I4acdp9S5aCUqASkO\nUZGAqtWAoLw7bPVmkP4dAzCWmtRwKEqTeRhqaYIDcwIy5sKFw7W+f1RiW3KLSvl9/1kbRdi6qASk\nOERlE5zxsgQU0hXOHYAqPZV6Rfmj1wrWHFR/9ErTeOo9a26CgyodEdJq3g707eCPr7uen9RNqVah\nEpDiELXWgEK6AhLO7Kxc5WbQkhTRhnUH1RA9StN46D1q7oYNENgJtIY6rwPptRqGdglh2a4zqhnO\nClQCUhzC39UfD70HWzO3Vt8Q0s38eFlvpN4d/Nlx4iIXC0vsFKHSEtXaCQHMM/QGxdeZgACGdwsl\n31imOsZYgUpAikPotXqGRg5l2dFlFJRUGenAJ9w8TfdlHRH6dvDHJGGDug6kNEGdnRCgvCPCNqhj\n/p8+0f60cdezaMcpG0TYuqgEpDhMn7A+FJYWmqdlqCCEeZbKg7/AxUt3nSe188VFp2GtaoZTmqDi\nPqBaJ5gL7Q6FFyonSayJTqthaEIoy1UzXJOpBKQ4TLB7MACZBZnVN/S4B7KPwetdYMc3ALjotKRG\ntuHXfZlqdkql0Tz1nkhk9Rugq6pnRIQKI8qb4X7dq5rhmkIlIMVhgtyDgBoSUKdh8MBaCOoMK1+s\nbA4Z1b0th9TslEoT1DonUIXgLiC09SagXlF++HsY+Ek1wzWJSkCKwwS6BQI1JCCA4Hjo/QCcPwRZ\newAY0T2UIC8XHvhiM5M+3cgqdRFYaaCKOYFqTUB6NwjoeMU1yMvptBquTwhhxW7VDNcUKgEpDqPX\n6vFz9eNMwZmaC0T1Nz8e+QMw34k+e0JPekb5sfNkDhM/3ciBzFw7Rau0BJ6GOkbErhCSAKfT693X\nDQkhFBjL1A+hJlAJSHGoYPfgmmtAYJ4p1Tu8MgGBeXKw/96Ryo8P9cNVp+WtFQfsFKnSEnjoy2dF\nrWlOoAohXSEnAwrqburtHe2Pj5ueJemnrRliq6ISkOJQcX5xbDqziayCGn5FCgGRV8HRNVd0i/X3\ndOGmpLYs3XWavOKaJxFTlMvVOSdQhZCu5sczddeC9FoNQ+KDWbb7DMbSmsePU+qmEpDiUBMTJlJY\nWsiSI0tqLtCuN+Rnmq8FXeampDCKSkws26V+gSqWqagB1XoNCCC4PAHVcx0IzM1wuUWlapioRlIJ\nSHGo9t7t8dR7ciznWM0F2vU1Px5edcWmpIg2hHi7qiYQxWIWJSDPQPAMsSgB9YsNwNNFp87BRlIJ\nSHEoIQQRXhEcz6vlxr/AOHOvpNVvwr6fq23SaATXdwnmt31ZFBhVM5xSv8prQHWNhgDmZjgLOiK4\n6LRc0ymIpbvOUFqmmuEaSiUgxeHCvcLJyK1lki8h4Pp/QV4mfHkr7F9ebfP1CSEUlZhUTyTFIgat\nAYPGUHcNCMw94bL2QKmx3n3ekBDC+XwjG46o+9MaSldfASHEXy3YT76U8r9WiKfqcR8DXgUCpZRn\ny9c9DUwEyoCHpZQ/17ELpZmI8Ipg5fGVFJQU4K53v7JA7BB44iC8lQwb/guxgys39Yz0o427nsXp\npxmaEGqVeF577bV6y3h4eHDfffdZvE8hxCvASMAIHAQmSCmzy7ep89qOvAxe5Brr6b4f0hVMJeYk\nFNqtzqID4gJx1WtYkn6avh0CrBhpy2dJDehxwBPwqmN5zJpBCSEigOuAY1XWxQNjgS7AUOBdIYTW\nmsdVHGNgxEBKTaV8uOPD2gvp3SDhZjj0KxRf+vWq02oY3i2URTtO8f3WE2QX1P+LtT6vvPIKeXl5\n5Obm1rr8+9//buhulwEJUspuwD7gaVDntSNYlICCLesJB+b70wZ0DGRJ+mlMJjVMVEPUWwMCPpdS\n/qOuAkIIDyvFU+F14AlgQZV1o4CvpJTFwGEhxAGgJ7DWysdW7CwpKInkoGQ2ndlUd8HY62Dt2+YO\nCZ2GVa5+ZHBH1hw8xyPz0nDVa/jynt4kt2vT6HjuuOMOnn/++TrL5OfXcw3hMlLKpVVergNuKX+u\nzms78zZ415+A/DuAzs2ijggANySE8vPOM2w9nk1K+8afe61NvTUgKeUT1ihjKSHEKOCElPLywZja\nAlWvVGeUr1NagBjfGA5mH6x7oNF2fcDgBfuXVlsd4OnCz4/056t7e+PtqmfGoj1NimXmzJlWKVOH\nu4HF5c9wbg52AAAgAElEQVTVeW1nXi4W1IA0WvO4cBYmoGs6B6HXCpakq7HhGsKiTghCiAFCiG7l\nz28VQrwthHhUCOHSmIMKIZYLIdJrWEYBfwfq/vlZ//7vFUJsEkJsyspSF6ebg2jfaHKMOZwrqmO6\nBZ0BOgyEvYuhpKjaJr1WQ+9of+65OpoNR86z+1ROk+L57bff2L7dPCne/PnzmTJlCq+//jrFxcW1\nvqee87qizDNAKTCnoTGp89o6vPXe5BgtOD9CEswJyILR171d9fSLCWBx+mk1WnsD1JuAhBDvAP8E\nPhRCfAH8GUgHkoGPG3NQKeVgKWXC5QtwCIgCtgkhjgDhwBYhRAhwAoiospvw8nU17f99KWWqlDI1\nMDCwMSEqdhbXJg6AHw7+UHfBrrdC3ml4NRaOb7hi85iUcPRawbeba+lVZ4HJkyfz7LPPMmnSJG6/\n/Xa+/PJLEhIS2LJlC3fffXet76vtvJZSLgAQQtwFjADGy0vfUuq8tjOLrgGBuSNCUTZctOxcuiEh\nlIwLhew82bQfP62JJTWgQVLKq4H+wA3AGCnle8BfgLq7hzSQlHKHlDJIShkppYzE3ByRLKU8DfwA\njBVCuAghooBY4MpvIKVZSglOoW9YX+bsrqdiEH8jjJsHendYPu2KzX4eBgbFBfF92slG35excuVK\nfv/9d1atWsXixYv59ttvuf/++/nss88qa0UNJYQYivm65o1SyipTwKrz2t68DF7kGHPqr6lUTA9v\nQUcEgCHxwWg1gsWqGc5iliSgIgApZRFwVEpZVv5aAiU2jK0aKeVOYD6wC1gCTK6IRWn+hBD0DetL\nZkEmF4ou1F04biik3AVHV5vvD7rMmJRwzuYV8/v+xg2P4urqWvnYvn17tFptZYx6vb5R+wTextxj\ndJkQIk0I8R6o89oRvAxelJpKKSorqrtgUDwgLL4O1MbDQO9oP9UM1wCW9IILKr8XSFR5Tvlrm7YD\nlNeCqr5+EXjRlsdUHKdjm44A7D6/m75hfesu3HkE/DYD9vwIqdWbxQbFBeHnYeCVn/dyLt/IiG6h\nuOot79mcmZnJa6+9hpSy8jmAlJLGXnuRUsbUsU2d13bk7eINQK4xFzedW+0FXTzBLxpOW17rHZoQ\nynPfp7M/M4+OwV5NDbXFs6QG9AHmX26eVZ5XvK7jxg1FaZguAV1w17nzTto79RcOTgC/DrBrwRWb\nDDoN/7wpgeMXCvjb19t46tuGNZvdc8895ObmkpeXV/m84vWkSZMatC/F+XgZzIkhp9jSjgiWNcEB\nXN8lGCFg8Q41Npwl6q0BSSmvbGhXFBvwNnhzb7d7eWPLG5wtPEuAWx13lQsBXW+B316GeXfAjbPA\nzbdy87CuoVzfJYSXl+zh/VWHuG9ABzqHelsUxwsvvNDUj6I4MW99eQ2oxMKOCLsWQFEOuNZ//gR5\nuZLavg2L008xdXBsU0Nt8SwZiueturZLKR+2XjhKa5cUlARA+tl0BkYMrLvwVY9A4QXY8L550NJr\nnq22WasRPDiwA5+vPconqw8z85buFsXw8MN1n9JvvVXnn4Ti5CpqQJb1hCvviJC5yzw1iAWGJoQy\n/cddHDmbT2SAte/Rb1ksaYLbXL64Yu56vb98SQQMtgtNaY06+XXCoDEwe+fs+i/kGtxh2CsQPQh2\nfF3j/Rq+7gbGpLTl+7STnM2r/R6eqlJSUkhJSaGoqIgtW7YQGxtLbGwsaWlpGI1NH+pHcazKJjhL\n7gUKTjA/WtgRAWBoQggAi9UUDfWyZCSET6WUn2Lucj1QSjlLSjkLuBZzElIUq3HXu/NA4gNsPrOZ\nY7m1zBF0uYQxcOEInNhS4+a7+kZhLDXx3q8HKbGga/add97JnXfeyfbt2/n111956KGHeOihh1ix\nYgVpaWkN+DSKM6rohGDRNSDvMHDza1BHhLa+bnQP91GjIligIdMxtAGqNoJ6lq9TFKsaED4AgC1n\nak4oV4i/EbQusPwFOLv/is0xQZ5cFx/Mh38cpte/VrD/jAVNL8CFCxfIybn0JZWXl8eFC/V0EVec\nnpe+AU1wQlg8N1BVQxNC2ZZxkRPZhY0JsdVoSAKaAWwVQswWQnwKbAH+ZZuwlNasg28HgtyCeHfb\nuxjLLGjycvWBQX+HI7/DZ6Og7Mrb094al8SbYxMpKTPx8pK9FsXx1FNPkZSUxF133cWdd95JcnIy\nf//73xv6cRQno9fqcdO5WZaAwJyAMndBmeWTHlY0w6mZUutmcQKSUn4C9AL+B3wH9ClvmlMUq9II\nDX/r8TdO559m57mdlr2p3yNw2xeQc8I8ZcNlXPVaRiW2ZWK/KJbvPsOBzHomJAMmTJjA+vXrGT16\nNDfffDNr167lzjvvbOCnUZyRl97Lsl5wAKHdobQIsnZbvP+oAA86hXjxs0pAdbJkLLiQiudSytNS\nygXly+mayiiKNfQONfc4qndsuKpirwNXX9j2Va1Fbu/dHoNOw0d/HK61zOnTl740QkJCGDVqFKNG\njSIkJKTGMkrzY/F4cADhPcyPNYw9WJehCSFsPHqezNx6RlxoxSypAS2yUhlFsVgb1zaMiB7BN/u+\n4XS+hV/2OhfoPhZ2fgdLnwPTlSPaBHi6MCY5nLkbjnH966vYe/rKL6Fhw4Zdsa4xZRTn5e3ibVkn\nBIA2keAR1OAEdENCKFLC0p1nGh5gK2FJAuouhMipsuRWWXKEELlAsK0DVVqfv8T/BYBVGassf9PA\npyB+FKx5C3bXXHt6bkRn/nZdR87mFfPUd9uv6O69bds2vL29KxcvL6/KpeL1mTPqS6U5qxiQ1CJC\nQERPOL6+QcfoGOxJdICHug5UB0u6YWullN5VFq8qS8VrNYGWYnVxfnFEekfyxpY3KC6z7B4e3NrA\nmI/Atx1s+qTGIu4GHVOuieWRwbFsPZbN2kPV5yAqKysjJyencqk6FXfF6xMnapwxQWkmGtQEBxDR\nCy4crnHw29oIIRiaEMLaQ+e4kK/uH6tJQ3rBIYRoK4ToK4ToX7HYKjBF0QgNj6Y8Sq4xlw2nGtD8\nodFC0h1w+DfY8EGtE4r9KTWCQC8X/u+HnSxJP1Xjja8nTpxgzZo1rFq1qnJRmr8GdUIAcwKCBjfD\nDesaSplJ8tMOdU9QTSwZDRsAIcTLwG2Yh42vaFyXgPqLVGymV2gvvA3ezNw4k35t+yGEsOyNqRNh\n38+w6G/mWlHXW64o4qrX8o8bu/D4N9u5/4stzBzTjVt7XJob7sknn2TevHnEx8dXm5Khf3/1u6u5\nq6gBmaQJjbDgd3hod9Aa4Nha80jsFuoS5k2nEC/mbTzO7b3bNyHilqkhNaCbgDgp5TAp5cjy5UZb\nBaYoAB56D6YkTeFIzhF2ndvVgDf6w8Rl5uH0N9Y+aPsNXUNJe34IKe3bMPPnveQXX7rX4/vvv2fv\n3r0sWrSIhQsXsnDhQn74oQG98hSn5ePig0maKCgpqL8wgN4V2vWBA8sbdBwhBGN7RLDjxEXST1xs\nRKQtW0MS0CGg0bNxKUpjDW43GDedGzM3zmzYGzUaSJlg/tW65OlabyTUaTX8fVhnzuYVc9cnG/ij\nfCK76OhoSkrsNueiYkcNGpC0QsehkLUHztfehb8mo5PCcdFp+HKDhUNLtSINSUAFQJoQ4r9CiLcq\nFlsFpigVAt0DmdBlAlsyt7Dvwr6GvbnHROg8Eta9Czv/V2uxlPZteGZYZw5m5TPx040cysrD3d2d\nxMRE7rvvPh5++OHKRWn+fFx8ADhT0IDejHFDzY/7lzbsWO56bkpsy3dbMlRnhMs0JAH9AEwH1nBp\nhOzNtghKUS43ssNI3HXuvLWlgb95DB7wp8/APxZWv2GevqEW9/SPZsnUq3HRabjv88107j2I5557\njr59+1aOkJ2SktLET6I4g+SgZLRC27Au/n7RENAR9i1p8PEmXh1FUYlJ1YIuY3EnBDXsjuJI4V7h\njI4dzZe7vyT9bDoJAQmWv1mjMQ/Vs2AyfHAtPLDG3KZfgyBvV166uRuPzk9jf2kUb1+fxIhuYVb6\nFIqzaOPahtSQVJYdXcZDSQ9Z3rml4/Ww7j3IywLPQIuP1zHYi/4dA/lk9WEmXBWJu8Hir94WzZKh\neOaXP+4QQmy/fLF9iIpiNjFhIm46Nz5O/7jhb066HW7+AM4fhLQv6iz66T+nkvb8EC58/jBjhlxF\nWHQcCV270q1bN7p169bI6BVnc1376ziSc4QD2Qcsf1PynWAqNU+C2EBTr43hbJ6RT1YfafB7WypL\nmuCmlj+OAEbWsCiKXQS6BzKyw0iWHV1GWmYj5uXp+icIS4afHoO0L2st9uabb+Ju0PHrssUMe+x1\ntEOfImjM80x/93MWLlzYhE+gOJNr2l2DQLDs6DLL3xQQC3HDYOMHYMxv0PFS2vtxbacg3vvtIOcs\nnByxpbNkJIRT5Y9Ha1psH6KiXPJI8iO4aF14O+3t+mdMvZwQ5hGzQxPh579Dcc09oEJDQwFIiu/I\n/564iU8fHsZpkxdTf8xg1oZsft2bicnUwGMrTifALYCU4BQWHFhAUWkDBgy9aqr5WuKqVxp8zKdu\n6ERRSRn/+LEBtxS0YBZ3QhBC9BZCbBRC5AkhjEKIMiGEhYMpKYp1eBo8mZAwgfWn1rPpzKaG78Cn\nrXka78IL8G5fKDhfa9F169bRo0cPbkztwIEZN3LslRt57fY+3PXJRlJfXM6ot/9owidRnMH93e/n\nZP5JPtjxgeVvatfLPNLGH6/Dmreh1PKebbHBXkweFMOCtJP8uP1kIyJuWRrSC+5tYBywH3ADJgHv\n2CIoRanL+E7jK0dHaJSInubrQRePw7Lnah2qZ8qUKcydO5fY2FgKCwv56MMPeeyRh5g1LokhnYPx\ncTc04VMozqBXaC9GRI/g4/SPOXLxiOVvHPE6xF4PS5+BV2Ph3T7w4RD4arx5+KdaatcADw6MIbmd\nL3/7ehtbj7XuGXYbNBaclPIAoJVSlpVPUDfUNmEpSu18XX15MPFB9pzf07D5gqrqdqt56oatX5in\n8q5FTEwMZWVlaLVaJkyYwPKlSxnZPYyXb+nGZ3f3bOQnUJzJY6mPUWoqZfmxBoxyoNXDuLkw/hvz\nfWZ+0WBwhzPp5uGf/tMXjq6t8a0GnYb3/5JKoJcLf/5gPYt21DwOYWvQkL6ABUIIA7BNCDETOEUD\nE5iiWMutcbcyd89c3tn6Dte2uxYPvUfDdzLyLSgpgNVvQVAX6H5btc3u7u4YjUa6d+/OE088QWho\nKCaTyUqfQHEWAW4BBLkHcfhiw0Y4QKOF2CHmpaqja2HBg/DFGJjwE4QlXXlMTxe+vb8vkz7bxINz\nttAryo/RSW1JaOuDt6seV70GF50Wg06Di06DRmNhN/FmRliaeYUQ7YEzgAF4FPAG/lNeK3Jaqamp\nctOmRlwrUJzeimMreGTlI0xOnMz93e9v3E5yT8OnI+HcAZi4HMIv3Wh69OhRgoODMRqNvP766+Tk\n5PDAAw8QExNTWUYIsVlKmdrUz9JQ6ry2rklLJ1FYUsic4XOss8OcU/DRECgzwoPrwN2vxmLGUhNf\nrDvKx6sPk3GhsMYyeq2gnZ87PSL9GNk9jL4d/C2/b6mR7HVe11sDEkKMAsKllO+Uv/4NCMI8EvZa\nwKkTkNJyXRNxDSnBKXy440PGxI4h0N3yGwMreYXA3T/DrGT4+HqYuJQFm46TkZHB5MmTARgwYACZ\nmZkIIejTp0+1BKS0DFHeUfx06CeklNb5cvcOhbFfwvsDzU28N86qsZhBp+HuflFMuCqSg1l5HMjM\nI6+4jKKSMoylJopLTWQXGjmYmcdP20/x1cbjdG3rw7RRXUhu16bpcTqYJU1wTwBjq7x2AVIAT+AT\n4BsbxKUo9RJC8FTPp7h14a3M3DiTVwY0vFssYP51evdS+HQEfHM3M+cIvvr20rWl4uJiNm/eTF5e\nHhMmTOCWW66c2kFp3qJ8osgtyeVc0TkC3AKss9PQbtBnsnl23qS/QESPWosKIYgJ8iImyKvWMkUl\nZfyw7SRvLNvHLf9Zw1+HdGTyoBib14ZsyZJrOAYp5fEqr/+QUp6XUh4DGtHwrijW08mvE7fG3cqS\nI0saNmnd5QI7wpgPoaQA46ndRGiyKjf169cPPz8/2rVrR35+w24+VJqHSJ9IgIZfB6rPwKfAPQB+\nfanJu3LVa7k1NYKfH+3PyO5hvLp0H09/t6NZ35NmSQKqVs+TUk6p8rIRbR6KYl2PJD+Cj4sP09ZO\no6SsCdMnRPWHP8/jQmEZfDYKDv0GwNtvv11ZJCsrq7Z3K81YtE80YIMEZPAw14IOroAM64zd7OWq\n543bEpkyKIavNh5n+k/N96ZWSxLQeiHEPZevFELcBzThJ6eiWIenwZNpfadxLPcYH6V/1LSdhSXR\na9BwPthihLnjYPv8yk3//e9/6dlTdb1uiYLcg3DTuVk/AQH0vAdcfc1NcVYihOBv18cx4apIPll9\nhPkbj9f/JidkyTWgR4HvhRB/BraUr0vBfC3oJlsEJYR4CJiMeervn6SUT5SvfxqYWL7+YSnlz7Y4\nvtL8XNvuWgaED+D97e8zPGo4Ed4R9b+pFq+/8z43jRzGl9v2k/zjHRAyk83nPSg2Gvn+++8btU8h\nxHRgFGACMoG7pJQny7ep89rBNEJDpHckh3NskIBcvCDxz+YbVBs4inZ9nhnWmQOZeTzz/Q46BHmQ\n0r7m3nbOypKx4DKllH0xzwV0pHz5h5Syj5SyAbM5WUYIMQjzH2p3KWUX4NXy9fGYO0N0wXwD7LtC\nCK21j680X8/0egat0DJt3bQm3dgXFBTEmvWbeO6dr4lM6Elk0U6eT8hg7RcvEhwc3NjdviKl7Cal\nTAR+BJ4HdV47k0ifyIaNhtAQyXeCqQS21T4IbmPotBpmjUsi1MeNR+alUWCsedZfZ2XxjaRSyl+k\nlLPKl19sGNMDwAwpZXH5cTPL148CvpJSFkspD2Pu/q3aQ5RKoZ6hTEmawvpT61lwcEGT93fNkOt4\n6P1VPPTafK6JcYPPR8NnN8Gen8BY0KB9SSmrjpvogfk2BlDntdOI8oniZN5JCktrvh+nSYI6Qbs+\nsHl2rUM/NZavu4FX/9SdjAuFzFyy16r7tjVnHMmgI3C1EGK9EOI3IURF38W2QNWGzozydYpS6fbO\nt9PZrzOvbHyFs4Vnm75DIcxDrTy0GQZPg9M74Ks/w4x28EbD5gYSQrwohDgOjKe8BoQ6r51GlE8U\nEsmxHBvNWppyF5w/BEd+t/que0b5cWefSGavOcK6Q+esvn9bcUgCEkIsF0Kk17CMwnxdyg/oDTwO\nzBcN7OguhLhXCLFJCLFJ9VpqXbQaLdOvmk5BSQH/Wv8v6+1Y52KeVfWxPebxv/pOgYhe1YrUc14j\npXxGShkBzAGm1HCUOqnz2raivKMAbHMdCCB+FLj6wGbbTC79xNA4IvzceO77dErKmseQUQ5JQFLK\nwVLKhBqWBZh/AX4nzTZgvmgbAJwAql5ZDi9fV9P+35dSpkopUwMDVU/x1ibOL46JXSey7Ogyfj5i\n5ev5Wr157K/B/wdjqg/hX895XdUcYEz5c3VeO4n23u0RCNv0hAPQu0G3sbD7B8i3fi3F3aDjueHx\n7M/MY8665jFVmzM2wX0PDAIQQnTEPPbcWeAHYKwQwkUIEQXEorqBK7W4r/t9xPjGMH3ddOs0xTWR\nECK2ystRwJ7y5+q8dhKuOlfCPMNsl4AAUu40jw+342ub7H5IfDD9YgJ4bdk+zudbPk+RozhjAvoY\niBZCpANfAXeW14Z2AvOBXcASYLKUssyBcSpOTK/RM+PqGeQb85m2dpqjwwGYUd4ctx24jvKp7tV5\n7Vxs2hMOILiLeXTsrZ9bvTMCmO8Pen5kPPnGMl5fts/q+7c2p0tAUkqjlPL28qaL5Ko97qSUL0op\nO0gp46SUix0Zp+L84vzieCDxAX49/ivf7vvWobFIKceUn9PdpJQjpZQnqmxT57WTiPKO4kjOEUzS\nhtdQku4wzxt0Ks0mu+8Y7MX4Xu34csMxDmTm2eQY1uJ0CUhRrGliwkS6B3bn5Y0v2653k9JiRPlE\nUVhaSGZBZv2FGythDOhcYcvnNjvE1GtjcdNreXnJnvoLO5BKQEqLptVomXH1DASCJ1Y9QYmpCWPF\nKS1elI+5J9yhi4dsdxA3X+h8I+z4BkpscM8R4O/pwgMDO7Bs1xnWO3G3bJWAlBYv3CucZ3s/y85z\nO3lri/XG41JanooEZNOOCADJd0DxRdi90GaHuPuqKEJ9XPnXot1OO2K2SkBKqzCyw0hGRo9k9s7Z\n/J5h/RsBlZbB39WfILcgvj/wPcVlxbY7UPt+4BcN6/9rk84IAG4GLY9dF8e2jIv8uOOUTY7RVCoB\nKa3Gs72fJdI7kqf/eJrT+acdHY7ihIQQPN/nefac38MrGxs5waElNBro/SCc2ATH1trsMKOT2hIf\n6s3MJXsoLnW+zpUqASmthrvendcGvkZxaTF//fWvTZs7SGmxBkQM4M74O5m3dx4fbP+g/jc0VuJ4\ncPeH3/9ts0NoNYK/D+tMxoVCPlvjfDenqgSktCqxbWJ5vs/z7Di7g39tsOJQPUqL8mjKo4yIHsFb\nW9/im33f2OYgBne46hE4sBz22W4Gjn6xAQyMC2TWL/vJLnCum1NVAlJanZEdRvLnTn/mm33fMH/v\n/PrfoLQ6Wo2Wf171T+LaxLHwoO06CtDrfgjoCIseh4LzNjvM0zd0Jq+4lJedbLRslYCUVunxHo+T\nGpzKv9b/i42nNzo6HMUJaTVaeof2Jv1sOsYyG9UcdAa48W3IPQ1f3gq5Vp9iDYC4EC8m9oti7oZj\nrD3oPN2yVQJSWiWdRsfrA18nxCOEqSun2nb4FaXZSgpOwmgykn423XYHadcLxnwIJ9NgVgrMvxMW\nPwXLXoC178CJzVY5zF+HxBHp786T3253monrVAJSWi1fV1/+M/g/ADz0y0NkF2U7OCLF2SQHJQOw\nJXOLbQ8UfyM8uA46DYeTWyHtS1j3Lvz8d/jgGpg9Ai7WOEi6xdwMWmaM6cbxCwU88c32Js0abC0q\nASmtWpRPFG8OepOTeSeZvGKybWbDVJqtNq5tiPaJZssZGycggIAYuPm/8Mh2ePoYPJcFf9sPQ2eY\na0cfDIJzB5t0iN7R/jw5tBM/bj/FG8v3WynwxlMJSGn1eoT04OX+L5N+Lp1HVz5qu/Z+pVlKCkoi\nLTONMpMD7qPxDILeD8CkZVBWAnPHQlFO/e+rw339o/lTSjhvrtjP27/sd2hNSCUgRQEGtx/M872f\nZ/XJ1UxdOdW2d8ErzUpKcAq5JbkcyD7guCCCOsNtn8O5A7D8hSbtSgjBi6O7clNiGK8u3ccdH21g\n67ELDklEOrsfUVGc1JiOYyiTZUxfN53JKybzxsA38DR4OjosxcGSgy9dB4rzi3NcIJH9zKMnrH0b\nut0G7Xo3elcGnYbXb0skJdKPV3/ey+h31xDgaaBDoCfB3q5WDLpuqgakKFXcGncrL/Z7kc2nNzPh\n5wlqyB6FMI8wgt2D7XMdqD6DngHPEFj+f00eQ04IwR292/P7k4OYcXNXrukUREmZie0Z9uuMoxKQ\nolzmxg438tY1b3E89zi3/Xgb60+td3RIigMJIUgOSmbLmS2O7zlmcIcBj5vHjzuwwiq79HbVM7Zn\nO2be0p3vHryKXx8fZJX9WkIlIEWpwdXhV/PFDV/gbfBm0tJJvLzhZfKMzj27pGI7ycHJZBZmkpGX\n4ehQIOkv4NsOVkwDkw1nbrUDlYAUpRYxbWKYN2Iet8Xdxhe7v2DE/0YwZ/cc8kvyHR2aYmcV14G2\nZm51cCSYR08Y+Hc4vR12/+DoaJpEJSBFqYO73p1nez/LnGFziPSJZMaGGQyYN4AJSybw3OrnHB2e\nYicxvjEEuAXwbtq7HM1xglGlu91qHkPu15fAEd3DrUQlIEWxQLfAbsweOps5w+bwp45/wmgysvrE\nakeHpdiJRmiYdc0sCkoKuGPRHY7/t9doYcCTkLUHdv7PsbE0gXD4RTUbS01NlZs2bXJ0GEoLJYTY\nLKVMtfdx1XntGEdzjvLIykc4kH2ANwa+wbXtr3VcMKYy+M9VIMvMw/hotFbbtb3Oa1UDUhRFsVB7\n7/bMHT6XMI8wvjvwnWOD0Whh4JNwdh/ssNGcRTamEpCiKEoDuOpcuabdNaw7uY6CkgLHBtN5FIR2\nN4+OUJzr2FgaQSUgRVGUBhoUMQijycjak2sdG4hGA8NfM88ntOx5x8bSCK1yKJ6SkhIyMjIoKipy\ndChW5erqSnh4OHq93tGhKEqLlhycjLfBm1+O/+LY60AA4anQ9yFY8xYExUPPexwbTwO0ygSUkZGB\nl5cXkZGRCCEcHY5VSCk5d+4cGRkZREVFOTocRWnRdBod/cP7sypjFWWmMrRW7ADQKNe+AFl7YdHf\nIGOjuZu2RxBoDeAdCq4+jo2vFq0yARUVFbWo5APm4UL8/f3JyspydCiK0ioMjBjIj4d+JC0rjZTg\nFMcGo9XB2C9h5T9h3XuwfV717eE9zOPIdbDfMDuWaJUJCGhRyadCS/xMiuKs+rXth16jZ+WxlY5P\nQGBOQoP/D/o9Cqd3QOEFKC2G84ch7Qv4/CYYMh2uetjRkVZqtQnI0bKzs5k0aRLp6ekIIfj4449Z\ntGgRCxYsQKPREBQUxOzZswkLC3N0qIqi1MBD70HP0J6sPL6Sx1Ifc54fgK4+5qkbquozGRY8CMue\nA3d/SBrvmNguo3rBOcjUqVMZOnQoe/bsYdu2bXTu3JnHH3+c7du3k5aWxogRI/jHP/7h6DAVRanD\noPBBHMs9xi/Hf3F0KHUzuMPNH0JUf/jpMfP1IiegEpADXLx4kVWrVjFx4kQADAYDvr6+eHt7V5bJ\nz893nl9UiqLUaGjUUDr4dOCRlY/w3OrnyDE2bbpsm9LqzElI52JOQk4wCo5KQA5w+PBhAgMDmTBh\nAmNuPDEAABWySURBVElJSUyaNIn8fPMIy8888wwRERHMmTNH1YAUxcn5uPgwf+R87ul6DwsPLuS2\nhbc593TuXsEw+AU48rtTjJ7gdGPBCSESgfcAV6AUeFBKuaF829PARKAMeFhK+XN9+6tpzKzdu3fT\nuXNnAKYt3Mmuk9b91RIf5s0LI7vUun3Tpk307t2b1atX06tXL6ZOnYq3tzfTp0+vLPPSSy9RVFTE\ntGnTGnTsqp9Nsb2GjpklhHgMeBUIlFKeLV9nlfNacazlR5fz6K+P8u8B/+a6yOscHU7tTGXw4bWQ\ncxKmbKyxi3ZrHgtuJjBNSpkIPF/+GiFEPDAW6AIMBd4VQji4833jhIeHEx4eTq9evQC45ZZb2LKl\n+nS/48eP59tvv3VEeIqNCCEigOuAY1XWtZjzurUbFDGIILcgFh5c6OhQ6qbRwvB/Q14m/DbToaE4\nYy84CVRcDPEBTpY/HwV8JaUsBg4LIQ4APYEmjYVRV03FVkJCQoiIiGDv3r3ExcWxYsUK4uPj2b9/\nP7GxsQAsWLCATp062T02xaZeB54AFlRZZ5PzWvn/9u49PqrqWuD4b4Vgw1NFQSwBkshTAgYJDysi\nyrsgGgWFYr3UB2CBFv20BaRWe7lWi15bClZBoFHg8hChUgQEFUR6BaQYkKePghWtgKH4QOAKWfeP\nc0KHyeQxyczsmWR9P5/5cGafM/usfTiZvfeZc/aOvWpJ1eh/WX/m7ppL/ol8LqpxkeuQiteoA7S/\nHTY/A1feAfVbOgkjHntA44DHReRjvEsVE/30RsDHAdsd9NMS0rRp0xg2bBjt2rUjLy+PBx54gAkT\nJpCZmUm7du1Ys2YNU6dOdR2miRARuRH4RFW3B62qVOd1VXdDxg2c1tOs2r/KdSil6/EQVK8Fq37h\n7IYEJz0gEXkVaBhi1SSgB3Cfqr4oIrcCs4GeYeY/AhgB0KRJkwpGGx1ZWVkEX8O3S26JrZTz+gG8\ny28VyT/uz+uqrvmFzWldrzXLP1zO7Zff7jqcktWuDz0e9Ibv2TobOt4d8xCc9IBUtaeqZoZ4vQT8\nB1A40cYLeJcjAD4BGgdkk+qnhcp/pqpmq2p2/fr1o1UMY85R3HkN/B1IB7aLyAG8c3ebiDTEzutK\nZ+BlA9lzdA/v/+t916GULvsuuKwHrJoAH7wa893H4yW4T4Fr/eXrgcL/xeXAEBH5joikA82BLQ7i\nMyYsqvquqjZQ1TRVTcO7zHalqn6GndeVTr/0fiRLMs+++ywnTp9wHU7JkpJg0BzvN6D5t8LKX8B7\npd6EGTHxeBPCPcBUEUkGTuJfclDVXSKyGNiNd3v2aFU94y5MYyrOzuvK56IaF/GD1j/g+d3Ps+3Q\nNsZ1GEf/9P7x+2B5jQvgRyvhlUmwdQ5smRGzXcfdc0CRVtpzQJVNZS5bPIrV8xLB7Dmg+Lf1s61M\neXsKe47u4fFuj9M3va/rkEp34hh8/h7SpHOVfQ7IGGMSXnbDbBYOWEha3TTm7ZnnOpyyqXEBNO5U\n+nYRYhWQMcZESZIkcVvL29h+ZDu783e7DifuWAXkyJ133kmDBg3IzMw8m/bzn/+cVq1a0a5dO3Jy\ncjh27BgA8+fPJysr6+wrKSmJvLw8V6EbY8IwsNlAaiTXYOHeha5DiTtWATkyfPhwVq9efU5ar169\n2LlzJzt27KBFixY8+uijgDcsT15eHnl5ecydO5f09HSysrJchG2MCVPd8+pyQ8YNrNy/kmMnj7kO\nJ65YBeRIt27dqFev3jlpvXv3JjnZuzGxS5cuHDx4sMjnFixYwJAhQ2ISozEmMoa0GsKpM6dY9sEy\n16HEFauA4tScOXPo169fkfRFixYxdOhQBxEZY8qr+YXN6diwI09vf5on//YkR08edR1SXIjH54Bi\na9UEb/70SGrYFvo9Vu6PP/LIIyQnJzNs2LnT5m7evJmaNWue87uRMSYx/Kbrb/j9tt/z3K7nWLh3\nITN7zSSrQdW+lG49oDiTm5vLihUrmD9/fpEH1xYuXGi9H2MSVMNaDXnsmsdYduMyalevzfS86a5D\ncs56QBXoqUTa6tWrmTJlCm+88QY1a9Y8Z11BQQGLFy/mzTffdBSdMSYSMs7P4IeX/5An//Ykuz7f\nRZuLYz8lTLywHpAjQ4cO5aqrrmLfvn2kpqYye/ZsxowZw1dffUWvXr3Iyspi1KhRZ7ffsGEDjRs3\nJiMjw2HUxphIGNxiMHWq12H2ztmuQ3HKekCOLFiwoEjaXXfdVez23bt3Z9OmTdEMyRgTI7XPq81t\nrW5j9ruz+ejLj2hat6nrkJywHpAxxjgwrPUwqidVZ8rbUzh0/JDrcJywCsgYYxy4uMbF3Jt1Lxs/\n2UjfpX156H8f4tSZU67DiimrgIwxxpG7297Nyzkvc0vzW1j6/lIW71vsOqSYsgrIGGMcSq2Tyi+7\n/JLOl3Zm1ruz+Obbb1yHFDNWARljTBwYnTWaoyePsmjfItehxIxVQMYYEwfaN2jP1d+9mjk753D8\n2+Ouw4kJq4AcSktLo23btmRlZZGd7U0++MILL9CmTRuSkpIInPEyPz+f6667jtq1azNmzBhXIRtj\nomh01miOnTrGqLWjeO2j1zhdcNp1SFFlFZBj69atIy8v72xlk5mZydKlS+nWrds526WkpDB58mSe\neOIJF2EaY2Kgbf22PNjlQQ59c4hx68cxcu1IVNV1WFFjFVCcad26NS1btiySXqtWLbp27UpKSoqD\nqIwxsXJry1tZefNKxl05ji2fbWHtR2tdhxQ1VgE5JCL07NmTDh06MHPmTNfhGGPiRHJSMsPbDKfZ\nBc2Yum0q3xZ86zqkqKjyQ/H8dstv2Xt0b0TzbFWvFeM7jS91u40bN9KoUSMOHz5Mr169aNWqVZFL\nb8aYqqlaUjXu63Afo18bzZL3ljC0VeUbCd96QA41atQIgAYNGpCTk8OWLVscR2SMiSfXNLqGjg07\nMm3bNGZsn8Hhbw67DimiqnwPqCw9lWg4fvw4BQUF1KlTh+PHj7NmzRp+9atfOYnFGBOfRISHrnqI\nyW9NZnredGbsmMHsPrNp36C969AiwnpAjhw6dIiuXbtyxRVX0KlTJ/r370/fvn1ZtmwZqampvPXW\nW/Tv358+ffqc/UxaWhr3338/ubm5pKamsnv3boclMMbEQtO6TZnVZxYv57xMvZR6PLr5Uc4UnHEd\nVkRU+R6QKxkZGWzfvr1Iek5ODjk5OSE/c+DAgShHZYyJV03qNuH+Dvcz/s3xvPThS9zc/GbXIVWY\n9YCMMSZB9EvvR/sG7Zm6bSr5J/Jdh1NhVgEZY0yCEBHGdxzPF6e+oPeS3vzsjZ/x8Vcfuw6r3KwC\nMsaYBNLm4jYsGrCIQS0GsfGTjYzfMJ4CLXAdVrlU2QqoMg5vURnLZIwpqmW9lkzsPJFJnSfx7ufv\n8uL7L7oOqVyqZAWUkpJCfn5+pfrCVlXy8/NtqB5jqpABGQPIviSbqdum8q+T/3IdTtiq5F1wqamp\nHDx4kCNHjrgOJaJSUlJITU11HYYxJkZEhEmdJzH4L4MZtHwQ38/4Pre3vp1Lal3iOrQycVIBichg\n4GGgNdBJVbcGrJsI3AWcAX6iqq/46R2AXKAGsBL4qZazC1O9enXS09MrUgRjwiIiDwP3AIWtngdU\ndaW/LuQ5b0xZNLuwGU/1fIoFexYwb/c8Nv1zEwv6LyA5Kf77F64uwe0EbgY2BCaKyOXAEKAN0Bf4\no4hU81c/jfcH3Nx/9Y1ZtMZExu9UNct/FVY+JZ3zxpTJ9777Pab1mMaUa6ew9+he5u2e5zqkMnFS\nAanqHlXdF2LVjcBCVT2lqvuBD4BOInIpUFdVN/m9nueBm2IYsjHREvKcdxyTSVA9m/Ske+PuPJX3\nFP/48h+uwylVvN2E0AgIvKn9oJ/WyF8OTjcmkYwVkR0iMkdELvTTijvnjQlb4W9CSZLETS/dxNjX\nx7LvaKi2fnyI2kVCEXkVaBhi1SRVfSla+/X3PQIY4b/9WkQ+A74I2uz8gLTzg9aHWncx8HkFQwve\nT3m2C7WuLGnFlTcRyhcqPdzyQcXLGCq2poULJZ3zeJeQJwPq//vfwJ3h7DzEee3ym6Ws/9fxwnW8\n0d5/yPzf4R2mM708+TUXkb+paocKR1YSVXX2AtYD2QHvJwITA96/AlwFXArsDUgfCswIYz8zS0oL\nXh9qHbA1AuUtEke425VWlnDKlCjlK608ZSlfJMpY1vKVIZ80YKe/HPKcj8R+ovmK1LGoKvFGe//R\nyD8WxyzeLsEtB4aIyHdEJB3vZoMtqvpP4EsR6SIiAtwBhNOL+kspacHrS1pXEWXNq6TtSitLcWnF\nlSkRyhcqPZ7LV4T/O2ahHLwbcaCYc778IcZMJI9rLLiON9r7j0b+UT9m4td0MSUiOcA0oD5wDMhT\n1T7+ukl4lyZOA+NUdZWfns2/b8NeBYzVGAYvIltVNTtW+4u1yl4+cFtGEZkLZOFdgjsAjPQbVsWe\n88ZUdk4qoEQkIiNUdabrOKKlspcPqkYZjUkkVgEZY4xxIt5+AzLGGFNFWAVkjIkJEWktIs+IyBIR\nudd1PGXhMuaqcLysAjKmChGRxiKyTkR2i8guEflpBfKaIyKHRWRniHV9RWSfiHwgIhPg7Agoo4Bb\ngavD2E+KiGwRke1+zL92EPMQ4BERWeFg32EdLz+/C/xKYK+I7BGRq+IyZpf3xifyC28ooGeBRUBv\n1/FEoXytgWeAJcC9ruOJUhlrAVuBAa5jiWGZLwWu9JfrAO8Blwdt0wCoE5TWLERe3YAr8Z9pCkiv\nBnwIZADnAdsL9wEMxLuL9QdhxCxAbX+5OrAZ6BLjmPcAfwVWhMgzro6X/7nngLv95fOAC+IxZusB\nBSiuti+mpv+zqt4DjAJucxFvuMIsX7lbX66EUz7feGBxbKN0S1X/qarb/OWv8L5Yg4f+uRb4s4h8\nB0BE7sF7bCI4rw3A0RC76QR8oKp/V9X/AxbijXmHqi5X1X7AsDBiVlX92n9b3X8F3z0VtZiBbcCn\neF+6ocTV8RKR8/Eqjtl+Hv+nqsfiMWargM6VS9Ao2/7IxE8B/YDLgaH+CMaFfumvTwS5hFE+ERkI\nvIw3/UUiyKWM5RORXsBu4HCsg4wXIpIGtMfrUZylqi/gjciwSESG4T2jNDiMrEOObyci3UXkDyIy\ngzDPKRGpJiJ5eP9fa1U1ZjED6/CeV9wU6oNxeLzS8ab9+JOIvCMis0SkVjzGHP8TRsSQqm7w/ygD\nna3pAURkIXCjiOwBHgNWFbYo41045QN2q+pyYLmIvAz8TyxjLY8wy1cb7xLc5cAJEVmpqgUxDNcp\nEakNvIj34OuXwetVdYp/rJ4GLgvogZSbqq7HG36rPJ89A2SJyAXAMhHJVNWdQdtEPGa882Stqv7Y\nr4x+Vkx88XS8kvEum41V1c0iMhWYADwYlL/zmK0HVLriRiseC/QEBonIKBeBRUjEW6txJmT5VHWS\nqo7Dq1ifrWKVT3W8yme+qi4tZptrgExgGfBQmLv4BGgc8D7VT6sw/1LSOkLMBxalmK8GBorIAbzL\nTNeLSJHJduLseB0EDgb0EpfgVUjniIeYrQIqJ1X9g6p2UNVRqvqM63giTVXXq+pPVHWkqibKJcaw\nqWquqpb7zqZEIyKC99vAHlV9spht2gMz8XqKPwIuEpH/CmM3b+ONppwuIufh3UG2vAIx1/d7PohI\nDaAXsDcWMavqRFVNVdU0P+11Vb09FvsO4/PnUNXPgI9FpKWf1APvcnPcxWwVUOmi1pqLE1a+quVq\n4Id4Lfk8//X9oG1qAreq6od+z/AO4KPgjERkAfAW0FJEDorIXQCqehoYg/cbwx5gsaruqkDMlwLr\nRGQH3hff2hCNBpcxx9vxAu8KzXz/mGUBv4nHmG0oniD+bwgrVDXTf5+Md6tqD7wvrrfxbi+s6Ani\nhJUvsctnTGViPaAAoWr7KLVOnLDyJXb5jKlsrAdkjDHGCesBGWOMccIqIGOMMU5YBWSMMcYJq4CM\nMcY4YRWQMSbiROQn4k0DMN91LJEiIg+LyCci8p/+++EiMj1om/Uikl1CHvNF5KiIDIp2vInAxoIz\nxkTDj4GeqnowMFFEkv1b4xPV71T1ifJ+WFWHiUhuBONJaNYDcsxaisXmYS3FBCUiz+DNE7NKRO7z\nz4e5IvJXYK54I1s/LiJvi8gOERnpf05EZLp4U2e8KiIrC///ReSAiFzsL2eLyHp/uZZ403BsEW/k\n5xv99OEislREVovI+yIyJSC+viKyTbwJ7l4TkSR/m/r++iTxpu6oX4FjMDBgpIl9IrK/vHlVZtYD\ncs9aiiFYSzFxqeooEekLXKeqn4vIw3ijjndV1RMiMgL4QlU7ijcfzV9FZA3e1BAt/W0vwRu/bE4p\nu5uENz7bneKNF7dFRF7112X5eZ4C9onINOAk3kSS3VR1v4jUU9UC8QYYHQb8Hm+Q4e2qeqQMxb1N\nRLoGvG/mH4Pl+GOjichi4I0y5FXlWA/IIWspWkuxClmuqif85d7AHeLN77MZuAhojjeJ2gJVPaOq\nnwKvlyHf3sAEP6/1QArQxF/3mqp+oaon8SqzpkAXYIOq7gdQ1cLJ1ubgjYcG3tw4fypjuRapalbh\nC2+G3bNE5BfAico8oG9FWA/IIWspWkuxCjkesCx4c9W8EriBFB0UNdBp/t1gTgnK6xZV3ReUV2e8\n87nQGUr4vlPVj0XkkIhcjzeHVJlnIC2OiPTEm+StW0XzqqysBxR/rKVoKrtXgHvFm5cIEWkh3oyd\nG/AaKtVE5FLguoDPHAA6+Mu3BOU1VkTEz6t9KfveBHQTkXR/+3oB62YB84AX/Anwyk1EmuLNxDs4\n4O/ZBLEeUPyxlqKp7GYBacA2v+I4AtyENzHa9XiNoH/gDSxb6NfAbBGZzLkzbk7G643vEJEkYD8w\noLgdq+oR/8rCUn/7w3jzC4HXE/8TZW9UlWQ4XoPxz37d+KmqlvR3WyVZBRTfCluKr6vqtyLSAm9K\ngQ3ASBF5DmiA11IsnDL7AF5LcRWhW4pjVVVFpL2qvlPCvjcBfxSR9IBLcIW9oMKW4twIthT7WEux\n8vAncCtcfjhoXQHwgP8KNqZwIfAmFFV9E2gRYj8ngJEh0nOBwM8PCFhehff3EewKvEvKe0OsKyJ4\nH35ad39xK16laUpgl+Di2yy81uA2EdkJzMBrNCwD3vfXPU/RluJUEdmK15spNBmojtdS3OW/L5b/\nu05hS3E7sChg9XKgNpFvKeaJSCJP/20SlIhMwJumfGIJm30NjBD/8YJy7mc+cC3eb6xVnk3HUAn4\nLcUVqrokRvvLxrvN+ppi1j8MfF2R27D9fHKJYbmMMbFlPSATFmspGmMixXpAxhhjnLAekDHGGCes\nAjLGGOOEVUDGGGOcsArIGGOME1YBGWOMccIqIGOMMU78P1WMLqnS1hJdAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f11c8f98dd8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" for numtaps in tapslist:\n",
" # 窓関数法によるフィルタの設計\n",
" b = scipy.signal.firwin(numtaps, nfc, None, 'triangle' )\n",
" # フィルタ係数とフィルタされた信号のFFTを見る\n",
" show_freq_response(b, fs, fc, numtaps)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ブラックマン窓\n",
"カットオフ周波数付近のキレが多少悪いが、帯域外のフロアは抜群に低い。\n",
"$$ w(x) = 0.42 - 0.5 cos 2 \\pi x + 0.08 cos 4 \\pi x $$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nA2elAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f11c8e214e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" for numtaps in tapslist:\n",
" # 窓関数法によるフィルタの設計\n",
" b = scipy.signal.firwin(numtaps, nfc, None, 'blackman' )\n",
" # フィルタ係数とフィルタされた信号のFFTを見る\n",
" show_freq_response(b, fs, fc, numtaps)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# 参照リンク\n",
"このノートは、[人工知能に関する断創録:SciPyのFIRフィルタの使い方](http://aidiary.hatenablog.com/entry/20111102/1320241544) に掲載されているプログラムを改変して作成した。"
]
}
],
"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.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment