CDMA es un protocolo de canalización para Acceso Múltiple , donde la información puede ser enviada simultáneamente a través de varios transmisores sobre un solo canal de comunicación.
Se logra en los siguientes pasos:
- Se genera una señal que se extiende sobre un amplio ancho de banda.
- El código que realiza esta acción se denomina código de difusión.
- Posteriormente, se puede seleccionar una señal específica con un código dado incluso en presencia de muchas otras señales.
Se utiliza principalmente en redes móviles como 2G y 3G.
¿Cómo funciona CDMA?
Para ver cómo funciona CDMA, debemos entender las secuencias ortogonales (también conocidas como chips).
Sea N el número de estaciones que establecen acceso múltiple por un canal común.
Entonces las propiedades de las sucesiones ortogonales se pueden establecer de la siguiente manera:
- Se puede pensar en una secuencia ortogonal como una array 1xN.
Por ejemplo: [+1 -1 +1 -1] para N = 4. - Las reglas de multiplicación escalar y suma de arrays siguen como de costumbre.
Por ejemplo: 3 . [+1 -1 +1 -1] = [+3 -3 +3 -3]Por ejemplo: [+1 -1 +1 -1] + [-1 -1 -1 -1] = [0 -2 0 -2]
- Producto Interno: Se evalúa multiplicando dos secuencias elemento por elemento y luego sumando todos los elementos de la lista resultante.
- El Producto Interno de una sucesión consigo misma es igual a N
[+1 -1 +1 -1] . [+1 -1 +1 -1] = 1 + 1 + 1 + 1 = 4 - El producto interno de dos secuencias distintas es cero
[+1 -1 +1 -1] . [+1 +1 +1 +1] = 1-1+1-1 = 0
- El Producto Interno de una sucesión consigo misma es igual a N
Para generar secuencias ortogonales válidas, use una tabla de Walsh de la siguiente manera:
- Regla 1:
- Regla 2:
Donde = Complemento de (Reemplazar +1 por -1 y -1 por +1)
Ejemplo:
Cada fila de la array representa una secuencia ortogonal. Por lo tanto, podemos construir secuencias para N = . Ahora echemos un vistazo a cómo funciona CDMA usando secuencias ortogonales.
Procedimiento:
- La estación codifica su bit de datos de la siguiente manera.
- +1 si bit = 1
- -1 si bit = 0
- sin señal (interpretado como 0) si la estación está inactiva
- A cada estación se le asigna una secuencia ortogonal única (código) que tiene una longitud de N bits para N estaciones
- Cada estación realiza una multiplicación escalar de su bit de datos codificado y secuencia de código.
- La secuencia resultante se coloca luego en el canal.
- Dado que el canal es común, las amplitudes se suman y, por lo tanto, la secuencia de canales resultante es la suma de las secuencias de todos los canales.
- Si la estación 1 quiere escuchar la estación 2, multiplica (producto interno) la secuencia de canales con el código de la estación S2.
- Luego, el producto interno se divide por N para obtener el bit de datos transmitido desde la estación 2.
Ejemplo: suponga 4 estaciones S1, S2, S3, S4. Usaremos la tabla Walsh de 4×4 para asignarles códigos.
C1 = [+1 +1 +1 +1] C2 = [+1 -1 +1 -1] C3 = [+1 +1 -1 -1] C4 = [+1 -1 -1 +1] Let their data bits currently be: D1 = -1 D2 = -1 D3 = 0 (Silent) D4 = +1 Resultant channel sequence = C1.D1 + C2.D2 + C3.D3 + C4.D4 = [-1 -1 -1 -1] + [-1 +1 -1 +1] + [0 0 0 0] + [+1 -1 -1 +1] = [-1 -1 -3 +1] Now suppose station 1 wants to listen to station 2. Inner Product = [-1 -1 -3 +1] x C2 = -1 + 1 - 3 - 1 = -4 Data bit that was sent = -4/4 = -1.
El siguiente programa ilustra la implementación de un canal CDMA simple:
// Java code illustrating a simple implementation of CDMA import java.util.*; public class CDMA { private int[][] wtable; private int[][] copy; private int[] channel_sequence; public void setUp(int[] data, int num_stations) { wtable = new int[num_stations][num_stations]; copy = new int[num_stations][num_stations]; buildWalshTable(num_stations, 0, num_stations - 1, 0, num_stations - 1, false); showWalshTable(num_stations); for (int i = 0; i < num_stations; i++) { for (int j = 0; j < num_stations; j++) { // Making a copy of walsh table // to be used later copy[i][j] = wtable[i][j]; // each row in table is code for one station. // So we multiply each row with station data wtable[i][j] *= data[i]; } } channel_sequence = new int[num_stations]; for (int i = 0; i < num_stations; i++) { for (int j = 0; j < num_stations; j++) { // Adding all sequences to get channel sequence channel_sequence[i] += wtable[j][i]; } } } public void listenTo(int sourceStation, int num_stations) { int innerProduct = 0; for (int i = 0; i < num_stations; i++) { // multiply channel sequence and source station code innerProduct += copy[sourceStation][i] * channel_sequence[i]; } System.out.println("The data received is: " + (innerProduct / num_stations)); } public int buildWalshTable(int len, int i1, int i2, int j1, int j2, boolean isBar) { // len = size of matrix. (i1, j1), (i2, j2) are // starting and ending indices of wtable. // isBar represents whether we want to add simple entry // or complement(southeast submatrix) to wtable. if (len == 2) { if (!isBar) { wtable[i1][j1] = 1; wtable[i1][j2] = 1; wtable[i2][j1] = 1; wtable[i2][j2] = -1; } else { wtable[i1][j1] = -1; wtable[i1][j2] = -1; wtable[i2][j1] = -1; wtable[i2][j2] = +1; } return 0; } int midi = (i1 + i2) / 2; int midj = (j1 + j2) / 2; buildWalshTable(len / 2, i1, midi, j1, midj, isBar); buildWalshTable(len / 2, i1, midi, midj + 1, j2, isBar); buildWalshTable(len / 2, midi + 1, i2, j1, midj, isBar); buildWalshTable(len / 2, midi + 1, i2, midj + 1, j2, !isBar); return 0; } public void showWalshTable(int num_stations) { System.out.print("\n"); for (int i = 0; i < num_stations; i++) { for (int j = 0; j < num_stations; j++) { System.out.print(wtable[i][j] + " "); } System.out.print("\n"); } System.out.println("-------------------------"); System.out.print("\n"); } // Driver Code public static void main(String[] args) { int num_stations = 4; int[] data = new int[num_stations]; //data bits corresponding to each station data[0] = -1; data[1] = -1; data[2] = 0; data[3] = 1; CDMA channel = new CDMA(); channel.setUp(data, num_stations); // station you want to listen to int sourceStation = 3; channel.listenTo(sourceStation, num_stations); } }
Salida :
1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1 The data received is: 1
Ventajas de CDMA : a diferencia de otros esquemas de canalización como FDMA o TDMA que dividen el canal según la frecuencia o los intervalos de tiempo, CDMA permite que todas las estaciones tengan acceso al ancho de banda completo del canal durante toda la duración.