तात्कालिक आवृत्ति की गणना और व्याख्या करें


9

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

तो मैं तात्कालिक आवृत्ति में रुचि रखता हूं f(t) एक वास्तविक मूल्य का संकेत है x(t)। गणना एक विश्लेषणात्मक संकेत की मदद से की जाती हैz(t)=x(t)+jy(t), कहाँ पे y(t) का हिल्बर्ट परिवर्तन है x(t)

विश्लेषणात्मक संकेत से तात्कालिक आवृत्तियों की गणना करने के लिए z(t) मैंने कागज का अनुसरण किया:

1992 से आर्थर ई। बार्न्स द्वारा तात्कालिक आवृत्ति और तात्कालिक बैंडविड्थ की गणना । इस पत्र में उन्होंने तात्कालिक आवृत्ति की गणना करने के लिए कई तरीकों का परिचय दिया। मैं लिखता हूं, सभी सूत्र उन्होंने (और मैंने इस्तेमाल किया) एक पल में प्रस्तावित किया।

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

Fs = 1000;                                            % sampling-rate = 1kHz
t = 0:1/Fs:10-1/Fs;                                    % 10s 'Timevector'
chirp_signal = chirp(t,0,1,2);                         % 10s long chirp-signal, signal 1
added_sinusoid = chirp_signal + sin(2*pi*t*10);        % chirp + sin(10Hz), signal 2
modulated_sinusoid = chirp_signal .* sin(2*pi*t*10);   % chirp * sin(10Hz), signal 3

उन तीन संकेतों के समय डोमेन में प्लॉट निम्नलिखित दिखते हैं: समय डोमेन भूखंड

कागज से सभी विधियों को लागू करने के बाद मुझे प्राप्त सभी तात्कालिक आवृत्तियों के भूखंड निम्नलिखित हैं:

शुद्ध चिरप संकेत की शुद्ध चिर संकेत के तात्कालिक आवृत्तियों तात्कालिक आवृत्तियाँ : अतिरिक्त साइनसॉइड के साथ चिरप संकेत की जोड़ा साइनसॉइड के साथ चिर सिग्नल के तात्कालिक आवृत्तियों तात्कालिक आवृत्तियाँ : संशोधित चिरप संकेत की तात्कालिक आवृत्तियाँ:संग्राहक चिर सिग्नल के तात्कालिक आवृत्तियों कृपया ध्यान दें, कि तीनों छवियों में, प्लॉट 3 और 4 की y- अक्ष को ज़ूम इन किया गया है, इसलिए उन का आयाम संकेत बहुत छोटे हैं!

तात्कालिक आवृत्ति के लिए विश्लेषणात्मक संकेत से प्राप्त होने की पहली संभावना है:

f2(t)=12πddtθ(t)
कहाँ पे θ(t)तात्कालिक चरण है। मुझे लगता है कि यह आज सबसे आम तरीका है, कम से कम MATLAB के वेबपेज पर इस तरह से गणना की जाती है। कोड निम्न दिखता है:

function [instantaneous_frequency] = f2(analytic_signal,Fs)
    factor =  Fs/(2*pi);
    instantaneous_frequency = factor * diff(unwrap(angle(analytic_signal)));
    % Insert leading 0 in return-vector to maintain size
    instantaneous_frequency = [0 instantaneous_frequency];
end

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

अपने कागज में, सूत्र में लेबल नंबर (2) है, इसलिए, मैंने f (t) सूचकांक 2 दिया। अन्य सभी सूचकांक कागज में उनकी संख्या के समान तरीके से मेल खाते हैं।

चरण में अस्पष्टता के कारण, वह सुझाव देता है:

f3(t)=12πx(t)y(t)ax(t)y(t)bx(t)2c+y(t)2d
मैंने प्रोग्रामिंग को थोड़ा आसान बनाने के लिए प्रतीकों "ए", "बी", "सी" और "डी" को पेश किया:

