Finishing up freq meas
This commit is contained in:
parent
5effadcbaf
commit
ca01d52a86
14 changed files with 296 additions and 47 deletions
59
controller/fw/tools/fft_window_header_gen.py
Normal file
59
controller/fw/tools/fft_window_header_gen.py
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import textwrap
|
||||
|
||||
import scipy.signal as sig
|
||||
import numpy as np
|
||||
|
||||
WINDOW_TYPES = [
|
||||
'boxcar',
|
||||
'triang',
|
||||
'blackman',
|
||||
'hamming',
|
||||
'hann',
|
||||
'bartlett',
|
||||
'flattop',
|
||||
'parzen',
|
||||
'bohman',
|
||||
'blackmanharris',
|
||||
'nuttall',
|
||||
'barthann',
|
||||
'kaiser',
|
||||
'gaussian',
|
||||
'general_gaussian',
|
||||
'slepian',
|
||||
'dpss',
|
||||
'chebwin',
|
||||
'exponential',
|
||||
'tukey',
|
||||
]
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('window', choices=WINDOW_TYPES, help='Type of window function to use')
|
||||
parser.add_argument('n', type=int, help='Width of window in samples')
|
||||
parser.add_argument('window_args', nargs='*', type=float,
|
||||
help='''Window argument(s) if required. See https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.get_window.html#scipy.signal.get_window for details.''')
|
||||
parser.add_argument('-v', '--variable', default='fft_window_table', help='Name for alias variable pointing to generated window')
|
||||
args = parser.parse_args()
|
||||
|
||||
print(f'/* FTT window table for {args.n} sample {args.window} window.')
|
||||
if args.window_args:
|
||||
print(f' * Window arguments were: ({" ,".join(str(arg) for arg in args.window_args)})')
|
||||
print(f' */')
|
||||
winargs = ''.join(f'_{arg:.4g}'.replace('.', 'F') for arg in args.window_args)
|
||||
varname = f'fft_{args.n}_window_{args.window}{winargs}'
|
||||
print(f'const float {varname}[{args.n}] = {{')
|
||||
|
||||
win = sig.get_window(args.window if not args.window_args else (args.window, *args.window_args),
|
||||
Nx=args.n, fftbins=True)
|
||||
par = ' '.join(f'{f:>013.8g},' for f in win)
|
||||
print(textwrap.fill(par,
|
||||
initial_indent=' '*4, subsequent_indent=' '*4,
|
||||
width=120,
|
||||
replace_whitespace=False, drop_whitespace=False))
|
||||
print('};')
|
||||
print()
|
||||
print(f'const float * const {args.variable} __attribute__((weak)) = {varname};')
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue