2008-08-30 9 views
24

ग्राफिक्स और ऑडियो संपादन और प्रसंस्करण सॉफ्टवेयर में अक्सर "हाई-पास फ़िल्टर" और "लो-पास फ़िल्टर" नामक फ़ंक्शंस होते हैं। वास्तव में ये क्या करते हैं, और उन्हें लागू करने के लिए एल्गोरिदम क्या हैं?हाई-पास और लो-पास फ़िल्टर क्या हैं?

उत्तर

18

विकिपीडिया:

ये "उच्च", "कम", और "बैंड" मामले आवृत्तियों को देखें। उच्च-पास में, आप निम्न आवृत्तियों को हटाने का प्रयास करते हैं। कम-पास में, आप उच्च को हटाने का प्रयास करते हैं। बैंड पास में, आप केवल एक सतत आवृत्ति रेंज रहने की अनुमति देते हैं।

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

5

वे आम तौर पर विद्युत सर्किट होते हैं जो एनालॉग सिग्नल के हिस्सों को पार करते हैं। उच्च पास उच्च आवृत्ति भागों में से अधिक संचारित करता है और कम पास कम आवृत्ति भागों को पारित करता है।

उन्हें सॉफ़्टवेयर में अनुकरण किया जा सकता है। एक चलने वाला औसत उदाहरण के लिए कम पास फ़िल्टर के रूप में कार्य कर सकता है और चलने वाले औसत और उसके इनपुट के बीच का अंतर उच्च पास फ़िल्टर के रूप में काम कर सकता है।

5

उच्च पास फिल्टर उच्च आवृत्ति (विस्तृत/स्थानीय जानकारी) पास सुविधा देता है।
कम-पास फिल्टर कम आवृत्ति (मोटे/किसी न किसी तरह/वैश्विक सूचना) पास सुविधा देता है।

27

का तरीका यहां बताया घुमाव का उपयोग कर एक कम पास फिल्टर लागू है:

double[] signal = (some 1d signal); 
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter 
double[] result = new double[signal.Length + filter.Length + 1]; 

// Set result to zero: 
for (int i=0; i < result.Length; i++) result[i] = 0; 

// Do convolution: 
for (int i=0; i < signal.Length; i++) 
    for (int j=0; j < filter.Length; j++) 
    result[i+j] = result[i+j] + signal[i] * filter[j]; 

ध्यान दें कि उदाहरण के अत्यंत सरल है। यह रेंज चेक नहीं करता है और किनारों को ठीक से संभाल नहीं करता है। इस्तेमाल किया गया फ़िल्टर (बॉक्स-कार) एक विशेष रूप से खराब लोपास फ़िल्टर है, क्योंकि इससे कई कलाकृतियों (बजने) का कारण बनता है। फ़िल्टर डिजाइन पर पढ़ें।

आप आवृत्ति डोमेन में फ़िल्टर भी कार्यान्वित कर सकते हैं। यहाँ कैसे आप एक उच्च पास फिल्टर FFT का उपयोग कर लागू है:

double[] signal = (some 1d signal); 
// Do FFT: 
double[] real; 
double[] imag; 
[real, imag] = fft(signal) 

// Set the first quarter of the real part to zero to attenuate the low frequencies 
for (int i=0; i < real.Length/4; i++) 
    real[i] = 0; 

// Do inverse FFT: 
double[] highfrequencysignal = inversefft(real, imag); 

फिर, यह सरल है, लेकिन आप विचार मिलता है। कोड गणित के रूप में जटिल नहीं दिखता है।

+2

कोड नमूने के लिए बहुत अच्छा है। दूसरे मामले में एक मामले और एफएफटी में क्यों विश्वास? – dfrankow

+2

@dfrankow कोई विशेष कारण नहीं है। यह दिखाने के लिए कि यह विभिन्न डोमेन में कैसा दिखता है। इसे प्रतिबिंबित करने के लिए पाठ को अपडेट किया गया। धन्यवाद। – Hallgrim

+0

