{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adaptive Filters\n",
    "\n",
    "It is desired to come up with an FIR filter whose coefficients are adjusted on the fly in such a way as to minimize the power in the difference between the output of the filter with adapted coefficients and an unknown filter.  To do this, the adaptive filter monitors both the input (which goes to both filters) and the output of the unknown filter.  For the derivation, watch this [video](https://www.youtube.com/watch?v=wUV3n0GU0Og).   Here is an example octave script written at Virginia Tech by Sundar Sankaran and Louis Beex.\n",
    "\n",
    "```%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
    "%                                                    %\n",
    "%                LMS Algorithm                       %\n",
    "%                                                    %\n",
    "% Written By: Sundar Sankaran and A. A. (Louis) Beex %\n",
    "%             DSP Research Laboratory                %\n",
    "%             Dept. of Electrical and Comp. Engg     %\n",
    "%             Virginia Tech                          %\n",
    "%             Blacksburg VA 24061-0111               %\n",
    "%                                                    %\n",
    "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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QPwl4YxXn9yTGlKpVL1ed9ayy2Qy9Xqd8gjApCVncnM3n986IZ3Td6WGbDYbclMAILoSkhkT5WtxVQBAP6FFUewzj0ACACiBQAIwBXH9Y3+07zVOb8RpTgSBBADqimtyeyKQAEAhcap4hkUgAQCUQCABSBwFx8EUbFL4CCQAgBIIJABQVNLKJgIJAEaRtLQIgffSQQAAP0aOJfKsFxUSAKgi4Sk1kUDqdDquC/2Zptl9EXTXXQAAJhJIR0dHr169cu7m8/larba9vd1qtXrvAgDGEZu6KvhjSJubm5ZlffHFF/Juo9HQNG13d9e27Uql0ul0uu9mMpnAGwAAiKLgK6R6ve6kkRDCNE15fT9N09rttutu4FsHAERUGJMaNE2TN1ZWVnrveprpEkILAQDjCGSnHUwgtVotwzBqtZrns84EB1kSue56uusSSAsBAJMTyE47mGNImUym39GgdDptmqYQwrZtXddddwPZOgDEQGzmJoxs4ifGZrPZarVqGEa73d7Z2XHdnfTWAQBRMZFAKpfL3Xfr9Xqr1fr888/l0SPXXQCIusCLm2RWSyEtHeQa0GO2NwDAhaWDAABKIJAAIDzJHIvziUACgDAQRfcikAAASiCQAABKIJAAICQ+R+0SO7hHIAEAlEAgAQCUQCABAJRAIAEAlEAgAQCUQCABAJRAIAEAlEAgAQCUQCABAJRAIAEAlEAgAQCUQCABAJRAIAEAlEAgAQCUQCABAJRAIAEAlEAgAUDYEnsJvsEIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASJhJInU7Htu0BLzBNs9PpTGLTyTEzMzPtJkQDHeUHveQTHTVRP5vEhx4dHd3c3JTL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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "% Adaptive LMS FIR Filter Demo\n",
    "\n",
    "randn('seed', 0) ;\n",
    "rand('seed', 0) ;\n",
    "\n",
    "NoOfData = 1000 ;       % Set no of data points used for training\n",
    "Order = 32 ;            % Set the adaptive filter order\n",
    "\n",
    "Mu = 0.3 ;             % Set the step-size constant\n",
    "\n",
    "x = 100*randn(NoOfData, 1) ;% Input assumed to be white.  You can change the scale factor to test normalization.\n",
    "h_unkn = rand(Order, 1) ;    % System picked randomly\n",
    "r = filter(h_unkn, 1, x) ;   % Generate output (desired signal)\n",
    "\n",
    "% Initialize LMS\n",
    "\n",
    "h = zeros(Order,1) ;\n",
    "\n",
    "% LMS Adaptation\n",
    "\n",
    "for n = Order : NoOfData\n",
    "        D = x(n:-1:n-Order+1) ;\n",
    "        y(n) = h'*D ;\n",
    "        e(n) = y(n) - r(n) ;\n",
    "        h = h - 2*Mu*e(n)*D./(D'*D); %  Add this for normalization.   ./(D'*D) ;\n",
    "        h_err(n) = (h_unkn - h)'*(h_unkn-h) ;\n",
    "end ;\n",
    "\n",
    "% Plot results\n",
    "\n",
    "figure ;\n",
    "plot(e) ;\n",
    "title('Learning Curve') ;\n",
    "xlabel('Iteration Number') ;\n",
    "ylabel('Output Estimation Error') ;\n",
    "\n",
    "figure ;\n",
    "plot(20*log10(abs(e(100:NoOfData)))) ;\n",
    "title('Learning Curve') ;\n",
    "xlabel('Iteration Number') ;\n",
    "ylabel('Output Estimation Error in dB') ;\n",
    "\n",
    "figure ;\n",
    "plot(h_err) ;\n",
    "title('Weight Estimation Error') ;\n",
    "xlabel('Iteration Number') ;\n",
    "ylabel('Weight Error') ;\n",
    "\n",
    "figure ;\n",
    "plot(20*log10(h_err)) ;\n",
    "title('Weight Estimation Error') ;\n",
    "xlabel('Iteration Number') ;\n",
    "ylabel('Weight Error') ;\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that the formula $$ \\Delta h_n(k) = -2 \\mu e(n) x(n-k) $$ scales up two orders of magnitude bigger if you make $x(k)$ an order of magnitude bigger, $\\Delta h_n(k)$ gets bigger by two orders of magnitude, because $e(n)$ gets bigger with $x(k)$ and so does $x(k)$.  This is because both $e(n)$ and all the values of $x(n-k)$ both scale up by an order of magnitude.  That is like someone with control of the input changed our step size $\\mu$ by two orders of magnitude, by increasing the loudness of the input by one order of magnitude.  This is likely to make our algorythm diverge.  So we need to normalize the algorithm by dividing by the size of the input $x(k)$ for $k \\in \\{0, 1, 2, ..., N-1\\}$ somehow.  The best way to do that is to remember that $x(k)$ is a vector.  Let's just divide by its magnitude squared, $\\vec x \\cdot \\vec x = \\sum_{n=0}^{N-1} x^2(k)$.  In the code above, just add the the normalization as specified it the comment in the appropriate annoted place above.  Then you can try the script adding 10* to the place where $x(k)$ is generated, and see that it now makes no difference!  This algoritym is known as the normalized Least Mean Square (LMS) adaptive filter.  It approximately minimizes the mean square of the error signal, $e_n$.  The LMS adaptive filter is the basis for a lot of \"learning\" filters used in noise cancelation.\n",
    "\n",
    "Adaptive filters are commonly used in speech compression.  It human speech, the vocal cords and vocal folds in the throat make a buzzing sound sawtooth like sound.  This sound is then filtered by the tongue and mouth cavity to produce speech.  The purpose of speech compression is to send speech with a much smaller number of bits than sending the actual waveforms making up the speech.  So an adaptive filter is made that mimics the filter of the tongue and mouth, and the sawtooth frequency and FIR filter coefficients are sent for each phoneme.  In the open source codec2 software, the sawtooth type wave in changed in time about every ten milliseconds, but the filter is changed only about every forty milliseconds.  The pitch frequency, the volume and the coefficients are then sent to the computer that wants to play the voice, and it uses the information to reconstruct the sounds that the human made at the beginning. There is a nice description of this on [SDR Academy 2018](https://www.youtube.com/embed/CLC4VWjHdfw?start=2480). \n",
    "\n",
    "There are many other applications of adaptive filters to echo cancellation, adaptive channel equalization, noise removal, positive feedback cancelation, etc.  For examples, and the block diagrams showing how the systems work, see [Applications of Adaptive Filtering, by Avalos, Sanchez and Velazquez](https://www.intechopen.com/books/adaptive-filtering-applications/applications-of-adaptive-filtering)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Octave",
   "language": "octave",
   "name": "octave"
  },
  "language_info": {
   "file_extension": ".m",
   "help_links": [
    {
     "text": "GNU Octave",
     "url": "https://www.gnu.org/software/octave/support.html"
    },
    {
     "text": "Octave Kernel",
     "url": "https://github.com/Calysto/octave_kernel"
    },
    {
     "text": "MetaKernel Magics",
     "url": "https://metakernel.readthedocs.io/en/latest/source/README.html"
    }
   ],
   "mimetype": "text/x-octave",
   "name": "octave",
   "version": "4.4.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
