48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
# 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()
|