2011-03-24 4 views
26

मैं कुछ कोड के साथ काम कर रहा हूं जो एक फूरियर ट्रांसफॉर्म करता है (ऑडियो नमूना के cepstrum की गणना करने के लिए)। फूरियर ट्रांसफॉर्म की गणना करने से पहले, यह नमूना में एक हैमिंग विंडो लागू करता है:हैमिंग विंडो के लिए क्या है?

for(int i = 0; i < SEGMENTATION_LENGTH;i++){ 
    timeDomain[i] = (float) ((0.53836 - (0.46164 * Math.cos(TWOPI * (double)i/(double)(SEGMENTATION_LENGTH - 1)))) * frameBuffer[i]); 
} 

ऐसा क्यों कर रहा है? मुझे कोड, या ऑनलाइन में ऐसा करने का कोई कारण नहीं मिल रहा है।

+1

बस एक साइड नोट के रूप में: हैमिंग विंडो के इस संस्करण में मूल हैमिंग विंडो की तुलना में थोड़ा सा बेहतर सिडलोब दमन है जो इसके गुणांक 0.54 और 0.46 द्वारा परिभाषित किया गया है (देखें [विकिपीडिया] (http://en.wikipedia.org/wiki/Window_function))। –

उत्तर

33

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

डेटा को घुमाने से यह सुनिश्चित होता है कि सब कुछ उचित रूप से चिकनी रखते हुए समाप्त होता है; यह पिछले अनुच्छेद में वर्णित "वर्णक्रमीय रिसाव" के प्रकार को बहुत कम करता है।

+11

यह सवाल का उत्तर नहीं है, क्योंकि हैमिंग विंडो, विशेष रूप से, सिरों को बिल्कुल मेल नहीं खाती है (यह केवल समाप्त होता है 92% करीब आता है)। अन्य विंडो, मूल प्रश्न में उल्लेखित नहीं है, करते हैं। लेकिन नहीं -1 क्योंकि यह एक बहुत ही आम व्याख्या है। – hotpaw2

11

मुझे ध्वनि और त्वरित शोध के बारे में क्या पता है, ऐसा लगता है कि हैमिंग विंडो सिग्नल साइड लोब (अवांछित विकिरण) को कम करने के लिए यहां है। इस प्रकार ध्वनि की गुणवत्ता या हार्मोनिक्स में सुधार। मैं यह भी समझता हूं कि window function डीटीएफटी के साथ अच्छा फिट बैठता है।

यदि आप गणित के लिए तैयार हैं तो stanford researcher page या wikipedia पर और Harris के पेपर में आपको कुछ अच्छी तकनीकी स्पष्टीकरण मिलेगा: डी।

+1

अधिक सही, चूंकि हैमिंग विंडो पहले (सबसे आसन्न और सबसे बड़े) साइड लोब को कम करती है, और कुछ अन्य विंडोज़, कुछ अन्य व्यापार-बंद के बदले में। – hotpaw2

8

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

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

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

30

यह एक पुराना सवाल है, लेकिन मैंने सोचा कि उत्तर में सुधार किया जा सकता है।

कल्पना करें कि आप चारों ओर परिवर्तन करना चाहते हैं सिग्नल एक शुद्ध साइन लहर है। आवृत्ति डोमेन में, आप उम्मीद करेंगे कि यह केवल साइन की आवृत्ति पर तेज स्पाइक होगा।

Sinc function

कि क्यों है: आप फूरियर परिणत लिया लेकिन अगर, अपने अच्छे तेज कील कुछ इस तरह से बदल दिया जाएगा? वास्तविक साइन लहरें दोनों दिशाओं में अनंत तक बढ़ती हैं। कंप्यूटर डेटा अंकों की असीमित संख्या के साथ गणना नहीं कर सकते हैं, इसलिए सभी संकेत किसी भी अंत में "कट ऑफ" होते हैं। यह चोटी के दोनों तरफ लहर को देखता है जो आप देखते हैं। हैमिंग विंडो इस लहर को कम करती है, जिससे आपको मूल सिग्नल की फ्रीक्वेंसी स्पेक्ट्रम का अधिक सटीक विचार मिलता है।

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

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