% Parámetros del filtro RLC
R = 100; % Resistencia en ohmios
C = 1e-6; % Capacitancia en faradios
L = 25.3e-3; % Inductancia en henrios
fc = 1 / (2 * pi * sqrt(L * C)); % Frecuencia de corte teórica
w_c = 2 * pi * fc; % Frecuencia angular de corte
% Generación de la señal original (senoidal) y ruido
fs = 10e3; % Frecuencia de muestreo
t = linspace(0, 0.01, fs * 0.01); % Tiempo de 0 a 10 ms
f_signal = 500; % Frecuencia de la señal en Hz (dentro del rango de paso)
f_noise = 5e3; % Frecuencia del ruido (fuera del rango de paso)
signal = sin(2 * pi * f_signal * t); % Señal original
noise = 0.5 * sin(2 * pi * f_noise * t); % Ruido
contaminated_signal = signal + noise; % Señal contaminada
% Función de transferencia del filtro RLC (dominio de la frecuencia)
frequencies = linspace(0, fs / 2, 1000);
w = 2 * pi * frequencies;
H = 1 ./ (1 + 1i * R * C * w - (L * C) * (w.^2)); % Respuesta del filtro
% Aplicación del filtro en el dominio de la frecuencia
contaminated_spectrum = fft(contaminated_signal);
% Cálculo de las frecuencias para la FFT
N = length(contaminated_signal);
frequencies_full = (0:N-1) * (fs / N); % Frecuencias
frequencies_full = frequencies_full - fs * (frequencies_full > fs / 2); % Ajuste
para frecuencias negativas
% Respuesta del filtro en el dominio de la frecuencia completa
H_full = 1 ./ (1 + 1i * R * C * 2 * pi * frequencies_full - ...
(L * C) * (2 * pi * frequencies_full).^2);
% Aplicación del filtro
filtered_spectrum = contaminated_spectrum .* H_full;
% Transformada inversa para obtener la señal filtrada
filtered_signal = ifft(filtered_spectrum, 'symmetric');
% Gráficos
figure;
% Señales en el dominio del tiempo
subplot(3, 1, 1);
plot(t, signal, 'b', 'DisplayName', 'Señal Original'); hold on;
plot(t, contaminated_signal, 'r', 'DisplayName', 'Señal Contaminada');
plot(t, filtered_signal, 'g', 'DisplayName', 'Señal Filtrada');
title('Señales en el Tiempo');
xlabel('Tiempo (s)');
ylabel('Amplitud');
legend;
grid on;
% Espectro de frecuencias
subplot(3, 1, 2);
% Densidad espectral de potencia de la señal contaminada
[pxx_contaminated, f_contaminated] = pwelch(contaminated_signal, [], [], [], fs);
% Densidad espectral de potencia de la señal filtrada
[pxx_filtered, f_filtered] = pwelch(filtered_signal, [], [], [], fs);
% Graficar ambas densidades espectrales
plot(f_contaminated, 10*log10(pxx_contaminated), 'r', 'DisplayName',
'Contaminada'); hold on;
plot(f_filtered, 10*log10(pxx_filtered), 'g', 'DisplayName', 'Filtrada');
title('Espectro de Frecuencias');
xlabel('Frecuencia (Hz)');
ylabel('Densidad de Potencia (dB/Hz)');
legend;
grid on;
% Respuesta en frecuencia del filtro
subplot(3, 1, 3);
plot(frequencies, 20 * log10(abs(H)), 'b', 'DisplayName', 'Respuesta del Filtro');
xline(fc, 'r--', 'DisplayName', sprintf('Frecuencia de Corte (%.1f Hz)', fc));
title('Respuesta en Frecuencia del Filtro');
xlabel('Frecuencia (Hz)');
ylabel('Ganancia (dB)');
legend;
grid on;
sgtitle('Análisis de Filtro RLC Pasa-Bajos');