मेरा प्रश्न यह है कि यदि मैं किसी सिग्नल को हाई-पास करना चाहता हूं, तो क्या यह सिग्नल को कम-पास करने और सिग्नल से घटाने के समान है? क्या यह सैद्धांतिक रूप से समान है? क्या यह व्यावहारिक रूप से समान है?
मैंने खोज की है (दोनों Google और dsp.stackexchange पर) और मुझे परस्पर विरोधी उत्तर मिले हैं। मैं एक संकेत के साथ खेल रहा हूं और यहां परिणाम हैं। मैं इसका बहुत अर्थ नहीं निकाल सकता।यहां हर चार सेकंड में एक बार सैंपलिंग फ्रीक्वेंसी के साथ सिग्नल दिया जाता है। मैंने 0.8 mHz से 1 mHz तक ट्रांज़िशन बैंड के साथ एक डिजिटल कम-पास फ़िल्टर डिज़ाइन किया और सिग्नल को फ़िल्टर किया। मैंने तब उसी संक्रमण बैंड के साथ एक उच्च-पास फ़िल्टर भी डिज़ाइन किया और सिग्नल को फ़िल्टर किया। यहाँ परिणाम हैं।
यह पहली तस्वीर काले रंग में मूल संकेत और नीले रंग में कम-पास संकेत दिखाती है। वे लगभग एक दूसरे के शीर्ष पर हैं लेकिन काफी नहीं हैं। लाल वक्र उच्च-पास संकेत है जो सिग्नल के शीर्ष पर सही है।
यह दूसरी छवि है कि क्या हो रहा है यह दिखाने के लिए बस पहले एक ज़ूम किया गया। यहाँ हम देखते हैं कि स्पष्ट रूप से दोनों समान नहीं हैं। मेरा सवाल यह है कि क्यों? क्या यह इस बारे में कुछ है कि मैंने दो फ़िल्टर कैसे लागू किए हैं या क्या यह मेरे कार्यान्वयन से सैद्धांतिक रूप से स्वतंत्र है? मैं फिल्टर डिजाइनिंग के बारे में बहुत कुछ नहीं जानता, लेकिन मुझे पता है कि यह कुख्यात काउंटर-सहज ज्ञान युक्त है। इस सब को पुन: पेश करने के लिए यहां पूर्ण 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')