Finishing up freq meas
This commit is contained in:
parent
5effadcbaf
commit
ca01d52a86
14 changed files with 296 additions and 47 deletions
45
controller/fw/tools/gold_code_header_gen.py
Normal file
45
controller/fw/tools/gold_code_header_gen.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import textwrap
|
||||
|
||||
import numpy as np
|
||||
import scipy.signal as sig
|
||||
|
||||
# From https://github.com/mubeta06/python/blob/master/signal_processing/sp/gold.py
|
||||
preferred_pairs = {5:[[2],[1,2,3]], 6:[[5],[1,4,5]], 7:[[4],[4,5,6]],
|
||||
8:[[1,2,3,6,7],[1,2,7]], 9:[[5],[3,5,6]],
|
||||
10:[[2,5,9],[3,4,6,8,9]], 11:[[9],[3,6,9]]}
|
||||
|
||||
def gen_gold(seq1, seq2):
|
||||
gold = [seq1, seq2]
|
||||
for shift in range(len(seq1)):
|
||||
gold.append(seq1 ^ np.roll(seq2, -shift))
|
||||
return gold
|
||||
|
||||
def gold(n):
|
||||
n = int(n)
|
||||
if not n in preferred_pairs:
|
||||
raise KeyError('preferred pairs for %s bits unknown' % str(n))
|
||||
t0, t1 = preferred_pairs[n]
|
||||
(seq0, _st0), (seq1, _st1) = sig.max_len_seq(n, taps=t0), sig.max_len_seq(n, taps=t1)
|
||||
return gen_gold(seq0, seq1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('n', type=int, choices=preferred_pairs, help='bit width of shift register. Generate 2**n + 1 sequences of length 2**n - 1.')
|
||||
args = parser.parse_args()
|
||||
|
||||
print('#include <unistd.h>')
|
||||
print()
|
||||
print(f'/* {args.n} bit gold sequences: {2**args.n+1} sequences of length {2**args.n-1} bit.')
|
||||
print(f' *')
|
||||
print(f' * Each code is packed left-aligned into {2**args.n // 8} bytes in big-endian byte order.')
|
||||
print(f' */')
|
||||
print(f'const uint8_t gold_code_{args.n}bit[] = {{')
|
||||
for i, code in enumerate(gold(args.n)):
|
||||
par = ' '.join(f'0x{d:02x},' for d in np.packbits(code)) + f' /* {i: 3d} "{"".join(str(x) for x in code)}" */'
|
||||
print(textwrap.fill(par, initial_indent=' '*4, subsequent_indent=' '*4, width=120))
|
||||
print('};')
|
||||
print()
|
||||
print(f'const uint8_t * const gold_code_table __attribute__((weak)) = gold_code_{args.n}bit;')
|
||||
Loading…
Add table
Add a link
Reference in a new issue