STFT और DWT (वेवलेट्स)


12

एसटीएफटी का इस्तेमाल कुछ फ्रीक्वेंसी-डोमेन संशोधनों (उदाहरण: शोर हटाने) के लिए ध्वनि डेटा (उदाहरण के लिए .wav साउंडफाइल के साथ) पर सफलतापूर्वक किया जा सकता है।
साथ N=441000(यानी नमूना दर पर 10 सेकंड fs=44100), windowsize=4096, overlap=4, STFT approximatively एक का उत्पादन 430x4096सरणी (पहले समन्वय: समय सीमा, दूसरा समन्वय: आवृत्ति बिन)। इस सरणी पर संशोधन किए जा सकते हैं, और ओवरलैप-ऐड (*) के साथ पुनर्निर्माण किया जा सकता है ।

तरंगों के साथ एक समान कार्य करना कैसे संभव है ? (डीडब्ल्यूटी), अर्थात समय के फ्रेम के a x bसाथ एक समान सरणी मिलती है a, और bआवृत्ति डिब्बे, इस सरणी पर कुछ संशोधन करते हैं, और अंत में, एक सिग्नल पुनर्प्राप्त करते हैं? कैसे ? ओवरलैप-एड के बराबर तरंगिका क्या है ? यहाँ शामिल पायथन फ़ंक्शंस क्या होंगे (मुझे ऑडियो संशोधन का आसान उदाहरण नहीं मिला है pyWavelets...)?

(*): यहाँ STFT फ्रेमवर्क है जिसका उपयोग किया जा सकता है:

signal = stft.Stft(x, 4096, 4)    # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)

for i in xrange(signal.shape[0]):    # Process each STFT frame
    modified_signal[i, :] =  signal[i, :] * .....  # here do something in order to
                                                   # modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4)   # y is the output

लक्ष्य तरंगों के साथ एक समान रूपरेखा खोजना है।


एक पक्ष टिप्पणी: एसटीएफटी पर "छानने" का ऐसा करना वास्तव में एक बुरा विचार है। यह ज्यादातर चीजें करने का एक शानदार तरीका नहीं है जो आप वास्तव में करना चाहते हैं। आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं?
पीटर के.एच.

ध्यान दें कि PyWavelets केवल असतत तरंग परिवर्तन के लिए है। यदि आप एसटीएफटी जैसा सामान करना चाहते हैं, तो आप निरंतर तरंग परिवर्तन को आसानी से समझ पाएंगे, जैसे कि निरंतर क्यू परिवर्तन, जो कि गैबर परिवर्तन है, अनिवार्य रूप से जटिल मोलेट निरंतर तरंग परिवर्तन के रूप में एक ही चीज है , लेकिन इसे बनाया गया है इन्वर्टिबल
एंडोलिथ

1
(यह प्रश्न "समुदाय" द्वारा पुनर्जीवित किया गया है।) मेरी राय में, तरंगें ओवरलैप करती हैं और एसटीएफटी से बहुत मिलती-जुलती हैं। इसलिए मुझे सवाल की प्रकृति नहीं आती।
रॉबर्ट ब्रिस्टो-जॉनसन

क्या अधिक विवरण की आवश्यकता है?
लॉरेंट

जवाबों:


4

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

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

मानक असतत वेवलेट ट्रांसफ़ॉर्म फिल्टर बैंक भी हैं, इस अंतर के साथ कि प्रत्येक आवृत्ति बैंड (या अधिक सही तरीके से) में सबसम्पलिंग समान नहीं है। यह प्रत्येक तराजू के लिए असमान लंबाई में बदल जाता है। फिर भी, निरर्थक तरंगिका कार्यान्वयन मौजूद हैं जो आपके साथ काम करने वाले गुणांकों के "आयताकार सरणी" का उत्पादन करते हैं। सबसे अच्छी ज्ञात योजनाओं को अलग-अलग नामों से पुकारा जाता है: शिफ्ट-इनवेरिएंट या टाइम-इनवेरिएंट वेवलेट्स, अनसिक्योर्ड वेवलेट्स, स्टेशनरी वेवलेट ट्रांसफ़ॉर्म(SWT), और कभी-कभी चक्र-कताई। इसके मानक पुनर्निर्माण में ओवरलैप-ऐड के समान चरण शामिल हैं, सिवाय इसके कि वे तराजू पर अलग-अलग नमूनाकरण कारकों के कारण अधिक "एम्बेडेड" हैं। आप उन्हें लाइब्रेरी से किसी भी असतत तरंग के साथ, या यहां तक ​​कि अपने स्वयं के तरंगिका को डिजाइन करके उपयोग कर सकते हैं। कारण यह है कि मानक असतत तरंगों को गैर-अतिरेक के साथ डिजाइन किया गया था, जो तरंगों की पसंद को प्रतिबंधित करता है। अतिरेक के साथ, आप तरंगिका पसंद बढ़ जाती है, क्योंकि कमी को पूरा करने के लिए कम कठोर हैं। "परम" अवतार निरंतर तरंगिका परिवर्तन है, जो हर उलटा संश्लेषण तरंग को "लगभग" स्वीकार करता है। मेरा अंतिम वाक्य काफी घटिया है, मुझे आशा है कि आपको इसका अर्थ मिलेगा: जब एक वर्ग मैट्रिक्स उल्टा होता है, तो इसका केवल एक ही उलटा होता है। जब एक "आयताकार" मैट्रिक्स सामान्यीकृत तरीके से छोड़ दिया जाता है,

