6. Polarización

Autores:Luis Miguel Sánchez Brea y José Luis Vilas Prieto

Herramientas utilizadas en este tutorial:

Módulo con las funciones principales polarizacion.py

Contenidos de los archivos:

  • polarizacion.py:

    • rotacion(). Matriz de un rotador.
    • polarizadorLineal(). Matriz de un polarizador lineal.
    • polarizadorRetardador(). Matriz de un retardador lineal.
    • laminaLambdaCuartos(). Matriz de un retardador de cuarto de onda.
    • laminaLambdaMedios(). Matriz de un retardador de media onda.
    • luzLineal(). Vector de Jones de luz linealmente polarizada.
    • luzCircular(). Vector de Jones de luz polarizada circular.
    • luzEliptica(). Vector de Jones de luz elípticamente polarizada.
    • intensidad(). Calcula la intensidad de luz de un estado.
  • ley_malus.py:

    • ley_malus(). Representacion de la intensidad de la luz al atravesar dos polarizadores lineales.
  • efecto_zenon.py:

    • nPolarizadores(). Producto de N polarizadores lineales.
    • efectoZenon(). Intensidad transmitida por un conjunto de N polarizadores.

Descarga de archivos:

Módulo interactivo emanim12.py

Módulo con las funciones principales polarizacion.py

Archivo con la descripción de la ley de Malus ley_malus.py

Archivo con el ejemplo del efecto Zenón efecto_zenon.py

6.1. Introducción

Desde un punto de vista clásico, la luz es una onda electromagnética constituida por dos campos, eléctrico y magnético oscilando normales a la dirección de propagación y normalmente entre sí. Bajo esta definición se llama polarización de la luz a la trayectoria del vector campo eléctrico. Si la trayectoria de la luz es caótica se dice que la luz está despolarizada, así mismo si la trayectoria está bien definida hablamos de estados de polarización o también llamados estados puros.

La polarización de la luz está intrínsecamente ligada al concepto de onda plana (ver sección, Fuentes de luz-Onda plana).

6.2. Programa interactivo para el análisis de la polarización

Andras Szilagyi ha realizado un módulo interactivo muy interesante para el análisis de la polarizacion: emanim12.py. Se puede encontrar en http://www.enzim.hu/~szia/emanim for more information.

En la siguiente Figura se muestra un ejemplo de utilización de este módulo. Tiene un menú y botones para seleccionar el tipo de análisis de polarización y parámetros utilizados

../../_images/emanim.png

Figura. Ejemplo de uso del programa enamin.py

6.3. Definiciones de polarizadores

La luz polarizada puede cambiar de estado al atravesar distintos elementos ópticos. La caracterización y modelado de estos medios resulta crítica en óptica. El cálculo de Jones permite no solo definir estados de polarización sino además, representar los elementos ópticos mediante matrices, tales que el vector de Jones a la salida del sistema sea la acción de la matriz del medio sobre un vector de Jones.

Rotador:

Un rotador es un sistema capaz de rotar el vector de Jones pero no modificar su estado. Por ello están representados por matrices de rotación. Para su implementación basta con definir la matriz

\left(\begin{array}{cc} \cos\theta & \sin\theta\\   -\sin\theta & \cos\theta   \end{array}\right),

def rotacion(theta = 0):
	"""matriz de rotacion
	- theta: angulo de rotacion
	"""
	#Definicion de la matriz
	return sp.matrix(sp.array([[ cos(theta), sin(theta)],
			[-sin(theta), cos(theta)]]), dtype = float)
Polarizador lineal:
 

Los polarizadores lineales son elementos ópticos tales que independientemente del estado de polarización a la entrada transforman dicho estado en luz linealmente polarizada con acimut \theta. Donde \theta representa el ángulo del eje del polarizador. La matriz de Jones de un polarizador lineal viene representada por

\left(\begin{array}{cc} \cos^2\theta & \sin\theta\cos\theta\\   \sin\theta\cos\theta & \sin^2\theta   \end{array}\right),

def polarizadorLineal(theta = 0):
	"""Polarizador lineal
	- theta: angulo de entrada en radianes
	"""
	#Metodo directo
	#return sp.matrix(sp.array([[cos(theta) ** 2, sin(theta) * cos(theta)],
	#		[sin(theta) * cos(theta), sin(theta) ** 2]]), dtype = float)
	
	PL=sp.matrix(sp.array([[1, 0], [0, 0]]), dtype = float)
	return rotacion(-theta) * PL * rotacion(theta)
Polarizador Retardador:
 

