mirror of
https://github.com/jhshi/openofdm.git
synced 2025-06-14 13:18:16 +00:00
scripts init
This commit is contained in:
66
scripts/bin_to_mem.py
Executable file
66
scripts/bin_to_mem.py
Executable file
@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Convert a binary data file (generated by rx_samples_to_file) to a memroy text
|
||||
file that can be read by Verilog's $readmemh.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
|
||||
|
||||
CHUNK_SIZE = 2**20
|
||||
|
||||
|
||||
def le_bin_str_to_signed_short(b):
|
||||
v = ord(b[1])*(1<<8) + ord(b[0])
|
||||
if v > (1<<15):
|
||||
v = v - (1<<16)
|
||||
return v
|
||||
|
||||
|
||||
def signed_short_to_hex_str(n):
|
||||
return format(n%(1<<16), '04x')
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('file', help="Binary file.")
|
||||
parser.add_argument('--out', help="Output file.")
|
||||
parser.add_argument('--scale', type=int, default=1)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.out is None:
|
||||
args.out = '%s.txt' % (os.path.splitext(args.file)[0])
|
||||
|
||||
begin = time.clock()
|
||||
byte_count = 0
|
||||
total_bytes = os.path.getsize(args.file)
|
||||
with open(args.file, 'rb') as input:
|
||||
with open(args.out, 'wb', buffering=2**26) as output:
|
||||
while True:
|
||||
bytes = input.read(CHUNK_SIZE)
|
||||
if len(bytes) == 0:
|
||||
break
|
||||
for i in range(0, len(bytes), 4):
|
||||
I = le_bin_str_to_signed_short(bytes[i:i+2])/args.scale
|
||||
Q = le_bin_str_to_signed_short(bytes[i+2:i+4])/args.scale
|
||||
output.write('%s%s\n' % (signed_short_to_hex_str(I),
|
||||
signed_short_to_hex_str(Q)))
|
||||
byte_count += len(bytes)
|
||||
elapsed = time.clock() - begin
|
||||
speed = byte_count / elapsed
|
||||
eta = (total_bytes - byte_count)/speed
|
||||
progress = '%d / %d B\tSpeed: %.1f B/s\t Elapsed: %d s\tETA: %d s' %\
|
||||
(byte_count>>20, total_bytes, speed, int(elapsed), int(eta))
|
||||
sys.stdout.write('\r%s' % (progress))
|
||||
sys.stdout.flush()
|
||||
sys.stdout.write('\n')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user