Benim sorum şudur: Eğer bir sinyalin yüksek-geçişini yapmak istersem, bir sinyalin düşük-geçişi ve sinyalden çıkarılması ile aynı mıdır? Teorik olarak aynı mı? Pratik olarak aynı mı?
(Hem google hem de dsp.stackexchange'te) arama yaptım ve çelişkili cevaplar buluyorum. Bir sinyal ile oynuyorum ve işte sonuçlar. Çok anlam ifade edemiyorum. İşte her dört saniyede bir kez örnekleme frekansı ile sinyaldir. 0.8 mHz'den 1 mHz'ye geçiş geçiş bandına sahip bir dijital düşük geçiş filtresi tasarladım ve sinyali filtreledim. Daha sonra aynı geçiş bandına sahip bir yüksek geçirgen filtre tasarladım ve sinyali filtreledim. Sonuçlar burada.
Bu ilk resim orijinal sinyali siyah, alçak geçirilen sinyali mavi gösterir. Neredeyse üst üste geliyorlar ama tam olarak değiller. Kırmızı eğri, sinyal eksi sinyalin hemen üstünde bulunan yüksek geçirilmiş sinyaldir.
Bu ikinci görüntü, neler olduğunu gösteren ilk yakınlaştırılmış görüntüdür. Burada açıkça görüyoruz ki ikisi aynı değil. Sorum neden? İki filtreyi nasıl uyguladığımla ilgili bir şey mi yoksa uygulamamdan bağımsız olarak teorik bir şey mi? Filtre tasarımı hakkında çok şey bilmiyorum ama bunun tersine sezgisel olduğunu biliyorum. Tüm bunları çoğaltmak için tam MATLAB kodu. Faz gecikmelerini ortadan kaldırmak için filtfilt komutunu kullanıyorum. Ancak burada belirtilmesi gereken başka bir şey, filtrelerin normalleştirilmemesidir. Toplamı yaptığımda (Hd.Numerator), düşük geçiş için 0.9930 ve yüksek geçiş için 0.007 alıyorum. Bunu nasıl açıklayacağımı göremiyorum. Katsayılar en fazla bir tane eklemediğinden çıktı bir şekilde ölçeklendirilmeli mi? Bu ölçeklemenin bununla bir ilgisi olabilir mi?
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')