Привет.
У меня есть код частотно моделированного сигнала
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:int(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)])
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
"""
#generate some random data for testing
data_in = np.loadtxt("1.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) # массив равномерно распределенных значений от 0 до N/Fbit (1/Fs значений между этими числами)
#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:
# np.hstack горизонтально соединяет массивы
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
Как мне вместо частотно моделированного сигнала получить фазоманипулированный сигнал
то есть фаза у сигнала смещается когда приходит первая единица импульса и последняя единица импульса