Sonlu Numune Sayısı ile Tek Biçimde Örneklenmiş Ayrık Sinyaller için Sinc Aşağı Örnekleme (DFT Aşağı Örnekleme) Yapmanın Doğru Yolu
Bir sinyal verildi $ \left\{ x [ 0 ], x [ 1 ], ..., x [ N - 1 ] \right\} $ frekans alanında altörneklemenin doğru yolu nedir (Sinc enterpolasyonu)?
Yanıtlar
Frekansta Enterpolasyon (DFT Alanı)
Uygulama iyi bilinmektedir. MATLAB'da şöyle bir şey olacaktır:
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
Bu yüzden burada 2 vakayla ilgileniyoruz:
- Upsample Çıktının ( ) örnek sayısını eşleştirmek için DFT'nin
orta kısmına sıfır örnek ekleriz . Örneklerin giriş sayısının ( ) çift olması durumuna dikkat ediyoruz . Bu durumda Nyquist örneğini (numSamplesO
numSamples
$ X \left[ N / 2 \right] $) 2'ye nerede $ N $ örneklerin girdi sayısıdır. - Aşağı örnekleme Çıktının ( ) örnek sayısını eşleştirmek için DFT'nin
orta kısmının örneklerini kaldırıyoruz . Örneklerin çıktı sayısının ( ) çift olması durumuna dikkat ediyoruz . Bu durumda Nyquist örneğini (numSamplesO
numSamplesO
$ X \left[ M / 2 \right] $) 2'ye nerede $ M $ örneklerin çıktı sayısıdır.
Soru şu ki, bunu neden bu şekilde yapıyoruz? Neden enterpolasyon faktörü interpFactor
? Bölme faktörü nerede$ 0.5 $dan geliyorum?
DFT'nin temelde Discrete Fourier Series (DFS) olduğunu hatırlamamız gerektiğini yanıtlamak için.
Bu, en önemli varsayımların verilerin hem zaman hem de frekans alanında periyodik olması anlamına gelir.
Şimdi, DFT temelde DFS olduğundan , kendi periyodu içinde bir sinyali enterpolasyon etmenin doğal yolu Fourier Serisini kullanmak olacaktır.
Ayrıntılara girmeden önce, indislerin değerlerini tanımlamak için kullanılacak 2 tam sayı kümesi tanımlayalım:
$$ \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} $$
Bu, maksimum bant genişliğine sahip bir sinyal için $ \frac{1}{2 T} $ Örnekleme Teoremi ile örneklenmiş $ t \in \left[ 0, N T \right) $ nerede $ T $ örnekleme dönemi ve $ P = N T $ fonksiyon periyodu:
$$ \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 $ t = n T $} \\ & = \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} $$
Yukarıdaki formül çift durum için işe yarar $ N = 2 l, \; l \in \mathbb{N} $ ve garip durum için $ N = 2 l + 1, \; l \in \mathbb{N} $. Yukarıdakiler, DFT katsayıları ile Fourier Serisi Katsayıları arasındaki bağlantıyı tanımlar :
$$ {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} $$
Ancak, herhangi bir set için başka örnekleme noktalarını kullanmamızı engelleyen hiçbir şey de yoktur. $ { \left\{ {t}_{m} \right\}}_{m = 0}^{M - 1} $ nerede $ \forall m, {t}_{m} \in \left[ 0, N T \right) $. Hangi verir$ 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} } $ için $ t \in \left[ 0, N T \right) $. Bu, karmaşık ve gerçek sinyaller için çalışacaktır.
Gerçek sinyaller için,$ x \left( t \right) \in \mathbb{R} $DFT'nin Kosinüs formunu da kullanabiliriz :
$$ \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} $$
Nerede $ {\alpha}_{k} = \begin{cases} 1 & \text{ if } k \in \left\{ 0, \frac{N}{2} \right\} \\ 2 & \text{ else } \end{cases} $.
Öyleyse şimdi burada gördüklerimizi ve bunun yukarıdaki algoritma ile nasıl ilişkili olduğunu düşünmemiz gerekiyor.
Öncelikle, buradaki ana püf noktasının, DFT'nin yerel formunun indeks gittiğinde olması gerektiğine dikkat etmeliyiz.$ k \in \mathcal{K}_{DFT}^{N} $. Daha sonra DFT'nin Ayrık Fourier Serileri ( DFS ) kökenlerine olan bağlantıyı görmek daha kolaydır .
Açıklama : Uygulamada, DFT şu şekilde tanımlanır (ve hesaplanır)$ k \in \left\{ 0, 1, \ldots, N - 1 \right\} $.
Çıktı tekdüzen zaman ızgarası kümesini seçersek $ { \left\{ {t}_{m} \right\}}_{m = 0}^{M - 1} $ formda olmak $ {t}_{m} = m {T}_{s} $ nerede yukarı örnekleme oranı (Daha sonra alt örnekleme ile ilgileneceğiz) $ q = \frac{M}{N} \geq 1 $bir ızgarayı kurtarmak için IDFT'ye bakarak ne yapılması gerektiği açıktır :
$$ 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}} $$
Şimdi bu eşleşmeyi yukarıdan enterpolasyon formülüyle yapmamız gerekiyor. Doğrusal bir dönüşüm olduğundan onu çarparak$ q $sabit ile ilgilenecek. Bunu da fark edebiliriz$ \forall m, \frac{m}{M} = \frac{{t}_{m}}{N T} $ dolayısıyla ayarlayarak:
$$ \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} $$
İtibaren $ N $ DFT'nin periyodikliği, enterpolasyon faktörü ile tek tip bir zaman ızgarası için son enterpolasyonu yazabiliriz. $ 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}} $$
Nerede $ \hat{X} \left[ k \right] $ olarak tanımlanır:
$$ \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} $$
Biz tam olarak ne yaptığını hangi upsample Yukarıdaki kodu.
Ya altörnek? DFT etki alanında kodun gösterdiği aynı sezgiyi kullanabiliriz . Bunun temel nedeni, Fourier Serisi katsayılarını kullanan enterpolasyonun, frekans etki alanındaki Dirichlet Çekirdeğinin periyodik eşdeğeri olan çarpımından başka bir şey olmamasıdır.$ \operatorname{sinc} \left( \cdot \right) $işlevi. Bu aynı zamanda$ \frac{1}{2} $faktör, atlama süreksizliği olan frekans alanında değeri 1 olan bir rektal ile çarptığımızda . Aslında Fourier Serileri, süreksizliklerdeki sıçramanın ortalama değerine yakınsar. Gittiğimizden beri$ 1 $ -e $ 0 $, atlamadaki değerin $ 0.5 $.
Dolayısıyla, yukarıdaki downsmaplign ve yukarı örnekleme kodu, Dirichlet Kernel'i girişin örnekleme frekansına, yukarı örnekleme durumunda ve aşağı örnek durumundaki çıktıya göre verilere uygular.
Alt örneklemenin başka bir yöntemi, örneklerin çıktı sayısının bir tamsayı faktörüne yukarı örnekleme olabilir. Sonra örnekleri almak için ondalık ayırmayı kullanın (Her ... örneği alın). 2, verilerin düşük hız ile örneklenen hız arasındaki frekansta enerjiye sahip olmadığı durum için eşleşecektir. Varsa, eşleşmezler.
MATLAB Kodu ekleyeceğim ...
Not : Bu cevap aynı zamanda Üst Örneklemeyi de kapsar . Lütfen Üst Örneklemeyle ilgili başka bir soru açmayı veya bunu genişletmeyi düşünün .