क्या आप सुनिश्चित हैं कि आपके उत्तर का पहला भाग सही है, जहां आप एक आयत समारोह का उपयोग कर समय डोमेन में रूपांतरण लागू करते हैं? मैंने सोचा था कि समय डोमेन में एक कम-पास फ़िल्टर को sinc फ़ंक्शन के रूपांतरण की आवश्यकता होती है? – stackoverflowuser2010

5

फ़िल्टरिंग डेटा को प्रोसेस करने के कार्य का वर्णन इस तरीके से करता है जो डेटा के भीतर विभिन्न आवृत्तियों के क्षीणन के विभिन्न स्तरों को लागू करता है।

एक उच्च पास फ़िल्टर उच्च आवृत्तियों के लिए न्यूनतम वांछित (यानी छोड़ने के स्तर अपरिवर्तित) लागू करेगा, लेकिन कम आवृत्तियों के लिए अधिकतम क्षीणन लागू होता है।

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

उपयोग किए जाने वाले कई अलग-अलग फ़िल्टरिंग एल्गोरिदम हैं। दो सबसे सरल संभवतः परिमित इंपल्स प्रतिक्रिया फ़िल्टर (उर्फ एफआईआर फ़िल्टर) और अनंत इंपल्स प्रतिक्रिया फ़िल्टर (उर्फ आईआईआर फ़िल्टर) हैं।

एफआईआर फ़िल्टर नमूनों की एक श्रृंखला को रखकर और उनमें से प्रत्येक नमूने को एक निश्चित गुणांक (जो श्रृंखला में स्थिति पर आधारित है) द्वारा गुणा करके काम करता है। इनमें से प्रत्येक गुणा के परिणाम जमा किए गए हैं और उस नमूने के लिए आउटपुट है। इसे मल्टीप्ली-संचय के रूप में जाना जाता है - और समर्पित डीएसपी हार्डवेयर में बस ऐसा करने के लिए एक विशिष्ट मैक निर्देश है।

जब अगला नमूना लिया जाता है तो इसे श्रृंखला की शुरुआत में जोड़ा जाता है, और श्रृंखला में सबसे पुराना नमूना हटा दिया जाता है, और प्रक्रिया दोहराई जाती है।

फिल्टर गुणांक फ़िल्टर चयनकर्ताओं के चयन द्वारा तय किया जाता है।

छवि प्रोसेसिंग सॉफ़्टवेयर द्वारा अक्सर प्रदान किए जाने वाले सबसे सरल फ़िल्टरों में से एक औसत फ़िल्टर है। यह सभी फ़िल्टर गुणांक को एक ही मूल्य पर सेट करके एफआईआर फ़िल्टर द्वारा कार्यान्वित किया जा सकता है।

5

यहाँ सी में एक कम पास फिल्टर ++ कि एक समय में संकेत एक नमूना प्रक्रियाओं का एक सुपर सरल उदाहरण है:

float lopass(float input, float cutoff) { 
lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0])); 
outputs[0]= lo_pass_output; 
return(lo_pass_output); 
} 

यहाँ है काफी एक ही बात है, सिवाय इसके कि यह उच्च मार्ग है:

float hipass(float input, float cutoff) { 
hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0])); 
outputs[0]=hi_pass_output; 
return(hi_pass_output); 
} 
+4

मैं कोशिश कर रहा हूं कि आप कोड हैं, लेकिन मुझे समझ में नहीं आता कि "कटऑफ" क्या प्रतीक है। यह हर्टज़ में कटऑफ आवृत्ति नहीं है? –

+1

उत्तर लगभग एक दशक पुराना है, हालांकि मुझे अभी भी विश्वास है कि यह "आउटपुट [0]" नहीं है जिसे गणना में लिया जाना चाहिए, लेकिन पिछले फ़िल्टर किए गए नमूना मूल्य। – Mike

+0

संबंधित: https://dsp.stackexchange.com/questions/39063/simple-software-low-pass-filter –

संबंधित मुद्दे