Мой вопрос: если я хочу передать верхний сигнал, это то же самое, что и сигнал низкого уровня и вычесть его из сигнала? Это теоретически то же самое? Это практически то же самое?
Я выполнил поиск (как в Google, так и в dsp.stackexchange) и нашел противоречивые ответы. Я играл с сигналом и вот результаты. Я не могу понять это. Вот сигнал с частотой дискретизации раз в четыре секунды. Я разработал цифровой фильтр нижних частот с полосой перехода от 0,8 мГц до 1 мГц и отфильтровал сигнал. Затем я также разработал фильтр верхних частот с той же полосой перехода и отфильтровал сигнал. Вот результаты.
Это первое изображение показывает исходный сигнал в черном и низкочастотный сигнал в синем. Они почти друг на друга, но не совсем. Красная кривая - это сигнал минус сигнал высокого уровня, который находится прямо над сигналом.
Это второе изображение - только первое, увеличенное, чтобы показать, что происходит. Здесь мы видим, что ясно, что два не одно и то же. У меня вопрос почему? Это что-то о том, как я реализовал два фильтра, или это что-то теоретически независимое от моей реализации? Я не знаю много о проектировании фильтров, но я знаю, что это заведомо нелогично. Вот полный код MATLAB, чтобы воспроизвести все это. Я использую команду FilterFilt для устранения фазовых задержек. Но здесь нужно отметить еще одну вещь: фильтры не нормализованы. Когда я делаю сумму (Hd.Numerator), я получаю 0,9930 для низких частот и 0,007 для высоких частот. Я не понимаю, как объяснить это. Следует ли каким-либо образом масштабировать выходные данные, потому что коэффициенты не складываются в единицу? Может ли это масштабирование иметь какое-то отношение к этому?
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')