Un retardador lineal es un elemento óptico compuesto por un material birrefringente capaz de introducir un retardo entre las componentes paralela y perpendicular de la luz incidente. Está constituido por dos ejes o también llamadas líneas neutras con índices de refracción asociados ordinario y extraordinario, la orientación de los ejes y el espesor determinan la acción de la lámina sobre la luz incidente. El retardo se introduce fruto de la diferencia de camino óptico asociada a cada eje. La matriz de Jones asociada a un retardador viene dada por

\left(\begin{array}{cc} \cos\frac{\delta}{2}+i\frac{\delta}{2}\cos2\theta & i\sin\frac{\delta}{2}\sin2\theta \\ i\sin\frac{\delta}{2}\sin2\theta & \cos\frac{\delta}{2}-i\sin\frac{\delta}{2}\cos2\theta   \end{array}\right)

def polarizadorRetardador(desfase = 0, ne = 1, no = 1, d = 1 * um, wavelength = 0.6328 * um, theta = 0 * grados):
	"""Retardador
	   Se puede calcular de dos formas. Si desfase es distinto de None, entonces es lo que manda,
	   Si desfase=None, entonces se calcula el desfase con el resto de cosas.
	  - desfase: desfase del rotador definido como 2*pi*(ne-no)*d/lambda
	  - ne: indice extraordinario, no: indice ordinario, d: espesor de la lamina, wavelength: longitud de onda
	  - theta: angulo de rotacion
	"""
	#Definicion del retardo
	if desfase == None:
		desfase = 2 * sp.pi * (ne - no) * d / wavelength
	
	#Definicion de la matriz del retardador
	Lretardo = sp.matrix(sp.array([[ 1, 0],
       [ 0, sp.exp(1j * desfase)]]), dtype = complex)

	return rotacion(-theta) * Lretardo * rotacion(theta)
Lámina Lambda/4:
 

Las láminas retardadoras hacen uso de la birrefringencia de la luz. Una lámina de cuarto de onda introduce un retardo de \pi/2 entre las componentes del vector de Jones de la luz incidente sobre la lámina. La matriz de Jones del retardador de cuarto de onda es

\left(\begin{array}{cc} 1+i\cos2\theta & i\sin2\theta \\ i\sin2\theta & 1-i\cos2\theta \end{array}\right),

def laminaLambdaCuartos(theta = 0 * grados):
	"""lamina lambda/4. Muy utilizada porque pasa de luz linealmente polarizada a luz circularmente polarizada
	"""
	#Definicion de la matriz
	return polarizadorRetardador(desfase = sp.pi / 2, theta = theta)
Lámina Lambda/2:
 

Las láminas de media onda, alteran el sentido de giro del vector luz, derechas a izquierda o viceversa. Por tanto los estados linealmente polarizados son invariantes bajo estos elementos ópticos, mientras que si se incide sobre una lámina de media onda con luz circular a derechas, a la salida mantiene la circularidad pero el sentido de giro será levógiro. Idem para estados elípticamente polarizados. La matriz de Jones del retardador de media onda es

\left(\begin{array}{cc} \cos2\theta & \sin2\theta \\ \sin2\theta & -\cos2\theta \end{array}\right),

def laminaLambdaMedios(theta = 0 * grados):
	"""lamina lambda/2. Muy utilizada porque gira el estado de polarizacion
	"""
	#Definicion de la matriz
	return polarizadorRetardador(desfase = sp.pi, theta = theta)

6.4. Definiciones de estados de luz polarizada

Considérese una onda plana monocromática de frecuencia \omega, vector de onda \vec{k}, y amplitud E_0 representada como

E_x=E_{0x}e^{i\vec{k}\vec{r}-\omega t+\delta_x},

E_y=E_{0y}e^{i\vec{k}\vec{r}-\omega t+\delta_x}.

Es posible definir esta señal únicamente con la parte espacial. Así denotando el desfase como \delta=\delta_y-\delta_x se escribe

\vec{E}=\left(\begin{array}{c} E_{0_x}\\E_{0y}e^{i\delta}\end{array}\right).

Este vector recibe el nombre de vector de Jones. Obsérvese como este vector representa la proyección trayectoria del campo eléctrico sobre un plano perpendicular a la dirección de propagación. Así se puede probar como el conjunto de trayectorias posibles de acuerdo a estos vectores están definidas por la ecuación

{x^2 \over E_{0x}^2}+{y^2\over E_{0y}^2}-2 {xy\cos\delta  \over E_{0x}E_{0y}}=\sin^2\delta.