ऐसा लगता है कि स्टेशनरी वेवलेट ट्रांसफॉर्म का एक अजगर कार्यान्वयन है । आप 2.3.4 में कुछ संदर्भ पा सकते हैं लिंक किए गए पेपर के ट्रांसलेट इंवेरिएंट वेवलेट्स चैप्टर

यह आम तौर पर व्यावहारिक अनुप्रयोगों (भूभौतिकी, गैर-विनाशकारी परीक्षण, अल्ट्रासाउंड, कंपन) में पता लगाने, निंदा या बहाली के लिए बहुत अधिक मजबूत है।


"निरर्थक" का अर्थ "आउटपुट में अधिक जानकारी है इनपुट को पुन: पेश करने के लिए आवश्यक है"?
एंडोलिथ

1
NM>N

3

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

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

विंडो के आकार, ओवरलैप, सैंपलिंग रेट के रूप में आपने जो पैरामीटर दिए हैं वे सभी वेवलेट ट्रांसफॉर्म पर लागू नहीं हैं। केवल एक चीज जो आपको चाहिए वह एक माँ तरंग है। यदि आप परिणामों को अपने एसटीएफटी आउटपुट से तुलना करना चाहते हैं तो आप किसी भी एसटीएफटी बेस वैक्टर (यानी आपकी विंडो को एक जटिल घातीय वाहक द्वारा गुणा किया जा सकता है) को तरंगिका प्रोटोटाइप के रूप में चुन सकते हैं। फिर आप तेज़ तरंग परिवर्तन को लागू करते हैं, जो आपके सिग्नल को उच्च और निम्न दर्रा फ़िल्टर्ड और डिकिमेटेड सिग्नल के पेड़ में विघटित करेगा जो अंततः आपके गुणांक बन जाते हैं। प्रत्येक गुणांक एक तरंगिका आधार वेक्टर और इसके मापदंडों (पैमाने, समय) या (वेक्नेसी, समय) के साथ जुड़ा हुआ है। आप गुणांक में हेरफेर कर सकते हैं और फिर उलटा असतत तरंग परिवर्तन को लागू कर सकते हैं। यह आपके गुणांक को ले जाएगा और उन्हें फिर से एक संकेत का उत्पादन करने के लिए एक पुनर्जन्म फिल्टर बैंक के माध्यम से चलाएगा।

ये प्रक्रियाएं एक शुरुआत के लिए तुच्छ और संभवतः पचाने में कठिन नहीं हैं। लेकिन आपको अपनी पसंद के प्लेटफ़ॉर्म के लिए पुस्तकालयों / टूलबॉक्स को खोजने में सक्षम होना चाहिए जो तेजी से तरंग परिवर्तन और इसके व्युत्क्रम को लागू करते हैं। हालाँकि, यदि आप अपने स्वयं के तरंगिका आधार का एहसास करना चाहते हैं, तो आपको अपघटन और संश्लेषण फ़िल्टर बैंकों के लिए फ़िल्टर गुणांक प्राप्त करना होगा। इसके लिए कुछ गहरे सिद्धांत की आवश्यकता होती है, और आपको संभवतः पहले इसका अध्ययन करना होगा।

वेवलेट ट्रांसफ़ॉर्म के अन्य फ्लेवर हैं, अर्थात् निरंतर वेवलेट ट्रांसफ़ॉर्म जो एक अधूरे आधार के साथ काम करता है। यह गणना करने के लिए बहुत धीमा है और इनवर्टर के लिए बहुत कठिन है, ताकि यह वर्तमान में आप क्या करना चाहते हैं के लिए एक विकल्प नहीं है।


1
आपके उत्तर के लिए धन्यवाद। मुख्य कारण जिसके लिए मैं एक कोड फ्रेमवर्क बनाने की कोशिश कर रहा हूं, वह यह है कि मैंने हमेशा अपने बचपन से (कुछ साल पहले तक देखा है जब मैंने अपनी पीएचडी (डीएसपी से संबंधित नहीं) को समाप्त कर दिया, यदि ऐसा नहीं होता, तो मैं नहीं पूछता इतना नौसिखिया-प्रश्न यहाँ!) यह है कि कुछ वास्तविक जीवन सामग्री (उदाहरण के लिए डीएसपी में ऑडियो सिग्नल ) में हेरफेर करने से गहरे सिद्धांत को समझने में बहुत मदद मिलती है। क्या मैं कोड चाहते हैं: Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio output। बहुत से (सरणी पर कुछ करें) के साथ, मुझे यकीन है कि मैं थोड़ा और समझूंगा कि वेवलेट कैसे काम करता है।
बसज

