Se generan dos formas de onda:
- Cosenoidal con factor de chirp variable.
- Envolvente de pulso gaussiano con ensanchamiento variable.
Se modula la forma de onda cosenoidal con el pulso gaussiano generado, habiendo determinado numéricamente los parámetros de **k (factor de chirp) ** y **
Se definen los siguientes parámetros, necesarios para producir las dos formas de onda que finalmente conforman un pulso gaussiano con dispersión y chirp en función de la longitud del enlace de fibra óptica y el tiempo:
-
$z$ : Longitud de la fibra, seteada por el usuario. [km] -
$T_0$ : Ensanchamiento temporal inicial. [s] -
k: Factor de chirp inicial, lo setea el usuario, puede ser nulo, por defecto se calcula según:
$\frac{\Delta f}{T}$ .-
$\lambda$ : Según valor típico de fabricante. [nm] -
$\Delta \lambda$ : Según valor típico de fabricante.
-
-
$\beta_2$ : Dispersión de la velocidad de grupo, según:-
$\beta_2= -\frac{\lambda^2}{2\pi c}D$ -
D: Dispersión cromática, según valor típico del fabricante.
$\frac{ps}{nm·km}$
-
D: Dispersión cromática, según valor típico del fabricante.
-
-
$k_z$ , chirp a$z km$ de fibra, se calcula según:$k_z = k + \frac{(1+k^2)\beta_2z}{T_0^2}$
-
$\frac{T_z}{T_o}$ , relación entre ensanchamiento temporal inicial y ensanchamiento temporal a$k km$ , se calcula según:$\frac{T_z}{T_o} = \sqrt{(1 + \frac{\beta_2zk_o}{To^2})^2+(\frac{\beta_2z}{T_o^2})^2}$
-
$L_D$ , longitud de dispersión, se da cuando con un chirp inicial nulo,$T_z^2 = 2T_o^2$ , se calcula según:$L_D = \frac{T_o^2}{\beta_2}$
Se genera una forma de onda cosenoidal con frecuencia variable a lo largo del tiempo, que se modula con un pulso gaussiano, conformando así la forma de onda de interés.
Se emplea la librería scipy y sus herramientas para procesamiento de señales, más específicamente scipy.signal.chirp para generar de manera dinámica formas de onda con chirp.
y = scipy.signal.chirp(t, f0, t1, f1, method='linear', phi=0, vertex_zero=True)
donde los argumentos de entrada son:
- t es un arreglo los valores de tiempo en los que se evalúa el pulso.
- f0 es una variable numérica de tipo float que almacena la frecuencia en t=0 en (Hz).
- t1 es una variable numérica de tipo float que almacena el valor de tiempo para el cual el pulso adquiere la frecuencia f1.
- f1 es una variable numérica de tipo float que almacena la frecuencia en t1 (Hz).
- method es un parámetro opcional que especifica el tipo de barrido de frecuencia, {‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’}, si no se especifica se asume un barrido lineal.
- phi variable numérica del tipo float, opcional, que almacena el desvío de fase en grados, por defecto es nulo.
- tex_zero variable booleana, opcional que se usa sólo si el método de barrido de frecuencia deseado es el cuadrático, determina si el vértice de la parábola de frecuencia sucede en t=0 o t=1.
Retorna:
-
y, variable del tipo ndarray (numpy array) que contiene los valores de la forma de onda para cada valor de t y variación de frecuencia. Más precisamente la salida es
$cos(\phi + \frac{\pi}{180}\phi)$
Siendo el chirp inicial una variable del tipo int seteada por el usuario, puede ser nula, por defecto es -3.
el chirp a una longitud
donde
IMPORTANTE: Inicialmente se pensó a las variables para graficar una forma de onda con chirp como
Se genera un pulso gaussiano con la dispersión de interés, y se emplea para modular la forma de onda consenoidal con chirp.
Se emplea la librería "scipy" y más específicamente sus herramientas para procesamiento de señales y de generación de pulsos gaussianos scipy.signal.gausspulse
scipy.signal.gausspulse(t, fc=1000, bw=0.5, bwr=-6, tpr=-60, retquad=False, retenv=False)
Donde:
- retquad es una variable booleana
- True, retorna la parte real e imaginaria, en fase y cuadratura.
- retenv es una variable booleana
- True, retorna la envolvente de la señal, sin modular.
- False, retorna la señal modulada
- t es un arreglo los valores de tiempo en los que se evalúa el pulso. O un string de valor "cutoff".
- fc variable tipo int, opcional que almacena el valor de la frecuencia central en Hz, por defecto es 1000 Hz.
- bw variable de tipo float, opcional, indica el ancho de banda fraccional en el dominio de la frecuencia, por defecto es 0.5.
- bwr variable de tipo float, opcional, indica el nivel como fracción del ancho de banda en dB, por defecto es 6dB.
- tpr variable del tipo float, opcional, si f='cutoff', la función retorna el tiempo en el que la amplitud cae a tpr, por defecto -60dB
- retquad, variable booleana, opcional,
- True, retorna la parte real e imaginaria de la onda, por defecto es falso.
- retenv, variable booleana, opcional
- True, retorna la envolvente de la señal, por defecto es falso.
Retorna:
Sinusoidal modulada con un pulso gaussiano
exp(-a t^2) exp(1j*2*pi*fc*t).
yI : ndarray (arreglo numpy) con la parte real de la señal. Siempre la retorna.
yQ : ndarray (arreglo numpy) con la parte imaginaria de la señal. La retorna sólo si la var retquad es True.
yenv : ndarray (arreglo numpy) que contiene la envolvente de la señal. La retorna si retenv es True.
fc se setea de manera proporcional a