<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Overview
Digital data to be transmitted
Step1:  Modulation
Step2:  Spectogram shows that we have synthesized positive frequency for True bit and negative for False.
This complex data can be sent to SDR at this point.
<ASSISTANT_TASK:>
Python Code:
samples_per_symbol = 64 # this is so high to make stuff plottable
symbols = [1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0]
data = []
for x in symbols:
    data.extend([1 if x else -1] * samples_per_symbol)
plt.plot(data)
plt.title('Data to send')
plt.show()
Explanation: Overview
Digital data to be transmitted
End of explanation
fs = 300e3
deviation = 70e3  # deviation from center frequency
sensitivity = 2 * np.pi * deviation / fs
print(sensitivity)
d_phase = 0
phl = []
for symbol in data:
    d_phase += symbol * sensitivity  # this is FSK
    d_phase = ((d_phase + np.pi) % (2.0 * np.pi)) - np.pi  # keep in pi range
    phl.append(d_phase * 1j)
sig = np.exp(phl)
# awgn channel
# sig = sig + np.random.normal(scale=np.sqrt(0.1))
Pxx, freqs, bins, im = plt.specgram(sig, Fs=fs, NFFT=64, noverlap=0)
plt.show()
Explanation: Modulation
End of explanation
import inspect
def get_objects_rednode(obj):
    source_path = inspect.getsourcefile(type(obj))
    source = open(source_path).read()
    print(source)
from pyhacores.moving_average.model import MovingAverage
obj = MovingAverage(2)
get_objects_rednode(obj)
Explanation: Spectogram shows that we have synthesized positive frequency for True bit and negative for False.
This complex data can be sent to SDR at this point.
End of explanation
<END_TASK>