Esta ecuación representa una elipse, la llamada elipse de polarización y de ella derivan el conjunto de estados puros. De este modo, si \delta=n\pi con n, entero, o si E_{0x}=0 o E_{0y}=0, la elipse de polarización degenera en una recta, y se dice que el estado de la luz es linealmente polarizado, así mismo, si E_{0x}=E_{0y} y \delta=\pm\pi/2, la elipse degenera en una circunferencia, y por tanto la luz es circularmente polarizada. En cualquier otro caso distinto de estos dos la luz se dice que posee polarización elíptica.

Luz Lineal:

Un vector de Jones unitario de luz linealmente polarizada es siempre de la forma

\vec{J}=\left(\begin{array}{c} \cos\alpha\\ \sin\alpha \end{array}\right).

Donde \alpha representa el azimut del estado de luz, es decir, la inclinación del vector campo eléctrico. luzLineal implementa este vector.

def luzLineal(alfa = 0):
	"""Luz linealmente polarizada
	   - alfa, angulo en el cual esta polarizada
    	"""
	#Definicion del vector de Jones
	return sp.matrix([[ cos(alfa)], [sin(alfa)]])
Luz Circular:

Bajo la condición \delta=\pm\pi/2 con E_{0x}=E_{0y} se obtienen los vectores de Jones

El doble signo denota el sentido de giro del vector campo eléctrico, si es positivo, entonces la luz será circularmente polarizada a derechas o dextrógira. En caso contrario se dice que es circularmente polarizada a izquierdas o levógira. La elección entre circular a derechas o izquierdas se especifica mediante una d o una i en el argumento de la función luzCircular

def luzCircular(tipo = 'd'):
	"""Luz circularmente polarizada
	   - tipo, 'd': derecha   'i': izquierda
    	"""
	#Definicion del vector de Jones a dextrogiro o levogiro
	if tipo == 'd':
		return sp.matrix([[1], [1j]]) / sp.sqrt(2)
	elif tipo == 'i':
		return sp.matrix([[1], [-1j]]) / sp.sqrt(2)
Luz Elíptica:

Si el vector de Jones no es ninguno de los dos casos anteriores, lineal o circular, entonces es necesariamente elípticamente polarizado. Su definición como función de Python debe emplear la forma más general del vector de Jones,

\left(\begin{array}{c} a \\ b e^{i\delta}\end{array}\right).

def luzEliptica(a = 1, b = 1, desfase = 0, theta = 0):
	"""Luz elipticamente polarizada
	   - a: amplitud de eje x
	   - b: amplitud de eje y
	   - desfase: desfase entre ambos ejes
	   - theta: rotacion del haz respecto de eje x
    	"""
	#Definicion del vector de Jones
	M = sp.matrix([[a], [b * sp.exp(1j * desfase)]], dtype = complex)
	return rotacion(theta) * M

6.5. Cálculo de la intensidad de un vector de polarización

La intensidad de la luz no es más que el módulo del vector de Jones. La función intensidad cumple este cometido

def intensidad(vectorPolarizacion):
	#Calculo de la intensidad
	return float(abs(vectorPolarizacion[0]) ** 2 + abs(vectorPolarizacion[1]) ** 2)

6.6. Polarización básica

La polarización de la luz se puede ver afectada al atravesar esta distintos elementos ópticos. El formalismo de Jones constituye una representación tanto de los elementos ópticos, mediante matrices 2x2, como de estados puros de polarización, mediante vectores. De este modo, el estado de polarización a la salida de un elemento óptico queda determinado por la acción de la matriz de Jones del elemento sobre el vector de Jones que representa el estado de polarización incidente.

Así supónganse los siguientes ejemplos

Polarizador lineal

Un haz de luz linealmente polarizado según el eje x incide sobre un polarizador cuyo eje está alineado con el eje y. Obviamente no hay transmisión de luz, por ello el vector de Jones a la salida del polarizador debe ser el vector nulo, y en consecuencia la intensidad de la luz es cero. En efecto

\left(\begin{array}{cc}0 & 0\\0 & 1\end{array}\right)\left(\begin{array}{c}1\\0\end{array}\right)=\left(\begin{array}{c}0\\0\end{array}\right)

Esto se programaría de la siguiente forma:

PolarizadorLineal(90)*luzLineal(0)

Lamina de media de onda

Un haz de luz circularmente polarizado a derechas incide sobre una lámina de media onda cuyo eje rápido puede estar aleatoriamente dispuesto, por sencillez supóngase que está alineado con el eje de abscisas. El resultado de este experimento es la obtención de luz circularmente polarizada a izquierdas, como muestra el cálculo:

laminaLambdaMedios(0)*luzCircular('d')

\left(\begin{array}{cc}1 & 0\\0 & -1\end{array}\right)\left(\begin{array}{c}1\\i\end{array}\right)=\left(\begin{array}{c}1\\-i\end{array}\right)

