Skip to content

Instantly share code, notes, and snippets.

@RicherMans
Created November 27, 2019 04:04
Show Gist options
  • Save RicherMans/7e9ba44ab72c334966a747e32db884ec to your computer and use it in GitHub Desktop.
Save RicherMans/7e9ba44ab72c334966a747e32db884ec to your computer and use it in GitHub Desktop.
CQT
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CQT transform example\n",
"\n",
"\n",
"Taken from http://doc.ml.tu-berlin.de/bbci/material/publications/Bla_constQ.pdf\n",
"\n",
"$$\n",
"f_s = \\text{Sampling Rate}\\\\\n",
"f_k = \\text{Center Frequency}\\\\\n",
"f_max = \\text{Max Frequency} = \\frac{f_s}{2}\\\\\n",
"f_min = \\text{Min Frequency} \\\\\n",
"$$\n",
"\n",
"$$\n",
"K = \\lceil{b \\log_2(\\frac{f_{max}}{f_{min}})}\\rceil\\\\\n",
"Q = (2^{1/b} - 1)^{-1}\\\\\n",
"N_k = Q \\lceil{\\frac{f_s}{f_k}}\\rceil\\\\\n",
"x_{cq}[k] = \\frac{1}{N_k} \\sum_{n < N_k} x[n] w_{N_k}[n] e^{-2\\pi jn Q/N_k} \\\\\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import librosa\n",
"from IPython.display import set_matplotlib_formats\n",
"set_matplotlib_formats('png', 'pdf')\n",
"%matplotlib inline\n",
"sns.set()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DFT 例子\n",
"\n",
"$$X_{k} = \\sum_n^N x[n] e^{-2\\pi jnk / N}$$\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def dft(x):\n",
" N = x.size \n",
" n= np.arange(N,dtype=float) \n",
" k = n.reshape((N,1)) \n",
" e = np.exp(-2j* np.pi * n * k / N) \n",
" return np.dot(e, x * np.hamming(N)) "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAD7CAYAAABwggP9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXwU15Xo8V+3FrQL7fuGkC5CLDKrBRiwMbbBbMY42LGNY2ccL3lJZjJ+k3kzk8TjfJLJJHnvzXPGGWfieELsGOIFA8ZsBoPZ9327SGhDEhJCAiQhtHa/P9R4FCy0llS9nO/now+tW1Wtc9SoT9+6Vfda7HY7QgghxO2sZgcghBDCOUmBEEII0SkpEEIIITolBUIIIUSnpEAIIYTolLfZARhkCDARuAS0mRyLEEK4Ci8gDjgINN2+0V0KxERgp9lBCCGEi7oH2HV7o7sUiEsAV6/ewGbr230dERFBVFfXGxqUs/PEnMEz85acPUdv8rZaLYSFBYLjPfR27lIg2gBsNnufC8St4z2NJ+YMnpm35Ow5+pB3p6fmZZBaCCFEp6RACCGE6JQUCCGEEJ0ybAxCKfUr4FEgFRittT7VyT5ewOvAQ4Ad+LnW+q3utgkhhBh8RvYgVgPTgeIu9nkSGA5kALnAq0qp1B5sE0IIMcgMKxBa611a64vd7LYU+J3W2qa1rqK9qDzWg23Cycg08UK4v8G+zDWZv+xhlABJPdgmBpnNZqfgUi15F69RfuUG5dUNVF+/SVOrjdZWGzabneBAX4YG+hIWPITUuBDSE0IYFhdKgJ+7XD0thGdzq7/kiIigfh0fFRVsUCSuo2PObTY7h89WsuNoGUd0JXUNLQCEhwwhKSaYzJQw/Hy98fVp73her2+mpraRy1cbOLG7ELsdrBYYmxHFjHGJ5I6OI8DPx5S8uuPpr7Wn8MScwbi8B7tAlAAptM/7AX/Za+hqW49UV9f3+caYqKhgqqrq+nSsq7qVc/3NFnYcL2fbkTKqaxsJ8vdhTHoEY9IjGJkaTpB/92/yN5taKSiv5VzJVfafqeTfVh7lNx8eZ+roOOZMTiZyqP8gZNQznvxaexJPzBl6l7fVaunyg/VgF4gPgOeVUquACGAR7QPb3W0TA6CppY1P9xaxfl8JN5taGZE8lKX3DScnIxJvr94NT/kP8SY7LZzstHAWTx/GhfJadh4vZ4fj6+6RMSycluZUhUII0TUjL3N9HVgMxAJblFLVWutspdR64Eda60PAO8BkIM9x2Gta6wLH4662CQPZ7Xb2n6lk1Y4CrlxvZGx6BItnpJMU3b9TdLdYLBaGJ4QyPCGUhdPS2HTgIl8cK+PAucvMy03hockp+HjLLThCODuLm1yNkgoUyimm7l2rb+KPGzXH8q+QkTSUxfekoZLDBvzn1tQ2snJrHod0FTFh/nxjzohB+bmd8ZTXuiPJ2XP08RRTGlB0+3a3GqQWXdt/ppJ3Nmla2mwsvW84T8wZSc0gzXYZHuLHy4+M5lRhNe9uOs8vVhxl/pRU5k9NxcsqvQkhnJEUCA/Q2mbjz5/ns/VwKekJITw3N4u4iEC8rJZBj2VUWgSvPjeRP20+z9rdRZwpvsqLC7IJD/Eb9FiEEF2Tj25u7lp9E79ccZSth0t5YGISP/j6OOIiAk2Nyc/Xm2/OG8nz80dSerme15Yf4kL5dVNjEkJ8lRQIN1ZWVc9Plh+iuLKOFxZk8/isjF5fnTSQcrNj+adlExjiY+UX7x3lwNlKs0MSQnTgPO8WwlB5pdf4l3ePYLPb+YenxjN5ZIzZIXUqPjKQf1o2gZTYYN5cc5r1+3p164sQYgBJgXBDx/Ku8KuVxwgO9OUfnxpPcoxz300aHODL/3z8LiaPjOHD7Rf4eEeBzPUkhBOQQWo3c+R8Ff+x+hTJMUF877GxhAT4mh1Sj/h4W3l+3kiG+Fj5ZE8RLa02Hrs3HYtl8AfShRDtpEC4kWN5V/iP1adIjQ3m+0tz8B/iWi+v1Wph2UMj8PHyYuOBElrbbDxxf4YUCSFM4lrvIOKOTlyo5jerT5IcE8TffM31isMtVouFr8/OwMvLwuaDF/Ef4s0j04eZHZYQHsk130XEX8grvcYbH58kITKI7y/Ncfnpti0WC0vvG87NplY+2VNEoJ83D0xKNjssITyOa7+TCC5V3+D1D08QHjyE7y8dS6CTTq/dWxaLhWceGsHNplZWfp5PgJ8P08bEmR2WEB5FrmJyYdfrm/g/fz6Ol9XC3yzNIdhFBqR7ymq18Pz8bLJTw1i+8Rxni2rMDkkIjyIFwkU1Nbfxbx+coP5mC997bCzRbjqNto+3lZcfGU1seABvfHyKS9U3zA5JCI8hBcIF2e12fr/+LCWX63hpUTZpcSFmhzSg/Id4870lY/DysvD/PmwvikKIgScFwgV9ureYQ+cus2RmOmPSI80OZ1BEDvXnO4vHUFPbxG8+Pklrm83skIRwe1IgXMzx/Ct8vKOAySNjeMjDruwZnhjKs3NGcK7kGh99ccHscIRwe0auKJcJLKd9udBqYJnWOu+2ff4IjOnQNAZYpLVeq5R6FXgZKHds2621/rZR8bmDypoG/vOT0yTFBPGNOSM88gay3FGxXCi/zqYDF0mPD2XCiGizQxLCbRl5meubwBta63eVUk8BvwXu67iD1nrZrcdKqbHA58CmDrv8UWv9ioExuY2W1jb+Y/UprBYL/2PxaIb4eJkdkmken5VBcUUdv19/loSoQNOnLxfCXRlyikkpFQ2MA1Y4mlYA45RSUV0c9k3gT1rrJiNicHcrP8+n5HI935w3kshQ97xiqae8vay8tGgUvt5W3vj4FE0tbWaHJIRbMqoHkQSUaa3bALTWbUqpckd71e07K6V8ga8D99+26XGl1ANABfBjrfXe3gThWFu1z6KinHPW053Hyth2pIxHZg5ndm6aoc/trDl3JyoqmL97egI/+s+9rN5dxP94LKfXx3saydlzGJW3WXdSLwJKtNbHOrS9CfxUa92ilJoNrFFKZWmtq3v6pNXV9dhsfZsm2lkXOL987Sav//ko6fEhzJmYaGiMzppzTyWE+fPQpGQ27CtmeFww41XPxiNcPe++kJw9R2/ytlotXX6wNuoqpotAglLKC8Dxb7yjvTPPAW93bNBaV2itWxyPP3McO8qg+FxSm83GW5+cwWKx8MLCbKdaDc5ZPDJ9GKmxwfxhwzlqahvNDkcIt2LIO47W+jJwDHjC0fQEcFRr3dnppUTgHuC929oTOjzOAVIBbUR8rmr9vhLyy67z9AOZHj/ucCfeXlZeWJhNq83Of35yps89SCHEVxn5kfRF4DtKqfPAdxzfo5Rar5Sa0GG/Z4BPtNa3T6zzM6XUKaXUceB3wNNa6woD43MpRRW1rN1VyKSsaO7OjjU7HKcWExbAU7MzOX/xGpsP3qnTKoToLcPGILTW54DJnbTPve37n97h+GeMisXVNbW08btPzhAS6MvTDyqzw3EJU0bFcuR8Fat2FDA6PYKESLn0VYj+kpPaTujjHQVcqm7guYez3Gb67oFmsbSvRufn68Xv152hzSZTcQjRX1IgnMyFsut8dvAi996VQHZquNnhuJRQR4+rqKKO9XuLzQ5HCJcnBcKJtLS28fb6s4SHDGHJzHSzw3FJE0dEMykrmrW7iyi9XG92OEK4NCkQTmTt7iIuVTfwzJwRLrumtDN4cnYm/kO8+cPGc3JVkxD9IAXCSRRV1LJhXwnTxsQxKi3C7HBcWnCAL1+/P4OC8lq2Hik1OxwhXJYUCCfQZrOxfIMmOMCHx+8bbnY4bmHyyBhGD4tg1RcFXLl+0+xwhHBJUiCcwOeHyyiurOPrszMJkKuWDGGxWHj6wUwA3tl0HrtdTjUJ0VtSIExWU9vIqp0FjB4WwYQuJ78VvRUZ6s/iGcM4WVDNwXOXzQ5HCJcjBcJkf/rsPHabnaceyPTIBYAG2qxxiaTEBLNiax43m1rNDkcIlyIFwkRH86o4mneFhdPSiBoqcy0NBKvVwlMPZlJb38yaXYVmhyOES5ECYZLmljZWbMkjITKQ2ROTzA7HraXHhzIjJ54th0q5KPdGCNFjUiBMsmF/CVeuN/Lk7EyZxnsQLJ6RToCfN+9s0nJvhBA9JO9MJqi6dpP1+4qZlBXNiJQws8PxCEH+Pjx2bzr5ZdfZdlhmfBWiJ6RAmGDl1jysFgtfu1fueRhMU0fHMSw+hOWfnpEBayF6QArEIDtZUM3RvCssmJpKeIif2eF4FKvFwtfvz+RqXRPr9hSZHY4QTs+wCX+UUpnAciACqAaWaa3zbtvnVeBloNzRtFtr/W3HNi/gdeAhwA78XGv9llHxOYPWNhsrt+YRE+YvA9MmGRYfwqyJSWw+eJHpY+OJCQ8wOyQhnJaRPYg3gTe01pnAG8Bv77DfH7XWOY6vb3dofxIYDmQAucCrSqlUA+Mz3bajZVyqbmDprAwZmDbRM3NH4uNtZeXWvO53FsKDGfIupZSKBsYBKxxNK4BxSvXq1uClwO+01jbHWtargceMiM8Z1N9sYe2uQrJTwxibLpPxmSksxI/5U1M5fqGakwXVZocjhNMy6mNsElCmtW4DcPxb7mi/3eNKqRNKqc1KqdwO7clAx1VeSu5wvEtas7OQhqZWHp+VIXdMO4HZE5KIDvPn/c/zZfU5Ie5gsBcdeBP4qda6RSk1G1ijlMrSWhvyMS4iIqhfx0dFBRsRxleUVNSy7VgZc3JTyRkZNyA/o68GKmdnFxcbyl8tHMXP/nCQowVXmZObanZIA84TX2tPzBmMy9uoAnERSFBKeWmt2xwDzvGO9i9prSs6PP5MKXURGAV8QXuPIQU46Njl9h5Ft6qr6/t8E1RUVDBVVXV9OrY7b350giE+Xjw4IXHAfkZfDGTOzuxW3ukxQWQmhvLO+jNkJ4W69SJNnvhae2LO0Lu8rVZLlx+sDTnFpLW+DBwDnnA0PQEcdYwlfEkpldDhcQ6QCmhH0wfA80opq2PsYhHwkRHxmelMUQ0nC6qZPyWV4ABfs8MRHVgsFpbOyqCuoYX1+2QNayFuZ+RHpheB5UqpHwFXgWUASqn1wI+01oeAnymlxgNtQDPwdIdexTvAZODWpSWvaa0LDIxv0Nnsdt7flk9EiB+zxid0f4AYdGlxIeRmx7DpwEVm5MQTGSqTJgpxi2EFQmt9jvY3+Nvb53Z4/EwXx7cBLxkVjzPYd7qCksp6vjV/JD7eXmaHI+7g0RnpHNJVfLyjgOfnZ5sdjhBOQy7GHyDNLW2s2lFASmwwk0bGmB2O6EJ4iB/3T0hk3+lKSio975y1EHciBWKAbDlcSk1tE0vvHY5VLmt1eg/fnUKAnzcfbL9gdihCOA0pEAOg/mYLn+4tZmx6hMzW6iIC/HyYPyWV04U1nC6qMTscIZyCFIgBsH5fMY1NrTw6I93sUEQv3DsukchQPz7Ylo/NLmtGCCEFwmA1tY1sPVxK7qhYEqP7d+OeGFw+3lYemT6Mksp6DpypNDscIUwnBcJga3YVYrfbWXRPmtmhiD6YPDKG5OggPt5ZQGubTMEhPJsUCAOVX7nBrpOXuPeuRLme3kVZLRYWzxhG1bVGdh4v7/4AIdyYFAgDfbyjgCE+XsybkmJ2KKIfRg+LICMxlLV7imhqaTM7HCFMIwXCIIWXajl8voqHJiXLlBouzmKx8OiMdK7XN7P1cKnZ4QhhGikQBlm1o4Agfx9ZKc5NZCYNZUx6BBv2FdPQ2GJ2OEKYQgqEAXTJVU4X1vBwbopbzwjqaRZPH8aNxlY27C8xOxQhTCEFop/sdjsf7ShgaJAv994lE/K5k+SYYCZlRbPlUCm1Dc1mhyPEoJMC0U8nC6rJL73Ogqlp+PrIhHzuZuG0NJpb21i/V6YDF55HCkQ/2O12Vu0oIGqoH9PGONdKccIYcRGBTBkVy7ajZVytazI7HCEGlRSIfjhyvoqSynoWTE3D20t+le5qwdQ0bDY76/YWmR2KEINK3tX6yGa3s3pXIbHhAeRmx5odjhhAUUP9uWdsPDuOlXPl2k2zwxFi0Bh2yY1SKhNYDkQA1cAyrXXebfv8EHgcaHV8/YPWepNj26vAy8Ct21d3a62/bVR8Rjt49jJlVTd4YUE2VqtM5+3u5uWmsOvEJdbuKeK5uVlmhyPEoDCyB/Em8IbWOhN4A/htJ/scACZqrccCzwF/Vkp1nJPij1rrHMeX0xaHNpuNNbsKSYgKZGJWtNnhiEEQHuLHzJx49pys4PLVBrPDEWJQGFIglFLRwDhghaNpBTBOKRXVcT+t9Sat9a2/rhOAhfYeh0vZf6aSipoGFk1Lk8WAPMjc3BS8vCx8srvI7FCEGBRG9SCSgDLHutK31pcud7TfyTLggta641wGjyulTiilNiulcg2KzVBtNhtrdxWRHB3EXZlR3R8g3MbQoCHce1cCe05XUFEjvQjh/ky57VcpNQP4CTC7Q/ObwE+11i1KqdnAGqVUlta6uqfPGxHRv/UXoqKCu91ny4FiLl+7yT89O4mY6JB+/Txn0JOc3VFf837q4ZFsP1bO5sOl/O3Xxxsc1cDyxNfaE3MG4/I2qkBcBBKUUl5a6zallBcQ72j/C46ewbvAQq21vtWuta7o8PgzpdRFYBTwRU+DqK6ux2br20pgUVHBVFV1vWB9a5uN9zadIyU2mLTowG73d3Y9ydkd9Tfv+8YlsOlACbPHJRAXEWhgZAPHE19rT8wZepe31Wrp8oO1IaeYtNaXgWPAE46mJ4CjWuuqjvsppSYCfwaWaK2P3LYtocPjHCAV0DiRvacqqLrWyMJpaVhk7MFjPTQ5GV9vL9bsKjQ7FCEGlJGnmF4EliulfgRcpX2MAaXUeuBHWutDwG8Af+C3Sqlbxz2ttT4J/EwpNR5oA5od7RU4idY2G5/sKSI1Npix6S43ri4MFBLgy33jE9i4r4QFU28QH+kavQghesuwAqG1PgdM7qR9bofHE7s4/hmjYhkIe05VcOV6I0/OzpTeg+DBScl8friMT/YU8cKCbLPDEWJAyJ3UPdDaZmPdniLS4oIZI70HwX/3Ig6cqaT8yg2zwxFiQEiB6IFbvYcFU2XsQfy3Bycl4+vjxbo9RWaHIsSAkALRjVu9h9RY6T2Iv3SrF7H/TCWXqqUXIdyPFIhu7D3t6D3IlUuiE7d6EWvl7mrhhqRAdKHNZuPTPcWkyJVL4g5CAny5b1wCB85KL0K4HykQXdh3upLL126yYGqq9B7EHT04KRkfbyvr9siqc8K9SIG4gzZb+30PyTFB5AyPNDsc4cRCAtvXI993poJKmaNJuBEpEHdw4MxlLl+9yfwpMvYguvfQ5BS8vayy6pxwK1IgOmGz2flkTxGJUUHclSm9B9G90EBfZuYksPdUpawXIdyGFIhOHDx3mYqaBhZMTZX1HkSPzbk7GavVwrq9MhYh3IMUiNvY7O29h4TIQMYpWe9B9NzQoCHMyIln76kKWbtauAUpELc5oqsov3KD+dJ7EH0wZ3IyFgus3ye9COH6pEB0YLPbWbu7iLiIACYoWWta9F54iB/3jIln54lL1NQ2mh2OEP0iBaKDY3lXKK2qZ15uKlar9B5E38y9OwWADftKTI5EiP6RAuFgt9v5ZHcR0WH+TBopvQfRdxGhfkwdHcsXx8u5WtdkdjhC9JkUCIdDZysprqxjXm4qXlb5tYj+mZubis1mZ+N+6UUI12XYgkFKqUxgORABVAPLtNZ5t+3jBbwOPATYgZ9rrd/qbttAs9vtrPxMExnqx93ZMYPxI4Wbix7qT+6oGL44Vsbc3BRCA33NDkmIXjPyo/KbwBta60zgDeC3nezzJDAcyABygVeVUqk92DagThfVcL7kGg/ntt8NK4QR5uWm0tJmY9MB6UUI12TIu6FSKhoYB6xwNK0Axin1lRsJlgK/01rbtNZVwGrgsR5sGzB2x5VLkUP9mTo6bqB/nPAgMeEBTB4Zw7YjZdQ1NJsdjnBTTc1t2Gz2AXluoz4uJwFlWus2AMe/5Y72jpKBjheIl3TYp6ttA+b6jWbyS6+z5L4M6T0Iw83LTaW5pY3NBy+aHYpwQ61tNl5bfpBVOwoG5PkNG4NwBhERQb0+JjIyiP/3/ZmkxYd45KR8UVHBZodgisHKOyoqmKlj4/n8SBlPzR1JUIB5YxGe+Fq7e86f7S/mUnUDzy+K/YtcjcrbqAJxEUhQSnlprdscA87xjvaOSoAU4KDj+469hq629Uh1dX2fulrBvlYsFgtVVXW9PtaVRUUFe1zOMPh5PzA+kV3Hy1mx8SyL7hk2aD+3I098rd095zabjZWbNSkxwaREBnyZa2/ytlotXX6wNuScitb6MnAMeMLR9ARw1DGW0NEHwPNKKatjfGIR8FEPtgnhshKjgxiXGcWWQ6U0NLaaHY5wE/vPDPyCZkaedH8R+I5S6jzwHcf3KKXWK6UmOPZ5BygA8oB9wGta64IebBPCpc2fkkpDUytbj5SaHYpwAzabnXV7ikmKDiInY+CWJDBsDEJrfQ6Y3En73A6P24CX7nD8HbcJ4epurWu++UAJ949PxH+IWw3/iUF2a0mClxeNGtCxU7lsR4hBMn9qGjcaW9l+tMzsUIQLs9ntrNtTRPwgLEkgBUKIQTIsPoRRaeFsPFBCU3Ob2eEIF3VEV1F25QbzpqQM+JIEUiCEGEQLpqZR19DC9mPSixC9d2tJgtjwACaNGPhpgaRACDGIhieGkpUSxsb9JTS3SC9C9M5xx5IE86cMzpIEUiCEGGQLpqZy/UYzXxwvNzsU4UJuTQs0mEsSSIEQYpCp5DBU0lA27CumpVV6EaJnTlyoHvQlCaRACGGCBVNTuVbfzI7jl8wORbiALycVHeQlCaRACGGCESlhZCSGsn5fMS2tNrPDEU7uZEENhZdqB31JAikQQpjAYrGwYGoaV+ua2HVSehHiztp7D4VEhAwZ9CUJpEAIYZKRqWGkJ4Tw6d4iWtukFyE6d7qwhoLyWh6ekjroSxJIgRDCJLd6ETW10osQnbPb7axx9B6mmbCgmRQIIUw0Ki2cYfEhfLpHehHiq84UXeVCWS1zcwe/9wBSIIQwlcViYeG0NKqlFyFuc6v3EBZsTu8BpEAIYbr/7kUUSy9CfOlM8VXyS6/zcG4KPt7mvFVLgRDCZP/di2hkt/QiBI7ew8723sM9Y+JNi0MKhBBO4FYvYp30IgTtYw/5ZdeZZ2LvAQxYMEgpFQD8FzAeaAVe0Vqv62S/hcCPgCGABXhba/2/HdtmAuuB847dm7TWX1l8SAh3dasX8X/fP86uE5eYeVeC2SEJk9jtdlbvKiA8ZAjTTOw9gDE9iFeAOq31cGA+8JZSqrNVsCuA+VrrUcAU4CWl1D0dtp/RWuc4vqQ4CI8zKi2c9PgQ1u0tkrurPdjpohoulNXycG6qqb0HMKZALAXeBNBa5wGHgDm376S13q+1Lnc8vg6cBVIM+PlCuAWLxcLCexz3RZyQmV490a2xh4iQIdwzxpwrlzoyYmHcZKC4w/clQFJXByilRgB3Ay90aM5USh0BWoDfaK2X9zaQiIjOOi49FxUV3K/jXZEn5gzOm/fMyCA27L/I+v0lLLovE18fL8Oe21lzHkiulvOhs5VcKK/l5SVjiYsN7fPzGJV3twXC8aadfIfNvZ5WUCkVB6wBvn2rRwEcAZK01teVUmnAFqVUmdZ6S2+eu7q6HpvN3tuQgPZfaFVVXZ+OdVWemDM4f94P353Mr1YeY9XW88wan2jIczp7zgPB1XK22+0sX3eayFA/ctLC+hx7b/K2Wi1dfrDutkBorcd1tV0pVUL7qaIqR1MysO0O+0YDW4Bfaq3f7/Azajs8LlRKrQamOvYVwqNkpYSRmTSUdXuLuGdMnKG9COG8juVfoaiijmfnjDDlrunOGBHFBzhOFSmlMoCJwMbbd1JKRQCfAf+utX7rtm1xSimL43E48ABwzIDYhHA5FouFRdPSuF7fzPajsna1J7DZ7azeWUh0mD9TRseaHc6XjCgQvwSGKqXygXXAt7TWdQBKqdeUUi869vt7IBN4QSl1zPH1rGPbo8AppdQxYAfwjtZ6jQGxCeGSRqSEkZUSxvp9xTQ2t5odjhhgR3QVFy/Xs3Bq2qCtFtcTFru9b+fsnUwqUChjEL3jiTmD6+SdX3adn71zmEdnDOPh3NR+PZer5GwkV8nZZrPzo7cPYLfb+ck3J2O1Wvr1fH0cg0gDir6yvV+RCCEGzPCEUMakR7BxfwkNjS1mhyMGyP6zlZRfucHCaWn9Lg5GkwIhhBN75J5h3GhsZfPBi2aHIgZAa5uNNTsLSYwKYsKIaLPD+QopEEI4sZTYYMarKDYfvEhdQ7PZ4QiD7Tp5icvXbrJ4+jCsFufqPYAUCCGc3qJpaTQ1t7FhX4nZoQgDtbS28cnuItLjQxg7PMLscDolBUIIJ5cQFUTuqFi2Hinlal2T2eEIg2w7UsbVuiYWz0jH4oS9B5ACIYRLWDQtDZvNztrdhWaHIgzQ2NzKp/uKyXJczuyspEAI4QIih/ozMyeBnccvUVnTYHY4op82H7hIXUMLi2cMMzuULkmBEMJFzJuaire3hY93FpgdiuiH2oZmNhwoYVxmFOnxfZ+QbzBIgRDCRYQG+jJ7QhIHzl6mpNL5bwATnVu3p4jmljYWT3fu3gNIgRDCpcyZnEygnzcfbr9gdiiiD65cu8n2o2VMGx1HfGSg2eF0SwqEEC4kwM+Hh3NTOVVYw5miGrPDEb308c7CL5eXdQVSIIRwMbPGJxARMoQPtl3A5h5zqXmE0sv17DtdwazxiYSH+JkdTo9IgRDCxfh4e/HI9GEUV9Zx4Gyl2eGIHnp/ez7+Q7yZe7frrLQsBUIIF3R3dixJ0UGs+qKAllab2eGIbpwuquFUQQ3zpqQS5O9jdjg9JgVCCBdktVhYMjOdK9cb2SaLCjk1m93OB5/nExnqx6zxCWaH0yvdLjnaHaVUAPBfwHigFXhFa72uk/1mAuuB846mJq315A7bnwd+AFiADcB3tdby0UiIOxiVFs7I1DA+2V3IlFGxLvXJ1JPsPVVByeV6vrVgJD7errV8rBE9iFeAOq31cGA+8JZS6k6rYA7QHPoAABFHSURBVJ/RWuc4vjoWhzTgx0AukOH4esqA2IRwWxaLhaX3ZdDQ2Mq6PUVmhyM60dzSxqodBaTGBjMpK8bscHrNiAKxFHgTQGudBxwC5vTyOZYAq7XWVY5ew+8czyuE6EJSdBDTxsSx9XAplVdlCg5ns/ngRa7WNbH0vuFOOZ13d4woEMlAcYfvS4CkO+ybqZQ6opTar5R6po/PIYTo4JHpw/D2svLhNrl5zplcq2/i073F3JURiUp23gn5utLtGIRS6gjtb+Cd6U2f6QiQpLW+7jiltEUpVaa13tKL5+iSY23VPouKCjYoEtfhiTmDe+UdFRXMY7MyeHfjOS7XNZM9rPO1Bdwp554yM+f3tubTZrPx0pIcogb5rmmj8u62QGitx3W1XSlVAqQAVY6mZGBbJ89T2+FxoVJqNTAV2EJ7j6HjxcHJQK/XWKyursdm69uNQ66ywLmRPDFncM+8p2bH8OnuQv7jw+P88JkJX1nb2B1z7o6ZORdV1LL1YAkPTk7G224b1Dh6k7fVaunyg7URp5g+AF4AUEplABOBjbfvpJSKU0pZHI/DgQeAY47NHwGLlFJRSikr8DzwvgGxCeERhvh48di96RRX1rHr5CWzw/FodrudlVvyCArwYV5uqtnh9IsRBeKXwFClVD6wDviW1roOQCn1mlLqRcd+jwKnlFLHgB3AO1rrNQBa6wLgJ8A+IA8oAN41IDYhPMbkrBgyEkP56IsLNDS2mB2Oxzqkqzhfep1Hpg8jwK/fdxKYymJ3j7lcUoFCOcXUO56YM7h33sUVdbz2h4PMnpjE47Myvmx355zvxIycm5rb+Me39hHo58OPvzHxK6f6BkMfTzGlAUVf2W5oZEIIU6XEBjM9J56th0spv3LD7HA8zqf7iqipbeLJ2ZmmFAejSYEQws08Mn0Yvj5erNhyHjc5Q+ASKmsa2Li/hNzsGDKThpodjiGkQAjhZkICfFk8fRini65ySFd1f4DoN7vdzntb8vD2svLYvcPNDscwUiCEcEP33pVASkwwK7ac52ZTq9nhuL1j+Vc4WVDNwmlpDA0aYnY4hpECIYQbslotPP2g4np9M2t2FZodjltram7jvc/OEx8ZyKzxiWaHYygpEEK4qWHxIczIiWfLoVKKLtV2f4DokzW7CqmubWLZgwpvL/d6S3WvbIQQf2HxjHQC/Lz5zYfHZXnSAVBSWcfmgxeZPjbObQamO5ICIYQbC/L34fFZwzlbVMN2WVjIUDabnT9u0gT6e7NkpvsMTHckBUIIN5ebHUtOZhQfbr9ATW2j2eG4je3Hyigor+XxWRluu1iTFAgh3JzFYuHbS8Zis9t5Z5OWeyMMUH29kQ+2XyA7NYy7R7reQkA9JQVCCA8QGxHII/cM4/iFag6eu2x2OC7NbrezfOM5sMMzD43A4oILAfWUFAghPMT9ExJJjQ3mT5+dp7ah2exwXNauk5c4VVjDkpnpRA71NzucASUFQggP4WW18tzcLG42tcqppj66WtfEyq35ZCaGcu+4BLPDGXBSIITwIInRQSyclsZhXcX+s5Vmh+NS7HY7f9x4jtY2G8/OzXLJNaZ7SwqEEB7mocnJpMeH8KfN57lW32R2OC7ji+PlHL9QzaMz0okJDzA7nEEhBUIID+NltfLcw1k0t9r4w4ZzcqqpByprGli5NY+slDDun+Be02l0pd/LHSmlAoD/AsYDrcArWut1nez3XeC5Dk3DgLe01t9XSs0E1gPnHduatNaT+xubEKJzcRGBLJmZzooteXx+pMzt5hAyUpvNxu/WncHbauWbD3vGqaVbjFgP7xWgTms93LEm9U6l1HCtdX3HnbTWrwOvAyilfIAy4L0Ou5zRWk8wIB4hRA/cPz6R04U1/PnzfFTSUBKj77x4vSdbt6eYgvJaXlyYTXiIn9nhDCojTjEtBd4E0FrnAYeAOd0cMx+o0FofMuDnCyH6wGKx8NzcLAL8vPnt2tM0t7SZHZLT0SVXWbu7kNzsGCZlue8NcXdiRIFIBoo7fF8CJHVzzHPA27e1ZSqljiil9iulnjEgLiFEN0ICffmreVmUXbnBnz/PNzscp1J7o5nfrj1NdFgATz2gzA7HFN2eYlJKHaG9CHSm1yVVKRUH3Ad8o0PzESBJa31dKZUGbFFKlWmtt/TmuR2Lb/dZVFRwv453RZ6YM3hm3nfK+d6oYAorb/Dx9nzGj4xlxjj3GY/o6+tss9n59aq93Ghs5bUXppAcH2pwZAPLqP/f3RYIrfW4rrYrpUqAFODW2obJwLYuDnkGWK+1vtLhZ9R2eFyolFoNTAV6VSCqq+ux2fp2RUZUVDBVVXV9OtZVeWLO4Jl5d5fznImJnMqv4vX3jxLq50VClOuPR/TndV63p4ij56tY9pAiyMfqUv9fepO31Wrp8oO1EaeYPgBeAHAMUk8ENnax/ze47fSSUipOKWVxPA4HHgCOGRCbEKIHvL2svLRoFP6+3vz7x6c8epnSUwXVfLyzgElZ0cwYG292OKYyokD8EhiqlMoH1gHf0lrXASilXlNKvXhrR6XUVCAY2HTbczwKnFJKHQN2AO9ordcYEJsQooeGBg3hpUWjqLp6k7c/PeuR90dUXm3gzTWnSYgM4tk5WW49EV9PWNzkP0EqUCinmHrHE3MGz8y7NzlvPlDCys/zWTA1lUX3DBvgyAZOb1/nm02t/PSdw9TeaOaHz0wgykUn4uvjKaY0oOgr2w2NTAjh8mZPTGLamDjW7i5i3+kKs8MZFDabnbfWnaGiuoGXFma7bHEwmhQIIcRfsFgsLHtQoZKG8vb6s+SXXjc7pAFlt9tZsTWPo3lXeHzWcLJSw80OyWlIgRBCfIW3l5VvLx5NeIgfv151gsqaBrNDGjCbDlxk6+FSHpiYxP0TuruFy7NIgRBCdCrI34e/fmwsdjv8auUxrta538yv+89U8v62fCaOiOZr9w03OxynIwVCCHFHseEBfH/pWG40tvCrlUepc6OV6I7nX+GtdWfITBrKX83zrEn4ekoKhBCiS6mxIXxvyRiqrjXybx8cp6HR9e+ROFVQzRsfnyQxOojvPjoaH28vs0NySlIghBDdUslhvLxoFCWV9fxq5VHqb7aYHVKfnSmq4derThIfEcjfLs0hwM/H7JCclhQIIUSP5GRE8u3FoymtqucX7x2l9obrnW46nn+F1z88QUyYP3/7eA5B/lIcuiIFQgjRYznDI/nekrFcvtrAv753hJraRrND6rHdJy/x649OEhcRyCuP30VwgK/ZITk9KRBCiF7JTgvnb742lmv1Tfxk+SEKL9V2f5CJ7HY7G/YV8/tPz6KSh/J3X7+LkEApDj0hBUII0WsqOYx/eGo8Pt5W/vVPRzh07rLZIXWquaWNt9ef5YPtF5iUFc1fPzYW/yFGLKTpGaRACCH6JCEqiH9aNoGkmCB+s/oUH31xgdY2m9lhfamypoF/efcIu09WsGBqKt9akI2Pt7zl9YaUUiFEn4UE+vJ3T9zFu5vP8+neYs4VX+VbC8yfy+jQucu8s/k8rW02vvvoGHIyIk2Nx1VJgRBC9IuPtxfPzs0iOy2c5RvP8ep/HWDpfRlMGxM36Def1TU086fPznPg7GXSE0P5q7lZxIQHDGoM7kQKhBDCEJOyYkiLC+H3687whw3n2HminKcfUCTHDPzyrm02G7tPVrDqiwvcaGzlkenDWDYvm6s1Nwb8Z7szKRBCCMNEDfXnB0+OY8+pCt7fls8//+EgU0bF8nBuKrED8EnebrdzPL+aD7+4QPmVG6THh/DKQyNIjA7C20vGG/qr3wVCKfUU8HfASOCvtdb/3sW+zwM/ACzABuC7Wmtbd9uEEK7DYrEwdXQcORmRrN1VxPZjZew5WcHErGjuH59EekJIv1dqa2xuZe/pSrYdKaW06gYxYf68vGgU41WUx68CZyQjehDHgMeBv+9qJ6VUGvBj4C6gmvYi8BTwx662GRCfEMIEgX4+PHF/Bg/nprD54EU+P1LKgbOXiQz1Y/LIGHIyIkmJCe7xJ/36my2cLqzhxIVqjuVXcbOpjeToIJ6dM4LcUbHSYxgA/S4QWutTAEqp7j7tLwFWa62rHPv/DniW9iLQ1TYhhAsLCfRlycx0Hs5N4cj5KvadqWT9vmI+3VuMj7eV1NhgEqKCGBroS2iQL0N8vGhptdHSZqP2RjPlV25QXt3Apeob2O3t05CPy4hixl0JpMf3vzci7mwwxyCSgeIO35cAST3Y1mOOtVX7LCpq4AfTnI0n5gyembcz5JycGMai+zK5VtfE6cJqzhXVcLaohsO6qtOpxK0WiI0IJCkmmOl3JTI+K5qMpDC8rD0rCs6QsxmMyrvbAqGUOkL7G3hnYrTWbYZEYoDq6npsNnufjpWF7D2HJ+btjDlnxgWTGRfMgtwUAFrbbFyvb6a5tQ1fby98vK34D/H+ys1tNdX1PXp+Z8x5MPQmb6vV0uUH624LhNZ6XM9D61IJkNLh+2TgYg+2CSE8gLeXlYhQP7PDEB0M5immj4AdSql/pn0g+nngvR5sE0IIYYJ+D/srpZ5QSpUCjwE/UUqVKqVGOra9ppR6EUBrXQD8BNgH5AEFwLvdbRNCCGEOi93et3P2TiYVKJQxiN7xxJzBM/OWnD1HH8cg0oCir2w3NDIhhBBuQwqEEEKITkmBEEII0Sl3mazPC9rPp/VHf493RZ6YM3hm3pKz5+hp3h328+psu7sMUk8DdpodhBBCuKh7gF23N7pLgRgCTAQuAU5zZ7cQQjg5LyAOOAg03b7RXQqEEEIIg8kgtRBCiE5JgRBCCNEpKRBCCCE6JQVCCCFEp6RACCGE6JQUCCGEEJ2SAiGEEKJT7jLVRp8ppTKB5UAE7YsVLdNa55kblbGUUhHAO0A67TfD5AMvaK2rPCT/HwOvAqO11qfcPWellB/wf4H7gUZgr9b6W+6ct1JqHu1rylho/+D7qtZ6lbvlrJT6FfAo7UscjNZan3K03zHP/vwOpAcBbwJvaK0zgTeA35ocz0CwA7/QWiut9RjgAvBzxza3zl8pNQ64m/ZlbW9x65yBX9BeGDK11qOBHzra3TJvpZSF9g9AT2utc4CngOVKKSvul/NqYDpQfFt7V3n2+Xfg0QVCKRUNjANWOJpWAOOUUlHmRWU8rXWN1np7h6Z9QIq756+UGkL7H8TLtBdJt3/NlVJBwDLgh1prO4DWutLd8wZsQKjj8VDap92JxM1y1lrv0lpf7NjW1Wvb39fdowsEkASUaa3bABz/ljva3ZLjU9VLwFrcP//XgHe11oUd2tw953TaTyP8WCl1SCm1XSk1DTfO21EIvwasUUoV0/4p+xncOOfbdJVnv34Hnl4gPNGvgXrg380OZCAppXJpn8DxN2bHMsi8gWHAUa31BOAHwCogyNSoBpBSyhv4X8BCrXUKMB/4M26c82Dx9AJxEUhQSnkBOP6Nd7S7HccAVwawVGttw73znwGMAAqVUkVAIrCJ9k/Y7poztJ+bbsVxSkFrvR+4AtzEffPOAeK11rsBHP/eoH0cxl1z7qirv+N+/Y17dIHQWl8GjgFPOJqeoP2TV5V5UQ0MpdRPgfHAIq11E7h3/lrrn2ut47XWqVrrVKAUeFBr/T5umjOA1voKsA2YDV9ewRINnMd98y4FEpVSCkAplQXEAnm4b85f6urvuL9/4x4/3bdSagTtl4CFAVdpvwRMmxuVsZRS2cAp2t8kbjqaC7XWj3hC/gCOXsQ8x2Wubp2zUmoY8DbtlzW2AP+otd7gznkrpZ4E/p72wWqAH2utV7tbzkqp14HFtBfAK0C11jq7qzz78zvw+AIhhBCicx59ikkIIcSdSYEQQgjRKSkQQgghOiUFQgghRKekQAghhOiUFAghhBCdkgIhhBCiU1IghBBCdOr/Awo3BiQarOrOAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 2*np.pi, 100) \n",
"signal = np.sin(100*x)\n",
"plt.plot(signal)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(np.abs(dft(signal)))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fb2a2a24d50>]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def slow_cqt(data, fs=100, f_min=10., f_max=None, bins=12):\n",
" Q = 1 / (2**(1/bins) -1)\n",
" if not f_max:\n",
" f_max = 2*f_min\n",
" K = np.ceil(bins * np.log2(f_max/f_min)).astype(int)\n",
" cqt = []\n",
" for k in range(K):\n",
" fk = f_min * (2**(k/bins))\n",
" N_k = int(Q * fs / fk)\n",
" n = np.arange(N_k, dtype=float)\n",
" kernel = np.hamming(N_k) * np.exp(-2j* np.pi * Q * n / N_k)\n",
" cqt.append(np.dot(data[:N_k],kernel)/N_k)\n",
" return np.array(cqt)\n",
"cqt = slow_cqt(signal, bins=12, f_min=20)\n",
"plt.plot(np.abs(cqt))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fb2a2c31b10>]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD7CAYAAAB68m/qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAARkUlEQVR4nO3df2zcd33H8aftKGZK4tDc3IbSiJSIvIuibjSsotHoAtMGdKJjy6qt0UqqSWhjkfi7jAlaMU2qAIlqa6pWQkgZRdGEGnX9Jwr/jIiibGISEUq6vOlCAumPQHoOmCDqLrH3x90VO4vtO/vOd9+Pnw/Jsv05n+/9iduXv/58v9/Pe2hmZgZJUvUN97sASVJ3GOiSVAgDXZIKYaBLUiEMdEkqxJo+vvYocCfwKnC1j3VIUpWMAG8DvgtMzX6gn4F+J/DtPr6+JFXZ3cDzswf6GeivAly69Eumpzu/Fr5WW0+9frnrRQ2CkucGZc/PuVVXVeY3PDzEDTesg2aGztbPQL8KMD09s6RAbz23VCXPDcqen3OrrorN7/8tVXtSVJIKYaBLUiEMdEkqhIEuSYXo50lRSVpVjp+6wOFjZ6hPTlEbG2XP7m3s2rG5a9/fQJekFXD81AUOHjnNG1emAahPTnHwyGmAroW6Sy6StAIOHzvzZpi3vHFlmsPHznTtNQx0SVoB9cmpjsaXwkCXpBVQGxvtaHwpDHRJWgF7dm9j7Zq5kbt2zTB7dm/r2mt4UlSSVkDrxKdXuUhSAXbt2NzVAL+WSy6SVAgDXZIKYaBLUiHaWkOPiHPA6803gIcy8+h8490tUZLUjk5Oit6XmSc7GJckrSCXXCSpEJ0coX89IoZoNCX9TGb+bJFxSdIKGpqZWbyHXkRsyczzETEKPAZsyMwH5htv87W3AmeXWrgkrXK3AudmD7QV6LNFxO3Ac5l5azvjC9gKnK3XLy+pMev4+AYuXvxFx8+rgpLnBmXPz7lVV1XmNzw8RK22Hq4T6IuuoUfEuojY2Px4CLgfODHfeHdLlyS1q5019JuAZyJiBBgBXgD2LzAuSeqDRQM9M38I3DHPw/ONS5JWmJctSlIhDHRJKoSBLkmFcD90Sava8VMXOHzsDBOTU2zqQdOJlWSgS1q1jp+6wMEjp3njyjTQaNh88MhpgEqGuksuklatw8fOvBnmLW9cmebwsTN9qmh5DHRJq1Z9cqqj8UFnoEtatWpjox2NDzoDXdKqtWf3NtaumRuDa9cMs2f3tj5VtDyeFJW0arVOfHqViyQVYNeOzezasbkyuy0uxCUXSSqEgS5JhTDQJakQBrokFcJAl6RCGOiSVAgDXZIKYaBLUiEMdEkqhIEuSYUw0CWpEAa6JBXCQJekQhjoklQIA12SCuF+6JIGyvFTFzh87Az1ySlqFW84sdIMdEkD4/ipCxw8cpo3rkwDjWbNB4+cBjDU29BWoEfEOeD15hvAQ5l5NCK2AweBGlAH9mXmiz2oU9IqcPjYmTfDvOWNK9McPnbGQG9DJ0fo92XmyWvGngQOZObTEfEA8BTw+12rTtKqUp+c6mhccy35pGhE3AjsBA41hw4BOyNivBuFSVp9amOjHY1rrk4C/esR8f2IeCIi3gpsAV7OzKsAzfevNMclqWN7dm9j7Zq5sbR2zTB7dm/rU0XV0u6Sy92ZeT4iRoHHgMeBL3ejgFpt/ZKfOz6+oRslDKSS5wZlz8+5Ld0ff2ADYxvewr8c+W9eu/QrfvOG32DfPe/mA+9dmePEqv/shmZmZjp6QkTcDjwHvA/4AVDLzKsRMULjxOi7MvNiG99qK3C2Xr/M9HRnNUDjH/7ixV90/LwqKHluUPb8nFt1VWV+w8NDrQPhW4Fzcx5b7MkRsS4iNjY/HgLuB05k5k+BE8De5pfuBb7XZphLkrqsnSWXm4BnmkfgI8ALwP7mY58EDkbE54BLwL6eVClJWtSigZ6ZPwTumOex0zSWXiRJfeZeLpJUCANdkgphoEtSIQx0SSqEgS5JhTDQJakQBrokFcJAl6RCGOiSVAgDXZIKYU9RSQtqNW2emJxik02bB5qBLmleNm2uFpdcJM1roabNGjwGuqR52bS5Wgx0SfOyaXO1GOiS5mXT5mrxpKikebVOfHqVSzUY6JIWtGvHZnbt2FyZJsqrmUsuklQIA12SCmGgS1IhDHRJKoSBLkmFMNAlqRAGuiQVwkCXpEIY6JJUCANdkgrR0a3/EfEw8Ahwe2aejIhzwOvNN4CHMvNoNwuUJLWn7UCPiJ3AXcCPr3novsw82dWqJC2o1RauPjlFzQ2z1NTWkktEjAIHgP3ATE8rkrSgVlu4VpOJVlu446cu9Lky9Vu7a+ifB57OzLPXeezrEfH9iHgiIt7axdokXYdt4TSfRZdcImIXcCfw6es8fHdmnm8ewT8GPA480EkBtdr6Tr58jvHxDUt+7qAreW5Q9vx6PbeJedq/TUxO9fy1S/65QfXn184a+m7gNuBsRADcAhyNiL/KzG8CZOZURDwBPNdpAfX6ZaanO1/FKXlv5pLnBmXPbyXmtmls9Lo9PTeNjfb0tUv+uUF15jc8PDTvgfCiSy6Z+Whm3pyZWzNzK/AS8GHgOxGxESAihoD7gRNdq1rSddkWTvNZTseim4BnImIEGAFeoHHSVFIPzW4L51Uumq3jQG8epbfc0b1SJLWr1RZOms07RSWpEAa6JBXCQJekQhjoklQIA12SCmGgS1IhDHRJKoSBLkmFMNAlqRAGuiQVwkCXpEIsZ3MuSU2tlnATk1NscrMs9YmBLi1TqyVcq4tQqyUcYKhrRbnkIi2TLeE0KAx0aZmu1z1ooXGpVwx0aZlqY6MdjUu9YqBLy2RLOA0KT4pKyzS7JZxXuaifDHSpC1ot4arSOV5lcslFkgphoEtSIQx0SSqEgS5JhTDQJakQBrokFcJAl6RCGOiSVAgDXZIKYaBLUiE6uvU/Ih4GHgFuz8yTEbEdOAjUgDqwLzNf7HqVUodaHYTqk1PU3FtFq0TbR+gRsRO4C/jxrOEngQOZuR04ADzV3fKkzrU6CLX2I291EDp+6kKfK5N6q61Aj4hRGoG9H5hpjt0I7AQONb/sELAzIsZ7UKfUNjsIabVqd8nl88DTmXk2IlpjW4CXM/MqQGZejYhXmuMX2y2gVlvfQblzjY9vWPJzB13Jc4Pezm9ink5BE5NTK/LvWvLPruS5QfXnt2igR8Qu4E7g070ooF6/zPT0TMfPK3mb0pLnBr2f36ax0eu2f9s0Ntrzf9eSf3Ylzw2qM7/h4aF5D4TbWXLZDdwGnI2Ic8AtwFFgG/D2iBgBaL6/GTi//JKlpbODkFarRY/QM/NR4NHW581Q/2jzKpf9wF7g6eb772Vm28stUi/M7iDkVS5aTZbbseiTwMGI+BxwCdi3/JKk5Wt1EJJWk44DPTO3zvr4NPC+bhYkSVoa7xSVpEIY6JJUCANdkgphoEtSIQx0SSqEgS5JhTDQJakQBrokFWK5d4pKbWs1nZiYnGKTt+NLXWega0W0mk609ilvNZ0ADHWpS1xy0Yqw6YTUewa6VsT19idfaFxS5wx0rYja2GhH45I6Z6BrRdh0Quo9T4pqRcxuOuFVLlJvGOhaMa2mE1Xp3ShVjUsuklQIA12SCmGgS1IhDHRJKoSBLkmFMNAlqRAGuiQVwuvQV7HWdrb1ySlq3ugjVZ6Bvkq5na1UHpdcVim3s5XKY6CvUm5nK5XHQF+l3M5WKk9ba+gR8SxwKzANXAY+lZknIuIc8HrzDeChzDzagzrVZXt2b5uzhg5uZytVXbsnRR/MzJ8DRMTHgK8CO5uP3ZeZJ3tRnHpn9na2XuUilaGtQG+FedNGGkfqqrjWdraSyjA0MzPT1hdGxFeADwFDwEcy81RzyeXnzbHngc9k5s/afO2twNkO65UkNdwKnJs90PZ16Jn5CYCI+DjwReCPgLsz83xEjAKPAY8DD3RSUb1+menp9n6pzFZyk4SS5wZlz8+5VVdV5jc8PESttv76j3X6zTLza8AHI6KWmeebY1PAE8DvLqdQSdLSLRroEbE+IrbM+vxeYAJ4PSI2NseGgPuBE70qVJK0sHaWXNYB34iIdcBVGmF+L3AT8ExEjAAjwAvA/l4VKkla2KKBnpk/Ae6a5+E7uluOJGmpvFNUkgrhbosDpLWd7cTkFJu80UdShwz0AeF2tpKWyyWXAeF2tpKWy0AfEG5nK2m5DPQB4Xa2kpbLQB8Qe3ZvY+2auT8Ot7OV1AlPig6I2dvZepWLpKUw0AdIazvbqmwSJGmwuOQiSYUw0CWpEAa6JBXCQJekQhjoklQIA12SCuFli4to7YBYn5yi5rXhkgaYgb4Ad0CUVCUuuSzAHRAlVYmBvgB3QJRUJQb6AtwBUVKVGOgLcAdESVXiSdEFzN4B0atcJA06A30RrR0QJWnQueQiSYUw0CWpEAa6JBXCQJekQhjoklSItq5yiYhngVuBaeAy8KnMPBER24GDQA2oA/sy88VeFQu/3izLRsqSNFe7R+gPZuZvZ+YdwJeArzbHnwQOZOZ24ADwVA9qfFNrs6z65BQz/HqzrOOnLvTyZSWpEtoK9Mz8+axPNwLTEXEjsBM41Bw/BOyMiPHulvhrbpYlSfNr+8aiiPgK8CFgCPgIsAV4OTOvAmTm1Yh4pTl+sd3vW6utb7vYiXk2xZqYnGJ8fEPb36cKSpvPtUqen3OrrqrPr+1Az8xPAETEx4EvAp/tRgH1+mWmp2fa+tpNY6PX3elw09goFy/+ohvlDITx8Q1FzedaJc/PuVVXVeY3PDw074Fwx1e5ZObXgA8CLwFvj4gRgOb7m4HzSy91YW6WJUnzWzTQI2J9RGyZ9fm9wATwU+AEsLf50F7ge5nZ9nJLp3bt2MyD99xGbWyUIRrb2D54z21e5SJJtLfksg74RkSsA67SCPN7M3MmIj4JHIyIzwGXgH29K7WhtVlWVf48kqSVsmigZ+ZPgLvmeew08L5uFyVJ6px3ikpSIQx0SSqEgS5Jhehnx6IRaFxTuVTLee6gK3luUPb8nFt1VWF+s2ocufaxoZmZ9m7q6YH3A9/u14tLUsXdDTw/e6CfgT4K3Am8SuNySEnS4kaAtwHfBebcOt/PQJckdZEnRSWpEAa6JBXCQJekQhjoklQIA12SCmGgS1IhDHRJKkQ/b/1fkojYDhwEakAd2JeZL/a3qu6IiBrwNWAbjRsG/gf4m142DemHiHgYeAS4PTNP9rmcroiItwBfBv4AeB04npl/3d+quiciPgr8A42ewsPAI5l5uL9VLU1EfAn4M2Ars/4bLCFbqniE/iRwIDO3AweAp/pcTzfNAF/IzMjM3wLOAI/2uaauioidNPbX/3G/a+myL9AI8u2ZeTtd6rk7CCJiiMaBxscz8z3AAzQa21QxPwCeBX4P+NE145XPlkr9QCLiRmAncKg5dAjYGRHj/auqezJzIjO/NWvoP4B39KmcrouIURr/o+yn8curCBGxnka3rs9m5gy82RimJNPAxubHbwVezczpPtazZJn5fGbO6X1cSrZUKtCBLcDLmXkVoPn+leZ4UZpHP38LPNfvWrro88DTmXm234V02TYaf6I/HBH/FRHfioj397uobmn+kvpz4N8i4kc0jnAf7G9VXVdEtlQt0FeTfwYuA4/3u5BuiIhdNDZje6LftfTAGuCdNJqk/w7wEHA4Isb6W1Z3RMQa4O+Aj2XmO4B7gX9t/mWiAVK1QD8PvD0iRgCa729ujhejedLmXcBfVPXP2uvYDdwGnI2Ic8AtwNGI+FA/i+qSHwFXaP65npn/CbwGbO9nUV30HuDmzPwOQPP9L4F397Wq7ioiWyoV6Jn5U+AEsLc5tJfGUVExV4FExD8C7wX+JDOnFvv6qsjMRzPz5szcmplbgZeAD2fmN/tc2rJl5mvAvwN/CG9eLXEjjauUSvAScEtEBEBEvBvYTOOkfRFKyZbKbZ8bEbfRuLToBuASjUuLsr9VdUdE7ABOAj8AftUcPpuZf9q/qnqjeZT+0YIuW3wn8FUal7z9L/D3mXmkv1V1T0T8JfBpGidHAR7OzGf7WNKSRcQ/AXto/FJ6Dahn5o4SsqVygS5Jur5KLblIkuZnoEtSIQx0SSqEgS5JhTDQJakQBrokFcJAl6RCGOiSVIj/A9VjP7MJYFWjAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def cqt_freqs(n_bins, fmin):\n",
" freqs = 2.0**(np.arange(0, n_bins, dtype=float)/ n_bins)\n",
" return fmin * freqs\n",
"\n",
"plt.plot(cqt_freqs(12, 30.), 'o')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fb2a2cdbed0>]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def fft_freqs(sr, n_fft):\n",
" return np.linspace(0, sr/2., int(n_fft//2) + 1, endpoint=True)\n",
"plt.plot(fft_freqs(16000, 25),'o')"
]
}
],
"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.4"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment