साइन लहर के एफएफटी परिणामों की जांच कैसे करें?


9

मेरे FFT एल्गोरिथ्म के इनपुट के रूप में मुझे एक ऑडियो फ़ाइल (साइन वेव) 1000Hz दी गई है। मुझे एक सरणी में 8192 पावर स्पेक्ट्रम सैंपल मिले हैं।

यह जांचने का सबसे अच्छा और आसान तरीका क्या है कि मेरा आउटपुट सही है या गलत?

यदि मैं एक मूक ऑडियो फ़ाइल देता हूं तो सभी नमूनों के लिए आउटपुट शून्य है। एक साइन वेव में ओ / पी 20 (0 वें नमूने) से 26059811 (743 वें नमूने) तक बढ़ता है और धीरे-धीरे घटकर 40 हो जाता है।

अगर मुझे आउटपुट रेंज का अंदाजा है तो मैं तकनीकी रूप से साबित कर सकता हूं कि एफएफटी काम कर रहा है या नहीं।

कोई भी विचार मददगार होगा।

किसी भी तकनीकी संदेह के लिए इस लिंक का संदर्भ लें ।


1
क्या आप अपने एरे को प्लॉट कर सकते हैं? (शायद एक स्प्रेडशीट सॉफ्टवेयर में?)

सरणी में 8192 मान हैं। आप चाहते हैं कि मैं मैन्युअल रूप से साजिश रचूं या स्प्रैडशीट संभाल लूंगा। मैं मैक पर काम कर रहा हूं

2
मैंने एमएस एक्सेल में दसियों सैंपल लिए हैं; सूक्ति या अन्य भी उपयुक्त है। या gnuplot भी।

खुला कार्यालय मत भूलना
नकली नाम

@ फ़ेक नाम: मैं ग्राफ़ की साजिश करने में सक्षम नहीं हूं ..

जवाबों:


4

ऐसा लगता है कि आप 8192 या 8193 आवृत्तियों (0 से Nyquist पर परिमाण प्राप्त करने के लिए 10 खिड़कियों (गैर-अतिव्यापी) के औसत से स्पेक्ट्रम की गणना कर रहे हैं, लेकिन कुछ एल्गोरिदम Nyquist आवृत्ति को बिन 1192 पर छोड़ सकते हैं)।

जाँच करने के लिए पहली बात यह है कि चोटी दाहिने बिन में है। आपने यह नहीं बताया कि नमूना दर क्या है, लेकिन बिन 743 नमूना दर का 743/16384 गुना होगा। यदि संकेत वास्तव में 800 हर्ट्ज पर है, जो लगभग 17640 नमूनों / सेकंड पर एफएस डालता है। जो गलत लगता है। आपका परीक्षण संकेत संभवत: 8000, 16000, 22050, 32000, 44100, या 48000 जैसे मानक दर पर होगा। Fs = 22050 के लिए, शिखर तेजी से बिन 800/22050 * 16384 = 594 में होगा।

जाँच करने के लिए एक और मानदंड यह है कि सिग्नल में कुल ऊर्जा लगभग समय और आवृत्ति डोमेन दोनों में समान है। यहाँ पायथन में एक उदाहरण दिया गया है:

In [1]: NFFT = 2048; N = 10*NFFT; n = arange(N); Fs = 22050
In [2]: x = 0.4*cos(2*pi*400/Fs*n) + 0.6*cos(2*pi*800/Fs*n)

In [3]: y,freqs = psd(x, NFFT=NFFT, Fs=Fs, pad_to=16384)  # PSD by Welch's Method

In [4]: sum(x**2)/Fs           # time-domain energy
Out[4]: 0.24149869319296949
In [5]: sum(y) * N/16384       # frequency-domain energy
Out[5]: 0.24148752834391252