function [instantaneous_frequency] = f3(analytic_signal,Fs,T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    diff_x = diff(x);
    diff_y = diff(y);
    factor = Fs/(2*pi);
    a = x(2:end).*diff_y;
    b = y(2:end).*diff_x;
    c = x(2:end).^2;
    d = y(2:end).^2;
    instantaneous_frequency = factor * ((a-b)./(c+d));
    % Insert leading 0 in return-vector to maintain size
    instantaneous_frequency = [0 instantaneous_frequency];
end

फिर बार्नर ने तीन और सूत्र दिए जो उन्होंने "तात्कालिक आवृत्ति सन्निकटन" के नाम दिए:

f9(t)=12πTarctan[x(t)y(t+T)ax(t+T)y(t)bx(t)x(t+T)c+y(t)y(t+T)d]

function[instantaneous_frequency] = f9(analytic_signal, Fs, T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = Fs/(2*pi*T);
    a = x(1:end-T).*y(1+T:end);
    b = x(1+T:end).*y(1:end-T);
    c = x(1:end-T).*x(1+T:end);
    d = y(1:end-T).*y(1+T:end);
    instantaneous_frequency = factor.*atan((a-b)./(c+d));
    % Append 0 to return-vector to maintain size
    instantaneous_frequency = [instantaneous_frequency zeros(1,T)];
end

f11(t)=14πTarctan[x(tT)y(t+T)ax(t+T)y(tT)bx(tT)x(t+T)c+y(tT)y(t+T)d]

function [instantaneous_frequency] = f11(analytic_signal, Fs, T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = Fs/(4*pi*T);
    a = x(1:end-2*T).*y(1+2*T:end);
    b = x(1+2*T:end).*y(1:end-2*T);
    c = x(1:end-2*T).*x(1+2*T:end);
    d = y(1:end-2*T).*y(1+2*T:end);
    instantaneous_frequency = factor.*atan((a-b)./(c+d));
    % Append and insert 0s to maintain size
    instantaneous_frequency = [zeros(1,T) instantaneous_frequency zeros(1,T)];
end

f14(t)=2πT[x(t)y(t+T)ax(t+T)y(t)b(x(t)+x(t+T))2c+(y(t)+y(t+T))2d]

function [instantaneous_frequency] = formula14(analytic_signal, Fs, T);
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = 2*Fs/(pi*T);
    a = x(1:end-T).*y(1+T:end);
    b = x(1+T:end).*y(1:end-T);
    c = (x(1:end-T)+x(1+T:end)).^2;
    d = (y(1:end-T)+y(1+T:end)).^2;
    instantaneous_frequency = factor * ((a-b)./(c+d));
    % Append and insert 0s to maintain size
    instantaneous_frequency = [instantaneous_frequency zeros(1,T)];
end

सभी 3 सन्निकटन में सूत्र T को Fs (T = Fs = 1000 = 1s) पर सेट किया गया था, जैसा कि कागज में सुझाया गया है।

अब मेरे प्रश्न हैं:

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

    • मैं वास्तव में यह भी नहीं जानता कि क्या करना है, जब सिग्नल में एक से अधिक आवृत्ति मौजूद हो। गणना एक दिए गए बिंदु के लिए एक समय में एक नंबर लौटाती है, तो क्या करना चाहिए जब यहां, अधिक आवृत्तियों मौजूद हैं? सभी आवृत्तियों या ऐसा कुछ का औसत लौटाएं?
  • और मेरा शायद सबसे महत्वपूर्ण सवाल यह है कि वास्तविक और विस्तृत सॉफ्टवेयर में कैसे संभाला जाता है? मान लें कि मैं 1.75 s पर संग्राहक संकेत की तात्कालिक आवृत्ति जानना चाहता हूं, और मैंने विधि f2 को चुना, इससे मैं 'भाग्यशाली' हो सकता हूं और 6 के करीब एक संख्या प्राप्त कर सकता हूं [हर्ट्ज] जो सही उत्तर देने की सबसे अधिक संभावना है, या मैं मेरे परिणामों को उसके बगल में रखें और अचानक मुझे कुछ वायर्ड मिले, उच्च करने के लिए रास्ता, परिणाम, क्योंकि मैंने दुर्भाग्य से स्पाइक में एक मूल्य उठाया था। इसे कैसे संभाला जा सकता है? माध्य के साथ इसे पोस्टप्रोसेस करके या इससे भी बेहतर मीडियन फ़िल्टर? मुझे लगता है कि यहां तक ​​कि वास्तव में विशेष रूप से उन क्षेत्रों में मुश्किल हो सकती है जहां कई स्पाइक्स एक दूसरे के बगल में हैं।

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

यह अब तक है, मैं हर उत्तर के लिए बहुत आभारी हूं, खासकर जब कोई मुझे एक वास्तविक सॉफ्टवेयर परियोजना में इसे लागू करने के लिए सुझाव देता है ;)

तरह का संबंध है, पैट्रिक

जवाबों:


4

वास्तव में उत्तर नहीं, लेकिन शायद सहायक: व्यक्तिगत रूप से मैंने पाया कि तात्कालिक आवृत्ति की अवधारणा केवल पर्याप्त रूप से संकीर्ण बैंड संकेतों के लिए उपयोगी है।

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

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


अब तक के संकेत के लिए धन्यवाद, और मुझे लगता है कि यह टिप्पणी एक अच्छी बात है। लेकिन फिर मुझे आश्चर्य है कि 20Hz से ऊपर होने पर "प्योर चिर सिग्नल" के तात्कालिक चरण की गणना क्यों मुश्किल में है। अभी भी निर्धारित करने के लिए केवल एक आवृत्ति है, वर्तमान।
मुहू

// तात्कालिक आवृत्ति की अवधारणा केवल पर्याप्त रूप से संकीर्ण बैंड संकेतों के लिए उपयोगी है ।// ------ हाँ, एक एकल AM'd और FM'd sinusoid की तरह।
रॉबर्ट ब्रिस्टो-जॉनसन

4

शुद्ध चिर सिग्नल पर कम से कम f2 और f3 उपयुक्त काम करने लगते हैं, लेकिन f2 और f3 सहित सभी विधियाँ भयानक रूप से विफल होने लगती हैं, जब यह संकेत में एक से अधिक आवृत्तियों पर आता है। वास्तव में एक संकेत में एक से अधिक आवृत्ति होने के बजाय हमेशा ऐसा होता है। तो कोई कैसे (अधिक या कम) सही तात्कालिक आवृत्ति प्राप्त कर सकता है?

जैसा कि हिलमार का सुझाव है, हिल्बर्ट ट्रांसफ़ॉर्म (या "एनालिटिक सिग्नल") विधि वाइड-बैंड पर काम नहीं करती है क्योंकि इसमें अधिक आवृत्ति घटक होते हैं। आप केवल इस विधि को कर सकते हैं एकल साइनसोइडल घटक के लिए ।

इसलिए, विश्लेषणात्मक सिग्नल दृष्टिकोण के साथ, आप जो करना चाहते हैं वह इस पहचान का उपयोग करता है:

arctanuarctanv=arctan(uv1+uv)

अगर |uv| काफी छोटा है, जिसे आप बार्नर के लिए निकाल सकते हैंf9“से सूत्र।

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


1

वाह, क्या बड़ा सवाल है। मैं पहले महत्वपूर्ण प्रश्न का उत्तर देने जा रहा हूं:

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

कारण यह है कि भूकंपीय प्रणाली "वाइब्रोसिस" का उपयोग तेल उद्योग में भूकंपीय सर्वेक्षण करने के लिए किया जाता है। जिन ट्रकों को मैंने 5 हर्ट्ज से लगभग 90 हर्ट्ज तक कंपन से जोड़ा है, उन्हें चिर सिग्नल करने के लिए बनाया जा सकता है। तेल उद्योग में बहुत पैसा है, और इन संकेतों से रिटर्न को संसाधित करना बहुत, बहुत ही आकर्षक हो सकता है। इसलिए, कई लोगों ने ऐसे संकेतों का विश्लेषण करने में कई घंटे बिताए हैं, जिनमें तात्कालिक आवृत्ति तकनीकों को देखना शामिल है।


आपके अधिक महत्वपूर्ण प्रश्नों के लिए: आम तौर पर, अंकगणितीय अंतर करना और असतत समय संकेतों पर आर्कटैगैंट की गणना करना एक बुरा संकेत हैTM। ऐसा इसलिए है क्योंकि असतत-समय आवृत्ति अनुमानों की गणना "परिपत्र अंकगणितीय" (AKA वेक्टर अंकगणितीय) का उपयोग करके की जानी चाहिए।

इस पेपर को देखें।

जैसा कि यहां लागू किया गया है, बेहतर दृष्टिकोण "चरण भारित औसतन" का उपयोग करते हैंया यहां मतलूब के सीधे लिंक के लिए


1

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

जे। एकलाउ में लफलिन देखें। समाज। Am।, Jan. 1999. IF और आम गलतफहमी पर अन्य अच्छे कागजात Picinbono (IEEE Trans। Procc, मार्च 1997) और Vakman (IEEE Trans। Sig। Proc।, अप्रैल 1996) हैं।

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