F5OEO-PiFmRds/src/generate_waveforms.py

56 wiersze
1.3 KiB
Python
Executable File

#!/usr/bin/python
# This program uses Pydemod, see https://github.com/ChristopheJacquet/Pydemod
import pydemod.app.rds as rds
import pydemod.modulation.am as am
import numpy
import scipy.io.wavfile as wavfile
import io
sample_rate = 228000
outc = io.open("waveforms.c", mode="w", encoding="utf8")
outh = io.open("waveforms.h", mode="w", encoding="utf8")
header = u"""
/* This file was automatically generated by "generate_waveforms.py".
(C) 2014 Christophe Jacquet.
Released under the GNU GPL v3 license.
*/
"""
outc.write(header)
outh.write(header)
def format_number(x):
if abs(x) < 1e-10:
return u"0"
else:
return unicode(x)
def generate_bit_in_context(pattern, name):
offset = 240
l = 96
count = 2
shapedSamples = rds.unmodulated_signal(pattern, sample_rate)
out = shapedSamples[offset:offset+l*count]
iout = (out * 20000./max(abs(out)) ).astype(numpy.dtype('>i2'))
wavfile.write(u"waveform_{}.wav".format(name), sample_rate, iout)
outc.write(u"float waveform_{name}[] = {{{values}}};\n\n".format(
name = name,
values = u", ".join(map(format_number, out))))
outh.write(u"extern float waveform_{name}[];\n".format(name=name))
generate_bit_in_context([0, 0, 0], "identical")
generate_bit_in_context([0, 1, 0], "different")
outc.close()
outh.close()