1
@ बस्ज, फिर जैसा मैंने कहा वैसा करो। एक पायथन लाइब्रेरी का पता लगाएं जो तेज तरंग परिवर्तन और इसके व्युत्क्रम दोनों का समर्थन करती है और फिर उत्पन्न गुणांक वृक्ष के साथ खेलती है। गुड लक और मजा करें!
जैजमानियाक

"वे सभी तरंग परिवर्तन पर लागू नहीं होते हैं" वे सीडब्ल्यूटी पर लागू होते हैं, है ना?
एंडोलिथ

1

तरंगिका आधार को परिभाषित करने के कई तरीके हैं। आमतौर पर एक वेवलेट कुछ इस तरह दिखता है:

wx0,k0(x)=Aexp(ik0x)e(k0(xx0))

x0k0eAk

(x0,k0)(x0,k0)

क्योंकि रूपांतरित डेटा की गतिशीलता सिग्नल से अधिक है, इसलिए वेवलेट आधार ऑर्थोनॉमिक नहीं होगा। यानी निम्नलिखित गलत होंगे:

wk0,x0|wk0,x0=δ(x0,x0)δ(k0,k0)

Aw

x0,k0|wx0,k01k0wx0,k0|=identity

दूसरे शब्दों में, आप केवल इसके घटक तरंगों को जोड़कर सिग्नल को पूरी तरह से फिर से संगठित कर सकते हैं।

आपका "संशोधन" बस उपरोक्त राशि में डाला जा सकता है:

my_filter=x0,k0|wx0,k0f(x0,k0)wx0,k0|

अद्यतन 2013-11-19: अनुरोध के अनुसार नीचे कार्यान्वयन विवरण जोड़ना।

f(x)

cx0,k0=wx0,k0|f

k0cx0,k0x0ffw0,k0cx0,k0

  • ff^
  • k01/4
    • f^w^0,k0
    • [kl,kr)w^0,k0
    • एक उलटा फूरियर परिवर्तन उस पर लागू करें।
    • द्वारा गुणा करेंexp(ixkl+kr2)cx0,k0x0

k0x0w0,k0k0k0

cx0,k0k0

ट्रंकिंग स्पेक्ट्रा कभी-कभी सामान्यीकरण की समस्याओं का परिचय देता है, ठीक इसी पर निर्भर करता है कि आपका एफएफटी कैसे परिभाषित किया गया है। मैं यहां सभी संभावनाओं को कवर करने का प्रयास नहीं करूंगा। सामान्यीकरण मूल रूप से एक आसान समस्या है। ;-)

w^x0,k0(k)wx0,k0(x)

w^x0,k0=Aexp(i(kk0)x0)exp((Qlog(k/k0))2)

QAk0


1
तरंग सिद्धांत के बारे में इन महत्वपूर्ण बिंदुओं को याद करने के लिए धन्यवाद, जो वास्तव में यह समझने के लिए आवश्यक है कि यह कैसे काम करता है। लेकिन यहां प्रश्न एक फ्रेमवर्क कोड बनाने के बारे में अधिक होगा जो उदाहरण के लिए ऑडियो सिग्नल पर काम करेगा। प्रश्न हैं: इन अनंत राशियों से कैसे निपटा जाए, कैसे खिड़कियों (या माँ- वेवलेट) का चयन किया जाए , कैसे इसे पायथन में पायवेवलेट्स (या किसी अन्य समतुल्य भाषा का उपयोग करके, मैं तब पायथन में अनुवाद करूँगा) का उपयोग कैसे करूँ मापदंडों का चयन करें (जैसे ऑडियो के लिए मेरे उदाहरण में: नमूना दर = 44100, fft विंडो = 4096, ओवरलैप = 4, आदि)
बसज

akk|kakk|=Id

K

akakf

1
यह देखने का सबसे अच्छा तरीका है कि यह काम करता है या नहीं, यह एक न्यूनतम कोड उदाहरण प्रदान करना होगा (उदाहरण के लिए pyWavelet के साथ यह संभव है कि मुझे लगता है कि कुछ लाइनों में संभव होना चाहिए) (मैं इसे समझने के बाद एक बार इसे अच्छी तरह से करूँगा, मुझे लगता है कि मुझे लगता है) तरंगों के बारे में पढ़ने के लिए कुछ और दिनों की आवश्यकता है!)
बस्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.