{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nfrom tqdm import tqdm\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.io import wavfile\nfrom python_speech_features import mfcc,logfbank\nimport librosa","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_signal(signals):\n    fig,axes = plt.subplots(nrows=2,ncols=5,sharex=False,sharey=True,figsize=(20,5))\n    fig.suptitle('Time series',size=16)\n    i=0\n    for x in range(2):\n        for y in range(5):\n            axes[x,y].set_title(list(signals.keys())[i])\n            axes[x,y].plot(list(signals.values())[i])\n            axes[x,y].get_xaxis().set_visible(False)\n            axes[x,y].get_yaxis().set_visible(False)\n            i+=1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_fft(fft):\n    fig,axes = plt.subplots(nrows=2,ncols=5,sharex=False,\n                           sharey=True,figsize=(20,5))\n    fig.suptitle('Fourier Transform',size=16)\n    i=0\n    for x in range(2):\n        for y in range(5):\n            data= list(fft.values())[i]\n            Y,freq =data[0],data[1]\n            axes[x,y].set_title(list(fft.keys())[i])\n            axes[x,y].plot(freq,Y)\n            axes[x,y].get_xaxis().set_visible(False)\n            axes[x,y].get_yaxis().set_visible(False)\n            i+=1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_fbank(fbank):\n    fig,axes = plt.subplots(nrows=2,ncols=5,sharex=False,\n                           sharey=True,figsize=(20,5))\n    fig.suptitle('Filter Bank Coefficient',size=16)\n    i=0\n    for x in range(2):\n        for y in range(5):\n            data= list(fft.values())[i]\n            Y,freq =data[0],data[1]\n            axes[x,y].set_title(list(fbank.keys())[i])\n            axes[x,y].imshow(list(fbank.values())[i],\n                            cmap='hot',interpolation='nearest')\n            axes[x,y].get_xaxis().set_visible(False)\n            axes[x,y].get_yaxis().set_visible(False)\n            i+=1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plot_mfccs(mfccs):\n    fig,axes = plt.subplots(nrows=2,ncols=5,sharex=False,\n                           sharey=True,figsize=(20,5))\n    fig.suptitle('Mel Frequency Cepstrum Coefficients',size=16)\n    i=0\n    for x in range(2):\n        for y in range(5):\n            data= list(fft.values())[i]\n            Y,freq =data[0],data[1]\n            axes[x,y].set_title(list(mfccs.keys())[i])\n            axes[x,y].imshow(list(mfccs.values())[i],\n                            cmap='hot',interpolation='nearest')\n            axes[x,y].get_xaxis().set_visible(False)\n            axes[x,y].get_yaxis().set_visible(False)\n            i+=1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/freesound-audio-tagging/train.csv')\ndf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.set_index('fname',inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for f in df.index:\n    rate,signal = wavfile.read('../input/freesound-audio-tagging/audio_train/'+f)\n    df.at[f,'length'] = signal.shape[0]/rate","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classes = list(np.unique(df.label))\nclass_dist = df.groupby(['label'])['length'].mean()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"classes[0:5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class_dist[0:5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax=plt.subplots()\nax.set_title('Class Distribution',y=1.08)\nax.pie(class_dist,labels=class_dist.index,autopct='%1.1f%%;',\n      shadow=False,startangle=90)\nax.axis('equal')\nplt.show()\ndf.reset_index(inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def calc_fft(y,rate):\n    n = len(y)\n    freq= np.fft.rfftfreq(n, d=1/rate)\n    Y = abs(np.fft.rfft(y)/n)\n    return (Y, freq)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"signals={}\nfft={}\nfbank={}\nmfccs={}\n\nfor c in classes:\n    wav_file = df[df.label==c].iloc[0,0]\n    signal,rate = librosa.load('../input/freesound-audio-tagging/audio_train/'+wav_file,sr=44100)\n    signals[c] = signal\n    fft[c] = calc_fft(signal,rate)\n    \n    bank= logfbank(signal[:rate],rate,nfilt=26,nfft=1103).T\n    fbank[c] =bank\n    mel = mfcc(signal[:rate],rate,numcep=13,nfilt=26,nfft=1103).T\n    mfccs[c]=mel\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_signal(signals)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_fft(fft)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_fbank(fbank)\nplt.show","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plot_mfccs(mfccs)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def envelope(y,rate,threshold):\n    mask=[]\n    y= pd.Series(y).apply(np.abs)\n    y_mean = y.rolling(window=int(rate/10),min_periods=1, center=True).mean()\n    for mean in y_mean:\n        if mean >threshold:\n            mask.append(True)\n        else:\n            mask.append(False)\n    return mask","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"signals={}\nfft={}\nfbank={}\nmfccs={}\n\nfor c in classes:\n    wav_file = df[df.label==c].iloc[0,0]\n    signal,rate = librosa.load('../input/freesound-audio-tagging/audio_train/'+wav_file,sr=44100)\n    mask = envelope(signal,rate,0.0005)\n    signal = signal[mask]\n    signals[c] = signal\n    fft[c] = calc_fft(signal,rate)\n    \n    bank= logfbank(signal[:rate],rate,nfilt=26,nfft=1103).T\n    fbank[c] =bank\n    mel = mfcc(signal[:rate],rate,numcep=13,nfilt=26,nfft=1103).T\n    mfccs[c]=mel\n\nplot_signal(signals)\nplt.show()\n\nplot_fft(fft)\nplt.show()\n\nplot_fbank(fbank)\nplt.show\n\nplot_mfccs(mfccs)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}