%% Ejemplo CDMA clc clear all close all % Parametros L_data = 4; % nro bits de datos L_code = 10; %bits de codigo por cada bit de dato L = L_code * L_data; % longitud de vector de datos para proceso n_usr = 2; % cantidad de usuarios simultaneos %L = n_code*n_data; %longitud de vector de datos t = 0:L- 1; %% Generacion de datos % generacion de datos y las secuencias pseudo aleatorias para la codificacion t_og = 0:L_data-1; data_og = randi([0 1],L_data,n_usr); data = 2*data_og -1; code_unq = randi([0 1], L_code, n_usr); %% Codificacion % "estiro" la señal para que su longitud sea compatible con la del codigo data = kron(data, ones(L_code,1)); % concatena la secuencia code_unq n_data veces code = repmat(code_unq,[L_data 1]); %multiplica los datos por sus codigos signal = data .* code; %FFT para comparacion data_fft = fft(data)/L; data_fft = data_fft(1:L/2,:); signal_fft = fft(signal)/L; signal_fft = signal_fft(1:L/2,:); f = linspace(0, 0.5, L/2);%vector de frecuencias normalizado respecto a f de muestreo for i = 1:n_usr figure subplot(3, 2, 1) stairs(t, data(:,i), 'linewidth', 3) title(['datos usr ' mat2str(i)]) xlim([0 (L- 1)]) subplot(3, 2, 3) stairs(t, code(:,i), 'linewidth', 3) title(['codigo usr ' mat2str(i)]) xlim([0 (L- 1)]) subplot(3, 2, 5) stairs(t, signal(:,i), 'linewidth', 3) title(['señal usr ' mat2str(i)]) xlim([0 (L- 1)]) subplot(3, 2, 2) stem(f, abs(data_fft(:,i))) title(['espectro señal original usr' mat2str(i)]) subplot(3, 2, 4) stem(f, abs(signal_fft(:,i))) title(['espectro señal codificada usr' mat2str(i)]) end %señal transmitida, es la suma de las señales de todos los usuarios rx_signal = sum(signal,2); %% Decodificacion for i = 1:n_usr %para cada usr, multiplico la señal recibida por su codigo recovered_signal(:,i) = code(:,i).* rx_signal; %analizo la señal en cada tiempo de simbolo rx_data_raw(:,:,i) = reshape(recovered_signal(:,i), L_code, L_data); rx_data_sum(:,i) = sum(rx_data_raw(:,:,i),1)'/L_code; %detecto y regenero el simbolo rx_data(:,i) = rx_data_sum(:,i) > 0; end %% Comparacion de señal recuperada con transmitida rx_data = double(rx_data); for i = 1:n_usr figure subplot(2,1,1) stem(t_og', rx_data(:,i), 'linewidth', 3); title(['datos usr ' mat2str(i)]) subplot(2,1,2) stem(t_og', data_og(:,i), 'linewidth', 3); title(['datos decodificados usr ' mat2str(i)]) end %%analisis de errores e = (data_og - rx_data) e_total = sum(sum(e.^2), 2)