उचित तरीके से सिन डाउनसमलिंग (डीएफटी डाउनसमलिंग) करने के लिए उचित तरीके से नमूनों की संख्या के साथ समान रूप से सममित डिस्क्रीट सिग्नल।
एक संकेत दिया $ \left\{ x [ 0 ], x [ 1 ], ..., x [ N - 1 ] \right\} $ आवृत्ति डोमेन (Sinc प्रक्षेप) में इसे नीचे करने का सही तरीका क्या होगा?
जवाब
फ़्रिक्वेंसी में इंटरफ़ेक्शन (DFT डोमेन)
कार्यान्वयन अच्छी तरह से जाना जाता है। MATLAB में यह कुछ इस तरह होगा:
if(numSamplesO > numSamples)
% Upsample
halfNSamples = numSamples / 2;
if(mod(numSamples, 2) ~= 0) % Odd number of samples
vXDftInt = interpFactor * [vXDft(1:ceil(halfNSamples)); zeros(numSamplesO - numSamples, 1, 'like', vXDft); vXDft((ceil(halfNSamples) + 1):numSamples)];
else % Even number of samples -> Special Case
vXDftInt = interpFactor * [vXDft(1:halfNSamples); vXDft(halfNSamples + 1) / 2; zeros(numSamplesO - numSamples - 1, 1, 'like', vXDft); vXDft(halfNSamples + 1) / 2; vXDft((halfNSamples + 2):numSamples)];
end
else
% Downsample
halfNSamples = numSamplesO / 2;
if(mod(numSamples, 2) ~= 0) % Odd number of samples
vXDftInt = interpFactor * [vXDft(1:ceil(halfNSamples)); vXDft((numSamples - floor(halfNSamples) + 1):numSamples)];
else % Even number of samples -> Special Case
vXDftInt = interpFactor * [vXDft(1:halfNSamples); vXDft(halfNSamples + 1) / 2; vXDft((numSamples - halfNSamples + 2):numSamples)];
end
end
तो हम यहाँ 2 मामलों का ध्यान रखते हैं:
- अपसम्प्लिमेंट
हम आउटपुट के नमूनों की संख्या ( ) से मिलान करने के लिए DFT के केंद्र भाग में शून्य नमूने जोड़ते हैंnumSamplesO
।
हम उस मामले का ध्यान रखते हैं जो नमूनों की इनपुट संख्या (numSamples
) सम है। उस मामले में हम Nyquist नमूना ($ X \left[ N / 2 \right] $) 2 में कहां $ N $ नमूनों की इनपुट संख्या है। - Downsample
हम आउटपुट के नमूनों की संख्या ( ) से मिलान करने के लिए DFT के केंद्र भाग के नमूने निकालते हैंnumSamplesO
।
हम उस मामले का ध्यान रखते हैं जो नमूनों की आउटपुट संख्या (numSamplesO
) सम है। उस मामले में हम विभाजित करने के लिए Nyquist नमूना ($ X \left[ M / 2 \right] $) 2 में कहां $ M $ नमूनों की आउटपुट संख्या है।
सवाल यह है कि हम इसे इस तरह से क्यों करते हैं? प्रक्षेप कारक क्यों interpFactor
? बंटवारे का कारक कहां है?$ 0.5 $से आते हैं?
यह उत्तर देने के लिए कि हमें DFT को याद रखने की आवश्यकता है, मूल रूप से असतत फूरियर श्रृंखला (DFS) है।
इसका मतलब है कि सबसे महत्वपूर्ण धारणा समय और आवृत्ति डोमेन दोनों में आवधिक डेटा है।
अब, चूंकि डीएफटी मूल रूप से डीएफएस है , इसलिए इसकी अवधि के भीतर एक सिग्नल को प्रक्षेपित करने का प्राकृतिक तरीका फूरियर श्रृंखला का उपयोग करना होगा।
विवरणों में जाने से पहले पूर्णांक संख्याओं के 2 सेटों को परिभाषित करते हैं जिनका उपयोग सूचकांकों के मूल्यों को परिभाषित करने के लिए किया जाएगा:
$$ \begin{aligned} \mathcal{K}_{DFS}^{N} & = \left\{- \left\lceil \frac{N - 1}{2} \right\rceil, - \left\lceil \frac{N - 1}{2} \right\rceil + 1, \ldots, -1, 0, 1, \ldots, \left\lceil \frac{N - 1}{2} \right\rceil - 1, \left\lceil \frac{N - 1}{2} \right\rceil \right\} \\ \mathcal{K}_{DFT}^{N} & = \left\{- \left\lceil \frac{N - 1}{2} \right\rceil, - \left\lceil \frac{N - 1}{2} \right\rceil + 1, \ldots, -1, 0, 1, \ldots, \left\lceil \frac{N - 1}{2} \right\rceil - 1, \left\lfloor \frac{N - 1}{2} \right\rfloor \right\} \\ \end{aligned} $$
इसका मतलब है, अधिकतम बैंडविड्थ के साथ एक संकेत के लिए $ \frac{1}{2 T} $ के लिए नमूना प्रमेय द्वारा नमूना $ t \in \left[ 0, N T \right) $ कहां है $ T $ नमूना अवधि है और $ P = N T $ फ़ंक्शन अवधि है:
$$ \begin{aligned} x \left( t \right) {\Big|}_{t = n T} & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lceil \frac{N - 1}{2} \right\rceil} {c}_{k} {e}^{ j 2 \pi \frac{k t}{P} } && \text{By Fourier Series} \\ & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lceil \frac{N - 1}{2} \right\rceil} {c}_{k} {e}^{ j 2 \pi \frac{k t}{N T} } && \text{By the period of the function / series} \\ & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lceil \frac{N - 1}{2} \right\rceil} {c}_{k} {e}^{ j 2 \pi \frac{k n}{N} } && \text{Setting $ टी = एन टी $} \\ & = \frac{1}{N} \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lfloor \frac{N - 1}{2} \right\rfloor} X \left[ k \right] {e}^{ j 2 \pi \frac{k n}{N} } && \text{The DFT} \end{aligned} $$
उपरोक्त सूत्र समान मामले के लिए भी काम करता है $ N = 2 l, \; l \in \mathbb{N} $ और विषम मामले के लिए $ N = 2 l + 1, \; l \in \mathbb{N} $। उपरोक्त डीएफटी गुणांक और फूरियर श्रृंखला गुणांक के बीच संबंध को परिभाषित करता है :
$$ {c}_{k} = \begin{cases} \frac{ X \left[ k \right ] }{2 N} & \text{ if } k = \frac{N}{2} \\ \frac{ X \left[ k \right ] }{2 N} & \text{ if } k = -\frac{N}{2} \\ \frac{ X \left[ k \right ] }{N} & \text{ if } k \notin \left\{\frac{N}{2}, -\frac{N}{2} \right\} \end{cases}, \; k \in \mathcal{K}_{DFS}^{N} $$
लेकिन किसी भी सेट के लिए अन्य नमूने बिंदुओं का उपयोग करने के लिए हमें कुछ भी नहीं रोक रहा है $ { \left\{ {t}_{m} \right\}}_{m = 0}^{M - 1} $ कहां है $ \forall m, {t}_{m} \in \left[ 0, N T \right) $। जो देता है$ x \left( t \right) = \frac{1}{N} \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lfloor \frac{N - 1}{2} \right\rfloor} X \left[ k \right] {e}^{ j 2 \pi \frac{k t}{N T} } $ के लिये $ t \in \left[ 0, N T \right) $। यह जटिल और वास्तविक संकेतों के लिए काम करेगा।
वास्तविक संकेतों के लिए,$ x \left( t \right) \in \mathbb{R} $हम DFT के कोसाइन रूप का भी उपयोग कर सकते हैं :
$$ \begin{aligned} x \left( t \right) & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lceil \frac{N - 1}{2} \right\rceil} {c}_{k} {e}^{ j 2 \pi \frac{k t}{N T} } && \text{From the above} \\ & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lceil \frac{N - 1}{2} \right\rceil} \left| {c}_{k} \right| \cos \left( 2 \pi \frac{k t}{N T} + \angle {c}_{k} \right) && \text{Fourier series in its Cosine form} \\ & = \sum_{k = - \left\lceil \frac{N - 1}{2} \right\rceil}^{\left\lfloor \frac{N - 1}{2} \right\rfloor} \frac{\left| X \left[ k \right] \right|}{N} \cos \left( 2 \pi \frac{k t}{N T} + \angle X \left[ k \right] \right) && \text{Fourier series in its Cosine form} \\ & = \sum_{k = 0}^{\left\lfloor \frac{N - 1}{2} \right\rfloor} {\alpha}_{k} \frac{\left| X \left[ k \right] \right|}{N} \cos \left( 2 \pi \frac{k t}{N T} + \angle X \left[ k \right] \right) && \text{Using the DFT conjugate symmetry of a real signal} \end{aligned} $$
कहा पे $ {\alpha}_{k} = \begin{cases} 1 & \text{ if } k \in \left\{ 0, \frac{N}{2} \right\} \\ 2 & \text{ else } \end{cases} $।
इसलिए अब हमें यह सोचने की जरूरत है कि हमने यहां क्या देखा और यह ऊपर दिए गए एल्गोरिदम से कैसे संबंधित है।
पहले हमें ध्यान देने की आवश्यकता है कि यहां मुख्य चाल यह है कि सूचकांक के जाने पर डीएफटी का मूल रूप होना चाहिए$ k \in \mathcal{K}_{DFT}^{N} $। फिर डीएफटी के मूल असतत फूरियर श्रृंखला ( डीएफएस ) के कनेक्शन को देखना आसान है ।
टिप्पणी : व्यवहार में, डीएफटी परिभाषित (और संगणित) है$ k \in \left\{ 0, 1, \ldots, N - 1 \right\} $।
अगर हमने आउटपुट यूनिफॉर्म टाइम ग्रिड के सेट को चुना $ { \left\{ {t}_{m} \right\}}_{m = 0}^{M - 1} $ रूप में होना $ {t}_{m} = m {T}_{s} $ जहां अपसमापन दर (हम बाद में डाउनसमलिंग का ध्यान रखेंगे) $ q = \frac{M}{N} \geq 1 $फिर यह स्पष्ट है कि एक ग्रिड को ठीक करने के लिए IDFT में लुकइन द्वारा क्या किया जाना चाहिए :
$$ x \left[ m \right] = \frac{1}{M} \sum_{k = 0}^{M - 1} \tilde{X} \left[ k \right] {e}^{j 2 \pi \frac{k m}{M}} = \frac{1}{M} \sum_{k = - \left\lceil \frac{M - 1}{2} \right\rceil}^{\left\lfloor \frac{M - 1}{2} \right\rfloor} \tilde{X} \left[ k \right] {e}^{j 2 \pi \frac{k m}{M}} $$
अब हमें इस मैच को ऊपर से प्रक्षेप सूत्र बनाने की आवश्यकता है। चूंकि यह एक रेखीय परिवर्तन है जिसके द्वारा इसे गुणा किया जाता है$ q $निरंतर की देखभाल करेगा। हम यह भी देख सकते हैं$ \forall m, \frac{m}{M} = \frac{{t}_{m}}{N T} $ सेटिंग के कारण:
$$ \tilde{X} \left[ k \right] = \begin{cases} X \left[ k \right] & \text{ if } k \in \mathcal{K}_{DFT}^{N} \setminus \left\{ k \mid k = \frac{N}{2} \right\} \\ \frac{X \left[ k \right]}{2} & \text{ if } k = \frac{N}{2} \\ 0 & \text{ if } k \notin \mathcal{K}_{DFT}^{N} \end{cases} $$
वहाँ से $ N $ डीएफटी की आवधिकता हम समय के एक समान ग्रिड के लिए अंतिम इंटरपोलेशन लिख सकते हैं $ q $:
$$ x \left[ m \right] = \frac{q}{M} \sum_{k = 0}^{M - 1} \hat{X} \left[ k \right] {e}^{j 2 \pi \frac{k m}{M}} $$
कहा पे $ \hat{X} \left[ k \right] $ परिभाषित किया जाता है:
$$ \hat{X} \left[ k \right] = \begin{cases} X \left[ k \right] & \text{ if } k \in \left\{ 0, 1, \ldots, N - 1 \right\} \setminus \left\{ \frac{N}{2} \right\} \\ \frac{X \left[ k \right]}{2} & \text{ if } k = \frac{N}{2} \\ 0 & \text{ if } k \in \left\{ N, N + 1, \ldots, M - 1 \right\} \end{cases} $$
कौन वास्तव में क्या हम में किया था upsample ऊपर कोड।
क्या गिरावट के बारे में? खैर, हम डीएफटी डोमेन में उसी अंतर्ज्ञान का उपयोग कर सकते हैं जैसे कोड दिखाता है। यह मूल रूप से है क्योंकि फूरियर श्रृंखला के गुणांक का उपयोग करने वाला प्रक्षेप कुछ भी नहीं है लेकिन डिरिचलेट कर्नेल द्वारा आवृत्ति डोमेन में गुणा जो आवधिक समतुल्य है$ \operatorname{sinc} \left( \cdot \right) $समारोह। यह भी अंतर्ज्ञान के लिए है$ \frac{1}{2} $कारक, जैसा कि हम आवृत्ति डोमेन पर मूल्य 1 के साथ एक आयत के साथ गुणा करते हैं, जिसमें जंप डिसकंटीनिटी है। दरअसल फूरियर सीरीज़ डिसकंटिन्यूज़ पर जंप के माध्य मान में परिवर्तित होती है। चूंकि हम से जाते हैं$ 1 $ सेवा मेरे $ 0 $, इसका मतलब है कि छलांग पर मूल्य है $ 0.5 $।
तो ऊपर दिए गए डाउनस्मैप्लिन और अपस्मैपिंग कोड, इनपुट नमूने की आवृत्ति के अनुसार अपचयन मामले में और डाउनस्प्लान मामले में आउटपुट के अनुसार डेटा पर डिरिचलेट कर्नेल को लागू करता है।
नमूनों की उत्पादन संख्या के पूर्णांक कारक के लिए अपसंस्कृति डाउन करने के लिए एक और तरीका अपसम्पन्न होगा। फिर सैंपल लेने के लिए डीकमीशन (हर ... सैंपल) लें। 2 उस मामले के लिए मेल खाएगा जिसमें कम दर और नमूना दर के बीच आवृत्ति में डेटा की कोई ऊर्जा नहीं है। यदि ऐसा होता है, तो वे मेल नहीं खाएंगे।
मैं MATLAB कोड जोड़ूंगा ...
टिप्पणी : इस उत्तर में अपसैंपलिंग भी शामिल है । कृपया Upsampling पर एक और प्रश्न खोलने पर विचार करें या इसे चौड़ा करें।