Lámina de cuarto de onda

Un haz de luz linealmente polarizado según el eje x incide sobre una lámina retardadora cuyo eje rápido está inclinado 45º respecto de la horizontal. Probaremos como la luz a la salida del sistema es circularmente polarizada:

laminaLambdaCuartos(45)*luzLineal(0)

\left(\begin{array}{cc}1 & i\\i & 1\end{array}\right)\left(\begin{array}{c}1\\0\end{array}\right)=\left(\begin{array}{c}1\\i\end{array}\right)

6.7. Ley de Malus

La ley de Malus establece que la intensidad de la luz a la salida de un sistema de dos polarizadores es directamente proporcional a \cos^2\theta siendo \theta el ángulo comprendido entre los ejes de los polarizadores. La demostración es sencilla, basta considerar un estado de luz lineal incidiendo sobre un polarizador, y calcular el vector de Jones a la salida, el módulo cuadrado de este vector de Jones posee una dependencia directamente proporcional a \cos^2\theta. Este hecho se muestra en el siguiente código.

"""Ley de Malus"""
#Importamos modulos scipy, sys y polarizacion
import scipy as sp
import sys
sys.path.append('../')
from polarizacion import *

#Angulo entre los polarizadores
angulos = sp.linspace(0,2*sp.pi,100)
#Se predefine la intensidad para un bucle posterior
I= sp.zeros_like(angulos)

#haz incidente
haz=luzLineal(alfa=0*grados)
P1 = polarizadorLineal(theta = 0*grados)

#Calculo de la intensidad para cada angulo
for i in range(len(angulos)):
	P2 = polarizadorLineal(theta = angulos[i])
	vectorFinal = P2*P1*haz
	I[i]=intensidad(vectorFinal)

#Representacion de la intensidad
plt.figure()
plt.plot(angulos/grados,I,'k',lw=2)
plt.xlabel(r'$\theta$ (grados)',fontsize=24)
plt.ylabel('Intensidad transmitida',fontsize=24)
plt.xlim([0,angulos[-1]/grados])
plt.show()

(Source code, png, hires.png, pdf)

../../_images/ley_malus.png

6.8. Efecto Zenon

El efecto Zenón es el paso de luz a través de un sistema de N polarizadores. Si bien se extingue la luz bajo cuando dos polarizadores posicionan sus ejes perpendicularmente, bajo otros ángulos la luz atraviesa el sistema. Así, si se disponen N polarizadores con ángulo entre sus ejes 360/N aumentar la transmitancia al aumentar el número de polarizadores.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#----------------------------------------------------------------------
# Autor:	Luis Miguel Sanchez Brea
# Fecha		2013/10/24 (version 1.0)
# Licencia:	GPL
#----------------------------------------------------------------------
"""
Efecto Zenon, n polarizadores rotados igual entre si.
"""
import scipy as sp
import sys
sys.path.append('../')
from polarizacion import *

def nPolarizadores(N = 4):
	#Define un sistema de una pila de N polarizadores

	#Angulo de cada polarizador
	angulos = sp.linspace(sp.pi / 2, 0, N)

	#Definicion de la matriz del polarizador
	M = polarizadorLineal(theta = angulos[0])
	#Calculo de la matriz producto
	for i in range(1, len(angulos)):
		polarizador = polarizadorLineal(theta = angulos[i])
		M = M * polarizador

	#Vector de Jones a la salida del sistema de N polarizadores bajo incidencia de luz
	#polarizada circular dextrogira
	vectorFinal = M * luzCircular(tipo = 'd')
	return intensidad(vectorFinal)


def efectoZenon(numMaxPolarizadores = 5):
	#Numero de polarizadores
	numPolarizadores = sp.array(range(2, numMaxPolarizadores + 1))
	#Intensidad a la salida, se preinicializa con el zeros y posteriormente se calcula
	intensidad = sp.zeros(len(numPolarizadores), dtype = float)
	for i in range(len(numPolarizadores)):
		intensidad[i] = nPolarizadores(N = numPolarizadores[i])

	#Representacion de la intensidad
	plt.figure()
	plt.plot(numPolarizadores, intensidad, 'ko')
	plt.xlabel('# polarizadores', fontsize = 20)
	plt.ylabel('$I_{transmitida}$', fontsize = 24)
	plt.title('efecto zenon', fontsize = 24)


if __name__ == '__main__':
	efectoZenon(numMaxPolarizadores = 75)
	plt.show()

(Source code, png, hires.png, pdf)

../../_images/efecto_zenon.png