{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n# Create and Plot Signals\n\n\nCreate and plot signals / noise; combine them at a specific SNR.\n\nTo see how soundpy implements this, see `soundpy.dsp.generate_sound`, \n`soundpy.dsp.generate_noise` and `soundpy.dsp.add_backgroundsound`.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's import soundpy\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import soundpy as sp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a Signal\n^^^^^^^^^^^^^^^\n\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First let's set what sample rate we want to use\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sr = 44100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a signal of 10 Hz \n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig1_hz = 10\nsig1, sr = sp.generate_sound(freq=sig1_hz, amplitude = 0.4, sr=sr, dur_sec=1)\nsp.plotsound(sig1, sr=sr, feature_type = 'signal',\n title = 'Signal: {} Hz'.format(sig1_hz), subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a signal of 20 Hz\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig2_hz = 20 \nsig2, sr = sp.generate_sound(freq=sig2_hz, amplitude= 0.4, sr=sr, dur_sec=1)\nsp.plotsound(sig2, sr=sr, feature_type = 'signal',\n title = 'Signal: {} Hz'.format(sig2_hz), subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Combine Signals \n^^^^^^^^^^^^^^^\n\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add them together and see what they look like:\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig3 = sig1 + sig2\nsp.plotsound(sig3, sr=sr, feature_type = 'signal', \n title='Mixed Signals: {} Hz + {} Hz'.format(sig1_hz, sig2_hz), \n subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate Pseudo-Random Noise\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create noise to add to the signal:\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "noise = sp.generate_noise(len(sig3), amplitude=0.02, random_seed=40)\nsp.plotsound(noise, sr=sr, feature_type = 'signal',\n title='Random Noise', subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Control SNR: Adding a Background Sound\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add noise at signal-to-noise ratio of 40\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig_noisy, snr = sp.dsp.add_backgroundsound(\n audio_main = sig3, \n audio_background = noise, \n sr = sr,\n snr = 40,\n clip_at_zero = False)\n\n# keep energy between 1 and -1 \nsig_noisy = sp.dsp.scalesound(sig_noisy, max_val=1)\nsp.plotsound(sig_noisy, sr=sr, feature_type = 'signal', title='Signal + Noise: 40 SNR',\n subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add noise at signal-to-noise ratio of 20\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig_noisy, snr = sp.dsp.add_backgroundsound(\n audio_main = sig3, \n audio_background = noise,\n sr = sr,\n snr = 20)\n# keep energy between 1 and -1 \nsig_noisy = sp.dsp.scalesound(sig_noisy, max_val=1)\nsp.plotsound(sig_noisy, sr=sr, feature_type = 'signal', title='Signal + Noise: 20 SNR',\n subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add noise at signal-to-noise ratio of 10\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig_noisy, snr = sp.dsp.add_backgroundsound(\n audio_main = sig3, \n audio_background = noise,\n sr = sr,\n snr = 10)\n# keep energy between 1 and -1 \nsig_noisy = sp.dsp.scalesound(sig_noisy, max_val=1)\nsp.plotsound(sig_noisy, sr=sr, feature_type = 'signal', title='Signal + Noise: 10 SNR',\n subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add noise at signal-to-noise ratio of 0\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig_noisy, snr = sp.dsp.add_backgroundsound(\n audio_main = sig3,\n audio_background = noise,\n sr = sr,\n snr = 0)\n# keep energy between 1 and -1 \nsig_noisy = sp.dsp.scalesound(sig_noisy, max_val=1)\nsp.plotsound(sig_noisy, sr=sr, feature_type = 'signal', title='Signal + Noise: 0 SNR',\n subprocess=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Add noise at signal-to-noise ratio of -10\n\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "sig_noisy, snr = sp.dsp.add_backgroundsound(\n audio_main = sig3, \n audio_background = noise,\n sr = sr,\n snr = -10)\n# keep energy between 1 and -1 \nsig_noisy = sp.dsp.scalesound(sig_noisy, max_val=1)\nsp.plotsound(sig_noisy, sr=sr, feature_type = 'signal', title='Signal + Noise: -10 SNR',\n subprocess=True)" ] } ], "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.8.2" } }, "nbformat": 4, "nbformat_minor": 0 }