|
|
@@ -97,6 +97,17 @@ class OpticalChannel(defs.Channel):
|
|
|
val_t = np.power(np.absolute(values), 2)
|
|
|
return t, val_t
|
|
|
|
|
|
+ def __plot_eye(self, val_t, num_of_symbols=100):
|
|
|
+ samples_per_symbol = int(self.symbol_period/self.sample_period)
|
|
|
+ val_t_a = np.reshape(val_t[:(2*samples_per_symbol*num_of_symbols)], (-1, 2*samples_per_symbol))
|
|
|
+ t = np.linspace(start=0, stop=self.symbol_period, num=2*samples_per_symbol)
|
|
|
+
|
|
|
+ for sym in val_t_a:
|
|
|
+ plt.plot(t, sym, color="blue")
|
|
|
+ plt.show()
|
|
|
+
|
|
|
+ pass
|
|
|
+
|
|
|
def forward(self, values):
|
|
|
# Converting APF representation to time-series
|
|
|
t, val_t = self.__get_time_domain(values)
|
|
|
@@ -157,14 +168,14 @@ class OpticalChannel(defs.Channel):
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
# Simple OOK modulation
|
|
|
- num_of_symbols = 100
|
|
|
+ num_of_symbols = 1000
|
|
|
symbol_vals = np.zeros((num_of_symbols, 3))
|
|
|
|
|
|
symbol_vals[:, 0] = np.random.randint(2, size=symbol_vals.shape[0])
|
|
|
- symbol_vals[:, 2] = 40e9
|
|
|
+ symbol_vals[:, 2] = 0
|
|
|
|
|
|
- channel = OpticalChannel(noise_level=-10, dispersion=-21.7, symbol_rate=10e9,
|
|
|
- sample_rate=400e9, length=100, pulse_shape='rcos', show_graphs=True)
|
|
|
+ channel = OpticalChannel(noise_level=-20, dispersion=-21.7, symbol_rate=7e9,
|
|
|
+ sample_rate=336e9, length=0, pulse_shape='rrcos', show_graphs=False)
|
|
|
v = channel.forward(symbol_vals)
|
|
|
|
|
|
rx = (v > 0.5).astype(int)
|