इनपुट सिग्नल x, जिसमें Fs = 22050 सैंपल / सेकंड में सैंपल किए गए दो साइनसोइड्स होते हैं, जो NFFT = 2048 सैंपल के 10 नॉन-ओवरलैपिंग विंडो में सेगमेंट किए जाते हैं। Psd (पावर स्पेक्ट्रल डेंसिटी) की कॉल स्पेक्ट्रम y की गणना दस 16384-बिंदु DFTs के परिमाण के औसत के रूप में करती है (वास्तव में यह x193 अंक है क्योंकि x वास्तविक-मूल्यवान है)।

गणना की गई आवृत्ति-डोमेन ऊर्जा का स्केलिंग कारक N / 16384 है क्योंकि psd फ़ंक्शन ने कुल सिग्नल लंबाई के बजाय DFT आकार में y को स्केल किया है। यह मुद्दा है या नहीं यह इस बात पर निर्भर करता है कि आपका सिस्टम PSD को सामान्य बनाने में कैसे काम करता है। एक और वैकल्पिक सामान्यीकरण 1 / एफएस से बढ़ रहा है। यह मूल एनालॉग सिग्नल में ऊर्जा से मेल खाता है। लायब्रेरी में डिफ़ॉल्ट सामान्यीकरण को अच्छी तरह से प्रलेखित किया जाना चाहिए।


मैंने अपने साइन वेव सिग्नल का परीक्षण किया यह 1000 हर्ट्ज है। मेरा FFT सही जवाब देता है। आपकी मदद के लिए धन्यवाद।

10

आपको एफएफटी के आउटपुट की परिमाण को साजिश करने की आवश्यकता है। मैं आपकी प्रोग्रामिंग भाषा से परिचित नहीं हूं, लेकिन पायथन में आप कुछ इस तरह का प्रयोग करेंगे plot(abs(fft(a)))। एक मूक इनपुट के लिए, आउटपुट सभी शून्य होना चाहिए। साइन वेव इनपुट के लिए, आपको दो स्पाइक्स देखने चाहिए:

वैकल्पिक शब्द

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

यदि आवृत्ति अधिक है, तो स्पाइक्स केंद्र के करीब होगा। यदि आवृत्ति चंक आकार के साथ पूरी तरह से सिंक में है , तो स्पाइक केवल एक बिंदु चौड़ा होगा और बाकी सब कुछ ठीक 0. होगा अन्यथा यह ऊपर की तरह एक टेपिंग "स्कर्ट" होगा।


क्या आप आयाम के रूप में पावर स्पेक्ट्रम मूल्य का मतलब है?

t -> समय के संदर्भ में?

समय की चिंता मत करो। यदि आप अभी जाँच कर रहे हैं कि एफएफटी काम कर रहा है या नहीं, तो आपको बस यह जाँचने की ज़रूरत है कि परिमाण का आकार इस के समान है।
14

मैं वैसे भी साजिश नहीं कर पा रहा हूं, जब मेरा एफएफटी सही काम कर रहा है। मैं निश्चित रूप से अपने खाली समय में ग्राफ को लागू करने की कोशिश करूंगा। बहुत बहुत धन्यवाद।

1
@clabacchio: ओह। FFT प्लॉट की शुरुआत और अंत में f = 0 अक्ष के साथ एक आउटपुट का उत्पादन करता है। भूखंड का मध्यबिंदु f = fs / 2 अक्ष है। प्लॉट को पुनर्व्यवस्थित करने के लिए अक्सर एक fftfreq या fftshift फ़ंक्शन होता है ताकि केंद्र में 0 आवृत्ति हो। flic.kr/p/arVeZT
एंडोलिथ

0

मैंने एक्सेल विश्लेषण टूलपाक के भीतर फूरियर विश्लेषण उपकरण का उपयोग डेटा और परिणामों पर त्वरित जांच करने के लिए किया है।


मैं मैक पर काम कर रहा हूं।

@Warrior - फिर Gnumeric स्थापित करने के लिए MacPorts या फ़िंक का उपयोग करें ( यदि आप चाहते हैं कि एक प्लैटिपस आवरण पर कुछ जानकारी के लिए इस पृष्ठ को भी देखें )
केविन वर्मी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.