Моє запитання полягає в тому, якщо я хочу високошвидкісний сигнал, чи він такий же, як низькопрохідний сигнал і віднімання його від сигналу? Це теоретично те саме? Це практично те саме?
Я шукав (і в Google, і в dsp.stackexchange) і знаходжу суперечливі відповіді. Я грав зі сигналом і ось результати. Я не можу багато чого в цьому зрозуміти. Ось сигнал із частотою вибірки один раз на чотири секунди. Я розробив цифровий фільтр низьких частот з діапазоном переходу від 0,8 мГц до 1 мГц і фільтрував сигнал. Потім я також сконструював високочастотний фільтр з тією ж перехідною смугою і відфільтрував сигнал. Ось результати.
На цьому першому малюнку зображено вихідний сигнал чорного кольору та низькопрохідний сигнал синього кольору. Вони майже один на одного, але не зовсім. Червона крива - це сигнал мінус високочастотний сигнал, який знаходиться вгорі сигналу.
Це друге зображення - це лише перше збільшення, яке показує, що відбувається. Тут ми бачимо, що однозначно два не однакові. Моє питання чому? Це щось про те, як я реалізував два фільтри, чи це щось теоретично незалежне від моєї реалізації? Я не знаю багато про розробку фільтрів, але я знаю, що це, як відомо, не інтуїтивно зрозуміло. Ось повний код MATLAB для відтворення всього цього. Я використовую команду filtfilt для усунення затримок фаз. Але тут слід зазначити ще одне, що фільтри не нормалізуються. Коли я отримую суму (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')