feature_extraction.ipynb 59.8 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/user/opt/anaconda3/envs/env/lib/python3.7/site-packages/librosa/util/decorators.py:9: NumbaDeprecationWarning: \u001b[1mAn import was requested from a module that has moved location.\n",
      "Import requested from: 'numba.decorators', please update to use 'numba.core.decorators' or pin to Numba version 0.48.0. This alias will not be present in Numba version 0.50.0.\u001b[0m\n",
      "  from numba.decorators import jit as optional_jit\n",
      "/Users/user/opt/anaconda3/envs/env/lib/python3.7/site-packages/librosa/util/decorators.py:9: NumbaDeprecationWarning: \u001b[1mAn import was requested from a module that has moved location.\n",
      "Import of 'jit' requested from: 'numba.decorators', please update to use 'numba.core.decorators' or pin to Numba version 0.48.0. This alias will not be present in Numba version 0.50.0.\u001b[0m\n",
      "  from numba.decorators import jit as optional_jit\n"
     ]
    }
   ],
   "source": [
    "from utils import *\n",
    "\n",
    "import wave\n",
    "import numpy as np\n",
    "import os\n",
    "import scipy\n",
    "import matplotlib.pyplot as plt\n",
    "import sklearn\n",
    "import librosa\n",
    "import urllib\n",
    "import librosa.display\n",
    "import warnings\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "warnings.filterwarnings(action='ignore') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "PROJECT_DIR = get_upper_dir()\n",
    "DATA_DIR = get_data_dir(PROJECT_DIR)\n",
    "FEATURE_DIR = get_feature_dir(PROJECT_DIR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATA_DIR = '/Users/user/git/2015104199/프로젝트/data/test/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "name_list = os.listdir(DATA_DIR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "FEATURE_DIR = '/Users/user/git/2015104199/프로젝트/data/extract/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'angle_20_4'"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name_list[0][:-6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_mfcc(x, fs):\n",
    "    mfccs = librosa.feature.mfcc(x, sr=fs, n_mfcc=40)\n",
    "    mfccs = np.resize(mfccs, (40,150))\n",
    "    mfccs = sklearn.preprocessing.scale(mfccs, axis=1)\n",
    "    \n",
    "    return mfccs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_stft(x, fs):\n",
    "    D_octave = np.abs(librosa.core.stft(x))\n",
    "    D_octave = np.resize(D_octave, (40, 150))\n",
    "    return D_octave"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gcc_phat(sig1, sig2):\n",
    "    pad1 = np.zeros(len(sig1))\n",
    "    pad2 = np.zeros(len(sig2))\n",
    "    sig1 = np.hstack([sig1, pad1])\n",
    "    sig2 = np.hstack([sig2, pad2])\n",
    "    f_sig1 = scipy.fftpack.fft(sig1, 6000)\n",
    "    f_sig2 = scipy.fftpack.fft(sig2, 6000)\n",
    "    f_sig2_c = np.conj(f_sig2)\n",
    "    f_sig = f_sig1 * f_sig2_c\n",
    "    denom = abs(f_sig)\n",
    "\n",
    "    f_sig = f_sig / denom\n",
    "    return np.abs(scipy.fftpack.ifft(f_sig, 6000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import audioop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rms(sig):\n",
    "    return audioop.rms(sig, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 30/30 [00:08<00:00,  3.55it/s]\n"
     ]
    }
   ],
   "source": [
    "feature_list = []\n",
    "label_list = []\n",
    "\n",
    "for name in tqdm(name_list):\n",
    "    ch1_name = DATA_DIR + '/' + name + '_ch1.wav'\n",
    "    ch2_name = DATA_DIR + '/' + name + '_ch2.wav'\n",
    "\n",
    "    x1, fs1 = librosa.load(ch1_name)\n",
    "    x2, fs2 = librosa.load(ch2_name)\n",
    "    \n",
    "    mfcc1 = convert_mfcc(x1, fs1)\n",
    "    mfcc2 = convert_mfcc(x2, fs2)\n",
    "    mfcc = mfcc2 - mfcc1\n",
    "    \n",
    "    stft1 = convert_stft(x1, fs1)\n",
    "    stft2 = convert_stft(x2, fs2)\n",
    "    stft = stft2 - stft1\n",
    "    \n",
    "    gcc = gcc_phat(x1, x2)\n",
    "    gcc = gcc.reshape([-1, 150])\n",
    "    \n",
    "    feature = np.concatenate((mfcc, stft, gcc), axis=0)\n",
    "    label = name[-3:]\n",
    "    \n",
    "    np.save(DATA_DIR + '/direction_' + name +'.npy', feature_list)\n",
    "    #np.save(FEATURE_DIR + 'direction/' + 'label2.npy', np.array(label_list))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "name_list[99][-3:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "ch1_name = DATA_DIR + '/' + name_list[199] + '_ch1.wav'\n",
    "ch2_name = DATA_DIR + '/' + name_list[199] + '_ch2.wav'\n",
    "x1, fs1 = librosa.load(ch1_name)\n",
    "x2, fs2 = librosa.load(ch2_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "mfcc1 = convert_mfcc(x1, fs1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "lpc_10_1 = LPC(x1, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([   1.        ,   -7.47176933,   26.70705232,  -59.68409469,\n",
       "         92.14293739, -102.65423442,   83.68503334,  -49.40785977,\n",
       "         20.29410557,   -5.26480268,    0.66227019])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lpc_10_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "librosa.display.specshow(mfcc1, sr=fs1, x_axis='time')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "librosa.display.specshow(mfcc2, sr=fs1, x_axis='time')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "stft1 = convert_stft(x1, fs1)\n",
    "stft2 = convert_stft(x2, fs2)\n",
    "stft = stft2 - stft1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "gcc = gcc_phat(x1, x2)\n",
    "gcc = gcc.reshape([-1, 150])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(mfcc.shape)\n",
    "print(stft.shape)\n",
    "print(gcc.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = np.concatenate((mfcc, stft, gcc), axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATA_DIR"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'/Users/user/git/2015104199/프로젝트/data/output_noisy_file/data_816_39_angle_160_ch1.wav'"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ch1_name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "chunks = np.array_split(x1, 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2458"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(chunks[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from librosa import lpc\n",
    "from scipy.fft import dct, idct\n",
    "from scipy.fft import fft"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LPC(x, order):\n",
    "    x_norm = x/(len(x)*len(x))\n",
    "    filt = lpc(x_norm, order)\n",
    "    return filt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fft_cepstrum(x, N, order):\n",
    "    yr = fft(x, n=order)\n",
    "    yr = yr*(1/N)\n",
    "    return yr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def match_label(x):\n",
    "    if x == '01' or x == '06' or x == '09' or x == '23' or x == '24' or x == '27' or x == '30' or \\\n",
    "        x == '33' or x == '35' or x == '36' or x == '44' or x == '48':\n",
    "        return 'F'\n",
    "    elif x == '02' or x == '03' or x == '05' or x == '10' or x == '12' or x == '15' or x == '16' or \\\n",
    "        x == '18' or x == '21' or x == '22' or x == '28' or x == '28' or x == '31' or x == '34' or \\\n",
    "        x == '37' or x == '40' or x == '41' or x == '43' or x == '47':\n",
    "        return 'K'\n",
    "    else : return 'M'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 30/30 [00:07<00:00,  3.88it/s]\n"
     ]
    }
   ],
   "source": [
    "feature_list = []\n",
    "label_list = []\n",
    "num = 0\n",
    "for name in tqdm(name_list):\n",
    "    ch1_name = DATA_DIR + '/' + name + '_ch1.wav'\n",
    "    ch2_name = DATA_DIR + '/' + name + '_ch2.wav'\n",
    "    \n",
    "    idx = name[:-10][-2:]\n",
    "    label = match_label(idx)\n",
    "    \n",
    "    x1, fs1 = librosa.load(ch1_name)\n",
    "    x2, fs2 = librosa.load(ch2_name)\n",
    "    try:\n",
    "        mfcc1 = convert_mfcc(x1, fs1)\n",
    "        mfcc2 = convert_mfcc(x2, fs2)\n",
    "        \n",
    "        lpc_10_1 = LPC(x1, 10)\n",
    "        lpc_10_2 = LPC(x2, 10)\n",
    "        lpc_12_1 = LPC(x1, 12)\n",
    "        lpc_12_2 = LPC(x2, 12)\n",
    "        lpc_14_1 = LPC(x1, 14)\n",
    "        lpc_14_2 = LPC(x2, 14)\n",
    "\n",
    "        fft_8_1 = fft_cepstrum(x1, len(x1), 8)\n",
    "        fft_8_2 = fft_cepstrum(x2, len(x2), 8)\n",
    "        fft_12_1 = fft_cepstrum(x1, len(x1), 12)\n",
    "        fft_12_2 = fft_cepstrum(x2, len(x2), 12)\n",
    "        \n",
    "        feature = np.concatenate((lpc_10_1, lpc_12_1, fft_8_1, fft_12_1), axis=0)\n",
    "        feature_list.append(feature)\n",
    "        label_list.append(label)\n",
    "\n",
    "        feature = np.concatenate((lpc_10_2, lpc_12_2, fft_8_2, fft_12_2), axis=0)\n",
    "        feature_list.append(feature)\n",
    "        label_list.append(label)\n",
    "        \n",
    "    except:\n",
    "        num += 1\n",
    "        continue\n",
    "    \n",
    "    np.save(DATA_DIR + '/gender_' + name +'.npy', feature_list)\n",
    "    #np.save(FEATURE_DIR + 'gender_age/' + 'label1.npy', np.array(label_list))   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['angle_60',\n",
       " 'angle_120',\n",
       " 'angle_80',\n",
       " 'angle_140',\n",
       " 'angle_160',\n",
       " 'angle_100',\n",
       " 'angle_40',\n",
       " 'angle_0',\n",
       " 'angle_20',\n",
       " '.',\n",
       " 'angle_180']"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 50/50 [00:05<00:00,  9.36it/s]\n"
     ]
    }
   ],
   "source": [
    "feature_list = []\n",
    "label_list = []\n",
    "num = 0\n",
    "for name in tqdm(name_list):\n",
    "    x1, fs1 = librosa.load(DATA_DIR + name)\n",
    "    try:\n",
    "        mfcc1 = convert_mfcc(x1, fs1)\n",
    "        \n",
    "    except:\n",
    "        num += 1\n",
    "        continue\n",
    "    \n",
    "    np.save(FEATURE_DIR + 'gender_' + name[:-6] + '.npy', mfcc1)\n",
    "    #np.save(FEATURE_DIR + 'gender_age/' + 'label3.npy', np.array(label_list))   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "xx = np.resize(x1,(int(x1.shape[0]/1000),1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(62, 1000)"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xx.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range (xx.shape[1]):\n",
    "    lpc_10_1 = LPC(xx[i], 10)\n",
    "#    lpc_10_2 = LPC(x2[i], 10)\n",
    "    lpc_12_1 = LPC(xx[i], 12)\n",
    "#    lpc_12_2 = LPC(x2[i], 12)\n",
    "    lpc_14_1 = LPC(xx[i], 14)\n",
    "#    lpc_14_2 = LPC(x2[i], 14)\n",
    "\n",
    "    lpc = np.concatenate((lpc_10_1, lpc_12_1, lpc_14_1))\n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(39,)"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lpc.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 5.6824638e-07+0.0000000e+00j,  2.4513686e-06+1.4408027e-06j,\n",
       "       -3.7701747e-07-3.5517360e-08j, -1.3579654e-07-1.3030548e-08j,\n",
       "       -8.0050178e-08-6.6232202e-09j, -6.0451768e-08-2.9320950e-09j,\n",
       "       -5.5271521e-08-0.0000000e+00j, -6.0451768e-08+2.9320950e-09j,\n",
       "       -8.0050178e-08+6.6232202e-09j, -1.3579654e-07+1.3030548e-08j,\n",
       "       -3.7701747e-07+3.5517360e-08j,  2.4513686e-06-1.4408027e-06j],\n",
       "      dtype=complex64)"
      ]
     },
     "execution_count": 312,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-2.1472832e-08-0.0000000e+00j,  3.5054573e-08+3.1722449e-09j,\n",
       "       -3.1050695e-09+2.3825310e-08j, -1.3643614e-08+1.0246094e-08j,\n",
       "       -1.5522817e-08-0.0000000e+00j, -1.3643614e-08-1.0246094e-08j,\n",
       "       -3.1050695e-09-2.3825310e-08j,  3.5054573e-08-3.1722449e-09j],\n",
       "      dtype=complex64)"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "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(r_12)\n",
    "plt.plot(r_8)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_8 = fft_cepstrum(x1, len(x1), 8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "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(r_12, 'ro')\n",
    "plt.plot(r_8, 'g+')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "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(r_12, 'ro')\n",
    "plt.plot(r_8, 'g+')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "67531"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(r_12)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}