
% Código Octave que permite generar las gráficas de simulación del multiplicador de 1 bit

t_max = 10;
t = [0:0.01:t_max];



% Señal de entrada senoidal de 2 Hz
frecuencia_senial_1 = 2;
senial_1 = cos((2 * pi * frecuencia_senial_1) .* t);
subplot(4, 2, 1);
plot(t(1:(size(t)(2) / 4)), senial_1(1:(size(t)(2) / 4)));
title('Señal de entrada (2 Hz)');
ylim([-1.25 1.25]);
subplot(4, 2, 2);
axis();
fft_senial_1 = abs(fft(senial_1)(1:size(t)(2) / 2));
plot(t(1:size(t)(2) / 2), fft_senial_1);
title('(pico en 2 Hz)');


% ...convertida en una señal delta-digma
delta_sigma = zeros(1, size(t)(2));
for i = [1:size(t)(2)];
	v_normalizado = (senial_1(i) + 1) / 2;
	if (v_normalizado > rand());
		delta_sigma(i) = 1;
	else
		delta_sigma(i) = -1;
	end
end
subplot(4, 2, 3);
plot(t(1:(size(t)(2) / 4)), delta_sigma(1:(size(t)(2) / 4)));
title('Delta-sigma');
ylim([-1.25 1.25]);
subplot(4, 2, 4);
axis();
fft_delta_sigma = abs(fft(delta_sigma)(1:size(t)(2) / 2));
plot(t(1:size(t)(2) / 2), fft_delta_sigma);


% Señal del oscilador local a 5 Hz (cuadrada)
frecuencia_senial_2 = 5;
senial_2 = cos((2 * pi * frecuencia_senial_2) .* t);
for i = [1:size(t)(2)];
	if (senial_2(i) > 0);
		senial_2(i) = 1;
	else
		senial_2(i) = -1;
	end
end
subplot(4, 2, 5);
plot(t(1:(size(t)(2) / 4)), senial_2(1:(size(t)(2) / 4)));
title('Señal cuadrada del oscilador local (5 Hz)');
ylim([-1.25 1.25]);
subplot(4, 2, 6);
axis();
fft_senial_2 = abs(fft(senial_2)(1:size(t)(2) / 2));
plot(t(1:size(t)(2) / 2), fft_senial_2);
title('(pico en 5 Hz)');


% Ambas señales multiplicadas
multiplicacion = delta_sigma .* senial_2;
subplot(4, 2, 7);
plot(t(1:(size(t)(2) / 4)), multiplicacion(1:(size(t)(2) / 4)));
title('Señales cuadradas multiplicadas (XNOR)');
ylim([-1.25 1.25]);
subplot(4, 2, 8);
axis();
fft_multiplicacion = abs(fft(multiplicacion)(1:size(t)(2) / 2));
plot(t(1:size(t)(2) / 2), fft_multiplicacion);
title('(picos en 5 - 2 = 3 Hz y en 5 + 2 = 7 Hz)');

