def lp_fir_type(h):
"""
Determine if FIR filter impulse response *h* is symmetric or
antisymmetric. Return {1, 2, 3, 4} depending on FIR filter type or
None if the FIR filter is not linear phase.
"""
M = len(h) - 1
n_range = range(M + 1)
if M % 2 == 0:
if all([NP.isclose(h[n], h[M - n]) for n in n_range]):
return 1
elif all([NP.isclose(h[n], -h[M - n]) for n in n_range]):
return 3
else:
return None
else:
if all([NP.isclose(h[n], h[M - n]) for n in n_range]):
return 2
elif all([NP.isclose(h[n], -h[M - n]) for n in n_range]):
return 4
else:
return None
assert False
评论列表
文章目录