Фазовая модуляция

Цена договорная
12 июня 2019, 17:27 • 3 отклика • 67 просмотров
У меня есть код частотно моделированного сигнала
import numpy as np
import pylab as pl
import scipy.signal.signaltools as sigtool
import scipy.signal as signal
from numpy.random import sample
# the following variables setup the system
Fc = 100 # simulate a carrier frequency of 1kHz
Fbit = 50 # simulated bitrate of data
Fdev = 50 # frequency deviation, make higher than bitrate
N = 64 # how many bits to send
A = 1 # transmitted signal amplitude
Fs = 1000 # sampling frequency for the simulator, must be higher than twice the carrier frequency
A_n = 0.10 # noise peak amplitude
N_prntbits = 10 # number of bits to print in plots

def plot_data(y):
# view the data in time and frequency domain
# calculate the frequency domain for viewing purposes
N_FFT = float(len(y))
f = np.arange(0, Fs / 2, Fs / N_FFT)
y_f = np.fft.fft(y)
pl.figure(figsize=(17, 7))
pl.subplot(3, 1, 1)
pl.plot(t[0: int(Fs * N_prntbits / Fbit)], m[0: (Fs * N_prntbits // Fbit)])
pl.xlabel('Time (s)')
pl.ylabel('Frequency (Hz)')
pl.title('Original VCO output versus time')
pl.grid(True)
pl.subplot(3, 1, 2)
pl.plot(t[0:int(Fs * N_prntbits / Fbit)], y[0: int(Fs * N_prntbits / Fbit)], linewidth=1)
pl.xlabel('Time (s)')
pl.ylabel('Amplitude (V)')
pl.title('Amplitude of carrier versus time')
pl.grid(True)
pl.subplot(3, 1, 3)
pl.plot(f[0: int(Fc + Fdev * 2 * N_FFT / Fs)], y_f[0:int(Fc + Fdev * 2 * N_FFT / Fs)])
pl.xlabel('Frequency (Hz)')
pl.ylabel('Amplitude (dB)')
pl.title('Spectrum')
pl.grid(True)
pl.tight_layout()
pl.show()

"""
Data in
"""
data_in = np.loadtxt("2.txt",delimiter='\r\n', dtype=np.float)
N = N_prntbits = len(data_in)
"""
VCO
"""
t = np.arange(0, float(N) / float(Fbit), 1 / float(Fs),
dtype=np.float)
# extend the data_in to account for the bitrate and convert 0/1 to frequency
m = np.zeros(0).astype(float)
for bit in data_in:

if bit == 1:
m = np.hstack((m, np.multiply(np.ones(Fs // Fbit), Fc + Fdev)))
else:
m = np.hstack((m, np.multiply(np.ones(Fs // Fbit), Fc - Fdev)))
# calculate the output of the VCO
y = np.zeros(0)
y = A * np.cos(2 * np.pi * np.multiply(m, t))
plot_data(y)



то есть частота увеличивается в зависимости от наличия единиц в текстовом файле который выглядит примерно так
0
0
1 строка с файлом обозначается так data_in = np.loadtxt("1.txt",delimiter='\r\n', dtype=np.float)
1
0
Как мне вместо частотно моделированного сигнала получить фазоманипулированный сигнал
то есть фаза у сигнала смещается когда приходит первая единица импульса и последняя единица импульса
текстовый документ импульсов который нужно сохранить с кодом ниже


Файлы