Bir numunenin kesri ile bir sinyal dairesel olarak nasıl kaydırılır?


22

Vardiya teoremi diyor :

Çarpma bir yan lineer faz bir tam sayı için m, a tekabül dairesel kayma çıkışı : değiştirilir indis yorumlanır, modulo N (yani periyodik olarak).xn e2πbenN-nmXkXkXk-m

Tamam, bu iyi çalışıyor:

plot a

keyfi 9 örnekli sinyal

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

sinyal, frekans alanında 3 örnek tarafından değiştirildi

Beklediğim gibi 3 örnek tarafından değiştirildi.

Bunu bir numunenin kesirleriyle değiştirmek için de yapabileceğinizi düşünmüştüm , ancak denediğimde sinyalim hayali hale geliyor ve orijinali gibi değil:

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 karmaşık üstel ile çarpmadan sonra sinyal

Bunu hiç beklemiyordum. Bu, 3.5 numune tarafından değiştirilen gerçek bir dürtü ile sarsılmaya eşdeğer değil mi? Öyleyse dürtü hala gerçek olmalı ve sonuç hala gerçek olmalı mı? Ve orijinal şekliyle hemen hemen aynı şekle sahip olmalı, ancak içten içe geçmeli mi?


İşte, çift / tek uzunluktaki gerçek / karmaşık sinyaller için doğru modülasyonu hesaplayan ve bunları kesirli geciktiren bir Matlab Dosya Değişimi gönderimi: mathworks.com/matlabcentral/fileexchange/7886-fshift
Ahmed Fasih

Yanıtlar:


14

IFFT’in değiştirilen çıktısının gerçek olmasını istiyorsanız, frekans alanındaki faz bükümünün / dönüşünün verilerin yanı sıra konjuge simetrik olması gerekir. Bu, verilen faz eğimi için karmaşık exp () üssünüze uygun bir ofset ekleyerek sağlanabilir, böylece üst (veya negatif) yarım, modulo 2 Pi'nin fazı, FFT açıklıktaki alt yarıyı yansıtır. . Kompleks üstel kaydırma fonksiyonu ayrıca -N / 2'den N / 2'ye indekslenerek eşlenik olarak simetrik hale getirilebilir.

Öyle ki, açıklıkta eşlenik simetrik olmak için açıklıktaki 2 Pi dönüşünün tam bir tam katını tamamlayan faz bükümleri veya spiraller için uygun ofset sıfırdır.

Konjuge simetrik faz büküm vektörü ile sonuç, tam sayı olmayan değişimler için dairesel bir Sinc enterpolasyonu olarak sonuçlanmalıdır.

OP ile detaylandırma:

K = [0, 1, 2, 3, 4, 5, 6, 7, 8] seçiminiz, üstel bir üstel kompleks üretiyor:

asimetrik kompleks üstel 0.5 örnek kayma girişimi, kesikli çizgi gibi hayali kısım

Bunun yerine k = [0, 1, 2, 3, 4, -4, -3, -2, -1] kullanırsanız, üstel bir Hermite-simetrik kompleks elde edersiniz:

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

Kesikli çizgi olarak hayali kısım ile 0.5 örnek kayması için üstel Hermite-simetrik kompleks

ve şimdi aynı üstel formülü 0,5 veya 3,5 numuneye kaydırmak için kullandığınızda, gerçek bir sonuç elde edersiniz:

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 ve 3,5 numunelerle kayma


Aha! Bunun yerine, k = [0, 1, 2, 3, 4]kullanmalıyımk = [0, 1, 2, -2, -1]
endolith

@endolith / hotpaw2, Başka bir deyişle, tüm zaman alanı örneklerinin endekslenmesi ile mi ilgili?
TheGrapeBeyond,

1
Kutu 0 çevresindeki simetri, N / 2 bir tamsayı olmasa bile N / 2 etrafında simetri sağlayacaktır.
hotpaw2

1
Matlab Dosya Değişiminde doğru modülasyonu uygulayan bir fonksiyon buldum: mathworks.com/matlabcentral/fileexchange/7886-fshift 👏!
Ahmed Fasih

1
Bu aynı zamanda karmaşık sinyaller için de geçerli mi?
Leo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.