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 | ||||
| import math | ||||
| import numpy as np | ||||
| 
 | ||||
| 
 | ||||
|  | @ -44,24 +45,24 @@ def Const_Points_Pow(IQ): | |||
|     return p_enc_avg_dB | ||||
| 
 | ||||
| 
 | ||||
| def Pow_Noise(CH_OSNR, CPP): | ||||
| def Pow_Noise(CH_OSNR): | ||||
|     """ | ||||
|     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) | ||||
|     Var_Noise = p_N_watt | ||||
|     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 | ||||
|     through a channel. | ||||
|     """ | ||||
|     return torch.distributions.normal.Normal( | ||||
|         0, torch.sqrt(NV*10000) | ||||
|     ).sample(S) | ||||
|         0, math.sqrt(variance * 5000) | ||||
|     ).sample(shape) | ||||
| 
 | ||||
| 
 | ||||
| class GaussianChannel(nn.Module): | ||||
|  | @ -69,6 +70,6 @@ class GaussianChannel(nn.Module): | |||
|         super().__init__() | ||||
| 
 | ||||
|     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]) | ||||
|         return x + Noise_Volts | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue