एक नमूने के एक अंश द्वारा एक संकेत को कैसे स्थानांतरित करना है?


22

पारी प्रमेय का कहना है :

गुणा द्वारा एक रेखीय चरण कुछ पूर्णांक के लिए मीटर एक से मेल खाती परिपत्र पारी उत्पादन का : ने ले ली है , जहां अधोलिखित व्याख्या की है modulo N (यानी, समय-समय पर)।एक्सn 2πमैंएनnमीटरएक्सकश्मीरएक्सकश्मीरएक्सकश्मीर-मीटर

ठीक है, यह ठीक काम करता है:

plot a

मनमाने ढंग से 9-नमूना संकेत

N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))

आवृत्ति डोमेन में 3 नमूनों द्वारा शिफ्ट सिग्नल

जैसा कि मुझे उम्मीद थी, यह 3 नमूनों द्वारा स्थानांतरित हो गया।

मैंने सोचा कि आप एक नमूने के अंशों को शिफ्ट करने के लिए भी ऐसा कर सकते हैं , लेकिन जब मैं इसे आज़माता हूं, तो मेरा संकेत काल्पनिक हो जाता है और मूल की तरह बिल्कुल नहीं:

plot real(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N)))
plot imag(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N))), 'b--'

3.5 जटिल घातीय द्वारा गुणा करने के बाद संकेत

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


यहां एक मटलब फाइल एक्सचेंज सबमिशन है, जो सम-विषम / वास्तविक / जटिल संकेतों और भिन्नात्मक देरी के लिए सही मॉड्यूलेशन की गणना करता है: mathworks.com/matlabcentral/fileexchange/7886-fshift
अहमद हशीह

जवाबों:


14

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

यह सिर्फ इतना होता है कि चरण ट्विस्ट या सर्पिल के लिए उपयुक्त ऑफसेट, जो एपर्चर में 2 पाई रोटेशन के सटीक पूर्णांक गुणकों को पूरा करता है, एपर्चर में सममित रूप से संयुग्मित होने के लिए, शून्य है।

एक संयुग्म सममित चरण ट्विस्ट वेक्टर के साथ, परिणाम तब गैर-पूर्णांकित बदलावों के लिए एक गोलाकार Sinc प्रक्षेप के रूप में समाप्त होना चाहिए।

ओपी द्वारा विस्तार:

आपकी पसंद k = [0, 1, 2, 3, 4, 5, 6, 7, 8] एक विषम जटिल घातांक का उत्पादन कर रही है:

समसामयिक जटिल घातीय 0.5 नमूना पारी प्रयास, धराशायी रेखा के रूप में काल्पनिक भाग के साथ

यदि आप इसके बजाय k = [0, 1, 2, 3, 4, -4, -3, -2, -1] का उपयोग करते हैं, तो आपको एक हर्मिट-सममित जटिल घातांक मिलता है:

plot(fftshift(exp(-1j * 2*pi * 0.5/N * k)))

धमाकेदार रेखा के रूप में काल्पनिक भाग के साथ 0.5 नमूना पारी के लिए हरमिट-सममित जटिल घातांक

और अब जब आप 0.5 या 3.5 नमूनों द्वारा शिफ्ट करने के लिए समान घातीय सूत्र का उपयोग करते हैं, तो आपको एक वास्तविक परिणाम मिलता है:

plot ifft(fft(a)*exp(-1j * 2 * pi * 0.5/N *k))
plot ifft(fft(a)*exp(-1j * 2 * pi * 3.5/N *k))

मूल रेखा के रूप में मूल के साथ 0.5 और 3.5 नमूनों द्वारा पाली


अहा! इसके बजाय k = [0, 1, 2, 3, 4], मैं का उपयोग करना चाहिएk = [0, 1, 2, -2, -1]
एंडोलिथ

@endolith / hotpaw2, दूसरे शब्दों में, यह समय-डोमेन नमूनों की अनुक्रमणिका के बारे में है ?
theGrapeBeyond

1
बिन 0 के आसपास समरूपता भी N / 2 के आसपास समरूपता प्रदान करेगी, भले ही N / 2 पूर्णांक न हो।
हॉटपावर 2

1
मुझे एक ऐसा फ़ंक्शन मिला, जो Matlab फ़ाइल एक्सचेंज पर सही मॉड्यूलेशन लागू करता है: mathworks.com/matlabcentral/fileexchange/7886-fshift applies!
अहमद फ़सीह

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