# Run with "ipython -i --matplotlib=qt match_frequency.py"
#
from __future__ import print_function
import numpy as np
# import pandas as pd
from scipy import signal
import matplotlib.pyplot as plt

RATE = 44100


# tone synthesis
def tone(freq, cycles, amp=1, rate=RATE):
    len = cycles * (1.0/rate)
    t = np.linspace(0, len, int(len * rate))
    if freq == 0:
        data = np.zeros(int(len * rate))
    else:
        data = np.sin(2 * np.pi * freq * t) * amp
    return data


fig, ax = plt.subplots(1, 1, sharex=True)

for carrier in [312, 473, 716, 1084, 1479]:
    print("carrier = ", carrier)

    freqs = range(carrier-20, carrier+22, 2)
    sig = tone(carrier * 1.0, 2000)  # Reference tone
    response = []

    for freq in freqs:
        sig_tx = tone(freq * 1.0, 2000)  # Test tone
        resp = np.abs(signal.correlate(sig, sig_tx, mode='same'))
        response.append(resp.sum())

    ax.semilogy(freqs, response, label='tone = {}'.format(carrier))
    ax.set_title('Matched filter response')

    ax.axvline(626.67, ls=':')  # Guardband markers
    ax.axvline(695.01, ls=':')

    ax.legend(loc='best')
    ax.margins(0, 0.1)

fig.set_tight_layout(True)
plt.show()
