pico-tracker/sim/si_fir_filter/test.ipy

58 wiersze
1.4 KiB
Plaintext

from __future__ import division
from scipy import signal
fig, axs = subplots(2,1,sharex=True)
subplots_adjust( hspace = .2 )
fig.set_size_inches((5,5))
t_fir_coeff = [0.01665389596732681,
0.07353658710395161,
0.10040345335534452,
0.04751332314075821,
-0.06317967799551721,
-0.09143711477971043,
0.06319322564548596,
0.31257963657965065,
0.43524399610103215,
0.31257963657965065,
0.06319322564548596,
-0.09143711477971043,
-0.06317967799551721,
0.04751332314075821,
0.10040345335534452,
0.07353658710395161,
0.01665389596732681]
# Default si coefficients
si_default_fir_coeff = [0x1, 0x3, 0x8, 0x11, 0x21, 0x36, 0x4d, 0x60, 0x67]
# Reflects an array of coefficients about the last element
def sym_fir_coeff(coeff):
for i in range(len(coeff)-2, -1, -1):
coeff.append(coeff[i])
return coeff
# Normalises the si's 8-bit coefficients to 0 - 1
def si_normalise_coeff(coeff):
return [x / 0x300 for x in coeff]
si_default = si_normalise_coeff(sym_fir_coeff(si_default_fir_coeff))
print si_default
print len(si_default)
fir_coeff = si_default
ax=axs[0]
w,h=signal.freqz(fir_coeff,1) # Compute impulse response
ax.plot(w,20*log10(abs(h)))
ax.set_ylabel(r"$20 \log_{10} |H(\omega)| $",fontsize=18)
ax.grid()
ax=axs[1]
ax.plot(w,angle(h)/pi*180)
ax.set_xlabel(r'$\omega$ (radians/s)',fontsize=18)
ax.set_ylabel(r"$\phi $ (deg)",fontsize=18)
ax.set_xlim(xmax = pi)
ax.grid()