Pertanyaan saya adalah, jika saya ingin sinyal high-pass, apakah sama dengan sinyal low-passing dan mengurangkannya dari sinyal? Apakah secara teori sama? Apakah ini praktis sama?
Saya telah mencari (baik di google dan dsp.stackexchange) dan saya menemukan jawaban yang bertentangan. Saya telah bermain dengan sinyal dan inilah hasilnya. Saya tidak bisa memahaminya. Ini adalah sinyal dengan frekuensi pengambilan sampel setiap empat detik sekali. Saya merancang filter low-pass digital dengan pita transisi dari 0,8 mHz ke 1 mHz dan memfilter sinyal. Saya kemudian merancang filter high-pass dengan pita transisi yang sama dan memfilter sinyal. Inilah hasilnya.
Gambar pertama ini menunjukkan sinyal asli berwarna hitam dan sinyal low-pass berwarna biru. Mereka hampir di atas satu sama lain tetapi tidak cukup. Kurva merah adalah sinyal minus sinyal lewat tinggi yang tepat di atas sinyal.
Gambar kedua ini adalah yang pertama diperbesar untuk menunjukkan apa yang terjadi. Di sini kita melihat bahwa keduanya jelas tidak sama. Pertanyaan saya adalah mengapa? Apakah ini tentang bagaimana saya menerapkan kedua filter atau apakah itu sesuatu yang secara teoritis terlepas dari implementasi saya? Saya tidak tahu banyak tentang mendesain filter tetapi saya tahu itu terkenal kontra-intuitif. Ini adalah kode MATLAB lengkap untuk mereproduksi semua ini. Saya menggunakan perintah filtfilt untuk menghilangkan penundaan fase. Tetapi satu hal lagi yang perlu ditunjukkan di sini adalah bahwa filter tidak dinormalisasi. Ketika saya melakukan penjumlahan (Hd.Numerator), saya mendapatkan 0,9930 untuk low-pass dan 0,007 untuk high-pass. Saya tidak melihat bagaimana menjelaskan ini. Haruskah output diskalakan karena koefisien tidak bertambah satu? Bisakah penskalaan ini ada hubungannya dengan ini?
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')