Source code for caf_verilog.sim_helper
[docs]def sim_shift(ref, ref_center, ref_length, shift=0, rec=None, padding=False):
"""
:param ref: Reference signal.
:param ref_center: Where to center the simulated signal set.
:param ref_length: The length of the signal equidistant around center.
:param shift: How much shift should be added to the simulated received signal.
:param rec: A received signal can be provided for the correlation simulation.
:param padding: Use padding to add zeros on the reference signal; ex. for generating a plot.
:return: ref, rec
:rtype: tuple
"""
sim_center = ref_center + shift
fill_length = int(ref_length / 2)
index_error = not ((ref_center - ref_length) > 0)
index_error |= not ((ref_center + ref_length) < len(ref))
if index_error:
raise IndexError("Center and length result in an out of bounds error in ref")
if rec:
index_error |= not ((ref_center + ref_length) < len(rec))
if index_error:
raise IndexError("Center and length result in an out of bounds error in rec")
ref_ret = ref[ref_center - fill_length: ref_center + fill_length]
if padding:
fill_zeros = [0 for zz in range(0, fill_length)]
ref_ret = fill_zeros + list(ref_ret)
ref_ret += fill_zeros
if rec:
rec_ret = rec[sim_center - ref_length:sim_center + ref_length]
else:
rec_ret = ref[sim_center - ref_length: sim_center + ref_length]
return ref_ret, rec_ret