In [1]:
""" setup """

import numpy as np

import matplotlib.pyplot as plt
plt.style.use(['classic'])

from redbaron import redbaron
redbaron.ipython_behavior = False

from pyha.simulation.simulation_interface import assert_sim_match

from pyha.common.util import plot_freqz
from scipy import signal
from pyhacores.filter.fir.model import FIR



In [21]:
""" low-pass filter """

# design filter
b = signal.firwin(64, 0.5, window=('kaiser', 8))
plot_freqz(b)

# input signal, sum of two sines
fs = 128
s0 = np.sin(2 * np.pi * 1 * np.linspace(0, 4, 4*fs)) * 0.5
s1 = np.sin(2 * np.pi * 45 * np.linspace(0, 4, 4*fs)) * 0.5
input = s0 + s1

# output
model = FIR(b)
output = model.model_main(input)

plt.plot(input, label='input')
plt.plot(output, label='output')
plt.legend()
plt.show()


plt.semilogy(*signal.periodogram(input, fs), label='Input FFT')
plt.semilogy(*signal.periodogram(output, fs), label='Output FFT')
plt.ylim([1e-7, 1e2])
plt.legend()
plt.show()

assert_sim_match(model, output, input)