0% encontró este documento útil (0 votos)
14 vistas2 páginas

Programa Matlab

serie y transformada programa

Cargado por

kevin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas2 páginas

Programa Matlab

serie y transformada programa

Cargado por

kevin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

% 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');

También podría gustarte