Simplify channel model to account for normalized power
This commit is contained in:
parent
59d7adf6bd
commit
34cb3b863b
|
@ -1,5 +1,6 @@
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
import torch
|
import torch
|
||||||
|
import math
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,24 +45,24 @@ def Const_Points_Pow(IQ):
|
||||||
return p_enc_avg_dB
|
return p_enc_avg_dB
|
||||||
|
|
||||||
|
|
||||||
def Pow_Noise(CH_OSNR, CPP):
|
def Pow_Noise(CH_OSNR):
|
||||||
"""
|
"""
|
||||||
Calculate the power of channel noise.
|
Calculate the power of channel noise.
|
||||||
"""
|
"""
|
||||||
P_N_dB = CPP - CH_OSNR
|
P_N_dB = -CH_OSNR
|
||||||
p_N_watt = 10**(P_N_dB/10)
|
p_N_watt = 10**(P_N_dB/10)
|
||||||
Var_Noise = p_N_watt
|
Var_Noise = p_N_watt
|
||||||
return Var_Noise
|
return Var_Noise
|
||||||
|
|
||||||
|
|
||||||
def Channel_Noise_Model(NV, S):
|
def Channel_Noise_Model(variance, shape):
|
||||||
"""
|
"""
|
||||||
Compute the Gaussian noise to be added to each vector to simulate passing
|
Compute the Gaussian noise to be added to each vector to simulate passing
|
||||||
through a channel.
|
through a channel.
|
||||||
"""
|
"""
|
||||||
return torch.distributions.normal.Normal(
|
return torch.distributions.normal.Normal(
|
||||||
0, torch.sqrt(NV*10000)
|
0, math.sqrt(variance * 5000)
|
||||||
).sample(S)
|
).sample(shape)
|
||||||
|
|
||||||
|
|
||||||
class GaussianChannel(nn.Module):
|
class GaussianChannel(nn.Module):
|
||||||
|
@ -69,6 +70,6 @@ class GaussianChannel(nn.Module):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
def forward(self, x):
|
def forward(self, x):
|
||||||
Noise_Variance = Pow_Noise(channel_OSNR(), Const_Points_Pow(x))
|
Noise_Variance = Pow_Noise(channel_OSNR())
|
||||||
Noise_Volts = Channel_Noise_Model(Noise_Variance, [len(x), 2])
|
Noise_Volts = Channel_Noise_Model(Noise_Variance, [len(x), 2])
|
||||||
return x + Noise_Volts
|
return x + Noise_Volts
|
||||||
|
|
Loading…
Reference in New Issue