क्या एक उच्च-पास सिग्नल सिग्नल माइनस के रूप में कम-पास सिग्नल के समान है?


14

मेरा प्रश्न यह है कि यदि मैं किसी सिग्नल को हाई-पास करना चाहता हूं, तो क्या यह सिग्नल को कम-पास करने और सिग्नल से घटाने के समान है? क्या यह सैद्धांतिक रूप से समान है? क्या यह व्यावहारिक रूप से समान है?

मैंने खोज की है (दोनों 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')

1
आपका फ़िल्टर ऑर्डर बेहद अधिक है। संभावना है कि आप डिजाइन प्रक्रिया के दौरान संख्यात्मक समस्याओं में भाग लेते हैं। FFT के परिमाण की गणना और साजिश रचकर डिज़ाइन किए गए फ़िल्टर की जाँच करें। इसके अलावा, निम्न-पास फिल्टर से एक उच्च-पास फ़िल्टर उत्पन्न करने के लिए घटाव का उपयोग करने के लिए नीचे मेरा जवाब देखें।
मैट एल।

आप इस तरह से एक हाईपास सिग्नल बना सकते हैं, लेकिन रोल-ऑफ का क्रम हमेशा पहला क्रम होता है: sound.westhost.com/articles/derived-xovers.htm यदि आप घटाना करने से पहले एलपीएफ के समूह देरी से सिग्नल में देरी करते हैं , आप 3 आदेश प्राप्त कर सकते हैं
एंडोलिथ

जवाबों:


8

सामान्य तौर पर आप किसी हाई-पास फ़िल्टर किए गए सिग्नल को प्राप्त करने के लिए मूल से सिग्नल के कम-पास फ़िल्टर किए गए संस्करण को घटा नहीं सकते हैं। कारण निम्नानुसार है। आप वास्तव में क्या कर रहे हैं आवृत्ति प्रतिक्रिया के साथ एक प्रणाली को लागू करना है

(1)एच(ω)=1-एचएलपी(ω)

एचएलपी(ω)एचएलपी(ω)

(2)|एच(ω)|=|1-|एचएलपी(ω)||

लेकिन यह आमतौर पर ऐसा नहीं है जब (1) संतुष्ट हो।

अब लिखें एचएलपी(ω)

एचएलपी(ω)=|एचएलपी(ω)|जेφ(ω)

φ(ω)

(3)एचएचपी(ω)=जेφ(ω)-एचएलपी(ω)=जेφ(ω)(1-|एचएलपी(ω)|)

तब यह नया फ़िल्टर वास्तव में परिमाण संबंध (2) को संतुष्ट करेगा। इसलिए यदि आप (3) के रूप में घटाव करते हैं, तो आप एक उच्च-पास फिल्टर को एक परिमाण प्रतिक्रिया के साथ महसूस कर सकते हैं जो कम पास फिल्टर की प्रतिक्रिया का पूरक है। इसका मतलब है कि आपको आवृत्ति प्रतिक्रिया के साथ एक ऑल-पास फिल्टर द्वारा सिग्नल को फ़िल्टर करने की आवश्यकता हैजेφ(ω) से संकेत के लो-पास फ़िल्टर किए गए संस्करण को घटाकर पहले।

व्यवहार में यह बहुत सरल है यदि कम-पास फिल्टर में एक रैखिक चरण प्रतिक्रिया होती है, क्योंकि तब चरण शब्द द्वारा दिया जाता है

(4)जेφ(ω)=-जेωτ

τnτ=n/2

तो आपको जो करना है वह निम्नलिखित है:

  • एक समान क्रम के साथ एक रैखिक चरण एफआईआर कम-पास फ़िल्टर डिज़ाइन करें
  • सिग्नल का उपयोग करके फ़िल्टर करें filter(); चलो परिणाम कॉल करेंएक्सएलपी[n]
  • τ=n/2एक्स[n]
  • एक्सएचपी[n]=एक्स[n]-एक्सएलपी[n]

यहाँ मतलाब / सप्तक में एक बहुत ही सरल चित्रण है

h_lp = fir1 (100, .3); % कम-पास डिजाइन
h_hp = [शून्य (50,1); 1; शून्य; (50,1)] - h_lp; घटाव द्वारा% उच्च-पास डिजाइन
[H_lp, w] = freqz (h_lp, 1,1024);
[H_hp, w] = freqz (h_hp, 1,1024);
साजिश (w / 2 / अनुकरणीय, 20 * log10 (पेट (H_lp)), डब्ल्यू / 2 / अनुकरणीय, 20 * log10 (पेट (H_hp)))
ग्रिड, अक्ष ([0, .5, -100,5])

यहाँ छवि विवरण दर्ज करें

संपादित करें:

चूंकि आपने filtfiltकमांड का उपयोग किया था, इसलिए चरण को कृत्रिम रूप से समाप्त कर दिया गया है, और ऊपर दिए गए समीकरण (1) और (2) बराबर हो गए हैं, क्योंकि सभी आवृत्ति प्रतिक्रियाएं वास्तव में डिज़ाइन की गई प्रतिक्रियाओं के वर्गीय परिमाण में हैं। इसलिए, फ़िल्टर डिज़ाइन प्रक्रिया, संख्यात्मक त्रुटियों और filtfiltफ़ंक्शन के कारण छोटे अंतर के कारण छोटे अंतरों के अलावा (स्वचालित रूप से आरंभिक और अंत ग्राहकों को कम करने वाली प्रारंभिक स्थितियां चुनी गई हैं), मूल डेटा से फ़िल्टर किए गए डेटा को घटाए जाने का परिणाम बारीकी से फ़िल्टरिंग को पुन: व्यवस्थित करना चाहिए। एक पूरक फिल्टर के साथ। चूंकि आपके उदाहरण में ऐसा नहीं है, इसलिए मुझे संदेह है कि फ़िल्टर डिज़ाइन दिनचर्या आपको अत्यधिक उच्च फ़िल्टर क्रम के कारण परेशानी देती है। यदि आप सरल फिल्टर के साथ भी ऐसा ही करते हैं (मैंने चुना हैn=100), आपको वह मिलता है जिसकी आप अपेक्षा करते हैं। नीचे दिए गए आंकड़े में आप नीले रंग में डेटा का एक भाग देखते हैं, हरे रंग में कम पास फिल्टर का उत्पादन, और लाल में मूल डेटा से उच्च पास फिल्टर के आउटपुट के घटाव का परिणाम है। हरे और लाल घटता लगभग समान हैं।

x = लोड ('data.txt'); % डेटा फ़िल्टर किया जाना है
h_lp = fir1 (100, .3); % एलपी आवेग प्रतिक्रिया
h_hp = fir1 (100, .3, 'उच्च'); % HP आवेग प्रतिक्रिया
y = filtfilt (h_lp, 1, x); % कम पास फ़िल्टर लागू करें
yh = filtfilt (h_hp, 1, x); % उच्च पास फ़िल्टर लागू करें
yd = x - yh; उच्च पास फिल्टर के साथ अंतर से% कम पास
n = 1: लंबाई (x);
साजिश (एन, एक्स, एन, वाई, 'जी।', एन, यार्ड, 'आर')
अक्ष ([3500,4000,140,150])

यहाँ छवि विवरण दर्ज करें


यदि आप इस तरह से एक उच्च पास फिल्टर डिजाइन करने की कोशिश कर रहे हैं, तो आपको कम-पास फिल्टर के विनिर्देशों के साथ सावधान रहना होगा। लो-पास फिल्टर में स्टॉप बैंड क्षीणन आमतौर पर उच्च पास में छोटे पास बैंड रिपल को प्राप्त करने के लिए पर्याप्त होता है, लेकिन एलपी फिल्टर में पास बैंड रिप्पल अक्सर एचपी फिल्टर में पर्याप्त स्टॉप बैंड क्षीणन प्राप्त नहीं करता है।
डेविड

विस्तृत प्रतिक्रिया के लिए धन्यवाद। इससे कुछ चीजें साफ हुईं।
फिक्स्ड प्वाइंट

3

स्केलिंग के बारे में:

10

मैट एल के उत्कृष्ट उत्तर के अलावा, कोई भी यह इंगित कर सकता है कि वह जो उपयोग कर रहा है उसे परिमाण पूरक फिल्टर के रूप में संदर्भित किया जाता है , जो कि रैखिक-चरण एफआईआर फिल्टर के लिए सामान्य मामला है, अर्थात,

|एचएलपी|+|एचएचपी|=1

दो समानांतर एलर्ज सेक्शन से फिल्टर बनाते समय और आउटपुट को जोड़ / घटाकर, लोपास / हाईपास फिल्टर बजाय पावर सप्लीमेंटरी , यानी

|एचएलपी|2+|एचएचपी|2=1

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.