Mi pregunta es, si quiero pasar una señal de paso alto, ¿es lo mismo que pasar una señal de paso bajo y restarla de la señal? ¿Es teóricamente lo mismo? ¿Es prácticamente lo mismo?
He buscado (tanto en google como en dsp.stackexchange) y encuentro respuestas conflictivas. He estado jugando con una señal y aquí están los resultados. No puedo darle mucho sentido. Aquí está la señal con la frecuencia de muestreo una vez cada cuatro segundos. Diseñé un filtro digital de paso bajo con la banda de transición de 0,8 mHz a 1 mHz y filtré la señal. Luego, también diseñé un filtro de paso alto con la misma banda de transición y filtré la señal. Aquí están los resultados.
Esta primera imagen muestra la señal original en negro y la señal de paso bajo en azul. Están casi uno encima del otro, pero no del todo. La curva roja es la señal menos la señal de paso alto que está justo encima de la señal.
Esta segunda imagen es solo la primera ampliada para mostrar lo que está sucediendo. Aquí vemos que claramente los dos no son lo mismo. Mi pregunta es por qué ¿Es algo acerca de cómo he implementado los dos filtros o es algo teórico independiente de mi implementación? No sé mucho sobre el diseño de filtros, pero sí sé que es notoriamente contra-intuitivo. Aquí está el código MATLAB completo para reproducir todo esto. Estoy usando el comando filtfilt para eliminar los retrasos de fase. Pero otra cosa para señalar aquí es que los filtros no están normalizados. Cuando hago suma (Hd.Numerator), obtengo 0.9930 para el paso bajo y 0.007 para el paso alto. No veo cómo dar cuenta de esto. ¿Debería escalarse la salida de alguna manera porque los coeficientes no suman uno? ¿Podría esta escala tener algo que ver con esto?
close all
clear all
clc
data = dlmread('data.txt');
Fs = 0.25; % Sampling Frequency
N = 2674; % Order
Fpass = 0.8/1000; % Passband Frequency
Fstop = 1/1000; % Stopband Frequency
Wpass = 1; % Passband Weight
Wstop = 1; % Stopband Weight
dens = 20; % Density Factor
% Calculate the coefficients using the FIRPM function.
b = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datalowpassed = filtfilt(Hd.Numerator,1,data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Fs = 0.25; % Sampling Frequency
N = 2674; % Order
Fstop = 0.8/1000; % Stopband Frequency
Fpass = 1/1000; % Passband Frequency
Wstop = 1; % Stopband Weight
Wpass = 1; % Passband Weight
dens = 20; % Density Factor
% Calculate the coefficients using the FIRPM function.
b = firpm(N, [0 Fstop Fpass Fs/2]/(Fs/2), [0 0 1 1], [Wstop Wpass], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datahighpassed = filtfilt(Hd.Numerator,1,data);
figure
subplot(2,1,1)
plot(data,'-ko')
hold on
plot(datalowpassed,'-bo')
plot(data-datahighpassed,'-ro')
legend('Original Signal','Low-Passed','Signal - High-Passed')
subplot(2,1,2)
plot(data-datalowpassed,'-bo')
hold on
plot(datahighpassed,'-ro')
legend('Signal - Low-Passed','High-Passed')