{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\nGenerating the CF-FM synthetic calls\n====================================\nModule that creates the data for accuracy testing horseshoe bat type calls\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import h5py\nfrom itsfm.simulate_calls import make_cffm_call\nimport numpy as np \nimport pandas as pd\nimport scipy.signal as signal \nfrom tqdm import tqdm\n\ncf_durations = [0.005, 0.010, 0.015]\ncf_peakfreq = [40000, 60000, 90000]\nfm_durations = [0.001, 0.002]\nfm_bw = [5000, 10000, 20000]\n\nall_combinations = np.array(np.meshgrid(cf_peakfreq, cf_durations,\n                                        fm_bw,fm_durations,\n                                        np.flip(fm_bw),np.flip(fm_durations)))\nall_params = all_combinations.flatten().reshape(6,-1).T\n\ncol_names = ['cf_peak_frequency', 'cf_duration',\n             'upfm_bw', 'upfm_duration',\n             'downfm_bw', 'downfm_duration']\n\nparameter_space = pd.DataFrame(all_params, columns=col_names)\nparameter_space['upfm_terminal_frequency'] = parameter_space['cf_peak_frequency'] - parameter_space['upfm_bw']\nparameter_space['downfm_terminal_frequency'] = parameter_space['cf_peak_frequency'] - parameter_space['downfm_bw']\n\nparameter_columns = ['cf_peak_frequency', 'cf_duration',\n                     'upfm_terminal_frequency', 'upfm_duration',\n                     'downfm_terminal_frequency', 'downfm_duration']\n\nall_calls = {}\nfor row_number, parameters in tqdm(parameter_space.iterrows(),\n                                   total=parameter_space.shape[0]):\n\n    cf_peak, cf_durn, upfm_terminal, upfm_durn, downfm_terminal, downfm_durn = parameters[parameter_columns]\n    call_parameters = {'cf':(cf_peak, cf_durn),\n                        'upfm':(upfm_terminal, upfm_durn),\n                        'downfm':(downfm_terminal, downfm_durn),\n                        }\n\n    fs = 250*10**3 # 500kHz sampling rate\n    synthetic_call, _ = make_cffm_call(call_parameters, fs)\n    synthetic_call *= signal.tukey(synthetic_call.size, 0.1)\n    all_calls[row_number] = synthetic_call\n\n\n# now save the data into an hdf5 file \nwith h5py.File('horseshoe_test.hdf5','w') as f:\n    for index, audio in all_calls.items():\n        f.create_dataset(str(index), data=audio)\n    f.create_dataset('fs', data=np.array([fs]))\nparameter_space.to_csv('horseshoe_test_parameters.csv')"
      ]
    }
  ],
  "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.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}