MATLAB:


11

MATLAB'da ve fftve / veya ifftfonksiyonların çıktıları genellikle analiz için değerlendirilmeden önce ek işlem gerektirir.

Neyin doğru olduğu konusunda birçok farklı görüş duydum:

  • ölçekleme

    Mathworks fftve ifftfonksiyonların aşağıdaki denklemlere dayandığını belirtir :

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN-
  • Sinyal uzunluğuna göre ölçeklendirme

    Akranlarım genellikle verileri işledikten hemen sonra ölçeklendirir . ( Ölçeklemeden önce ham verileri dikkate almayız.)1Nfft
    fft

    %% fft gerçekleştir
    X_f = fft (x, n_sample, 1) / n_sample; % fft, verilerdeki örnek sayısı ile normalleştirilmelidir. % Bu kural yazılım geliştiricisi (Mathworks) tarafından belirlendi.

    Bu doğru mu?

    1. Öyleyse, MATLAB ifftişlevi neden ölçeklenmemizi bekliyor ?1/N
    2. ifftOtomatik olarak ölçeklenmeyen bir MATLAB işlevi veya işlev seçeneği var mı?1/N

    Alternatif olarak, yerleştirilmesinde kullanmamız gereken daha iyi bir sözleşme var mı? Örneğin, yerleştirme olarak yerine ya da bir yerleştirme yerine bölgesinin her iki denklemlerde ?1 / N 1 / 1/N1/Nfftifft 1/N1/N1/N

  • Örnekleme dönemine göre ölçeklendirme

    Bunu duymuş fftve ifftişlevleri örnekleme dönemi farz ve fonksiyonları doğru olabilmesi için, şu uygulamak gerekir ki:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN-

Bağlantılara bakın:

  • Bağlantı 1 (Dr Seis'ten Matt Szelistowski'nin yorumuna bakın)
  • Bağlantı 2 (Rick Rosson'dan Dr Seis'in cevabına bakınız)
  • Bağlantı 3 (Matt'in yorumuna bakın (Mesaj: 7/16) ve Poorya'nın yorumu (14/16)
  • Bağlantı 4 (bkz. Sayfa 10, slayt [1,1])
  • Link 5 (bkz. Sf. 8 + 9) [Görünüşe göre fft ve ifft için ters konvansiyon kullanıyor].

Bu doğru mu?

Özellikle iğreniyorum çünkü Wikipedia'da örnekleme dönemini içeren herhangi bir DFT veya DTFT denklemi bulamıyorum.


2
BTW, kando sadece olduğu gibi söylüyor (MATLAB ile): ama MATLAB bu kablolu kongre (veya frekans bileşeni genliği bin 1. içine DC koymak söylemek zorundakbin içinek+1)nutz lanet sürücüleri beni !!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
robert bristow-johnson

Yanıtlar:


6

İleri FFT'yi 1 / N'ye göre ölçekleyip ölçeklememe, daha fazla analiz için istediğiniz sonuca bağlıdır: enerji (Parseval'ın kimliğini koruma) veya genlik (yükseklik veya volt ölçümü, vb.).

Enerjiyi ölçmek veya analiz etmek istiyorsanız, 1 / N ile ölçeklendirmeyin ve aynı genlikte daha uzun bir sinüzoid, daha uzun bir sinyalin daha büyük enerjisiyle orantılı olarak daha büyük bir FFT sonucu üretir.

Biraz daha yaygın olarak, genlikleri ölçmek veya analiz etmek istiyorsanız, daha kısa bir sinyalle aynı FFT sonucunu üretmek için daha uzun bir sinüzoid (böylece aynı genlikte daha fazla toplam enerji ile) elde etmek için, Uzunluğa orantılı bir oranla FFT toplamı. Bu oran referans_uzunluk / N olabilir; bu, sistem giriş kazancı, daha fazla analizinizde kullanmayı seçtiğiniz zaman aralığı boyutları da dahil olmak üzere hangi boyutlar veya birimler için 1.0 ise bazen 1 / N olabilir. Bir DFT bir özet olduğu için orantılı olarak ölçeklendirmeniz gerekir: benzer öğeleri ne kadar çok toplarsanız, sonuç o kadar büyük olur.

Yani. Enerji veya genlik. Hangisini istersin?

Şimdi ileri FFT'yi ölçeklendirirseniz, tersi IFFT (FFT (x)) == x olacak şekilde ölçeklendirmemelisiniz. Ya da tam tersini yapın.

Ölçekleme için 1 / sqrt (N), ya bir kanıt için resmi bir simetriye ihtiyaç duyduğunda ya da DFT için gecikme ve / veya aritmetik birimlerin / geçitlerin ve çünkü IDFT'nin aynı olması gerekir. Ancak, herhangi bir tipik mühendislik analizi için ne iyi bir doğrudan enerji ölçümü ne de genlik elde edersiniz.


Eğer "Eğer enerjiyi ölçmek istiyorsanız, o zamana ölçekli değil derken ..." Ben tarafından ölçeğinde gerek olmazdı 1 / 1/N dönüşümün üniter olmasını ve enerjiyi korumasını sağlar? Yoksaetkili bir şekilde1/Nveren enerjiyi elde etmek için tüm sinyali kareye almam gerektiğindenmi? Eğer bu doğruysa, ancak neolduğuile ölçekli spektrum1/1/N1/N aslında bana o zaman gösteriliyor? 1/N
LCsa

Ayrıca, "böylece aynı genlikte daha fazla enerji ile" derken ... "frekans" demek istemez miydiniz?
LCsa

7

Matlab tarafından kullanılan ölçeklendirme kuralı DSP'de yaygındır. Ayrıca kullanabilirsiniz üniter DFT'yi DFT ve IDFT hem kat ölçeklenir . Ayrıca faktörünü kullanabilirsiniz1/NDFT ve faktör1IDFT için. Tutarlı olduğunuz sürece gerçekten önemli değil (özellikle sabit nokta uygulamaları kullanırken sayısal hususlar dışında). Yani "daha iyi" sözleşmeler yoktur, sadece "sözleşmeler" vardır ve sadece hangisini kullandığınıza karar vermeniz gerekir.1/N-1/N-1

Yorum

% fft, verilerdeki örnek sayısı ile normalleştirilmelidir.
% Bu kural yazılım geliştiricisi (Mathworks) tarafından belirlendi.

Hata. Kimse FFT'nin sonucunu normalleştirmeniz gerektiğini söylemiyor . İsterseniz bunu yapmakta özgürsünüz.

Ayrıca FFT, örnekleme periyodu hakkında hiçbir şey üstlenmez . DFT'nin, herhangi bir örnekleme yapılmaksızın doğası gereği ayrı olan veriler için kullanılabileceğini unutmayın. Verilerinize ve sonuçla ne yapmak istediğinize bağlı olarak, T'yi buna göre dikkate almalısınız . Örneğin, sürekli zamanlı Fourier dönüşümüne yaklaşmak için DFT'yi (FFT tarafından uygulanan) kullanmak isterseniz, aşağıdaki ifadeyi alırsınız:TT

(1)X(2πkN-T)TΣn=0N--1x(nT)e-j2πkn/N-,0k<N-

burada örnekleme periyodudur, N DFT uzunluğudur, x ( t ) sürekli zaman sinyalidir ve X ( ω ) sürekli zaman Fourier dönüşümüdür. Sağ taraftaki ( 1 ) sadece DFT olan K örneklerinin x ( t ) göre ölçeklenir, T biz ilgili bölümü olduğunu varsayalım, x ( t ) aralığı olan t [ 0 , N , T ]TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]. Sürekli zamanlı Fourier dönüşümünü tahmin etmek için DFT'yi kullanma hakkında daha fazla ayrıntı bu cevapta bulunabilir .


2
Downvote ne için? Lütfen yorum yapın.
Matt L.

1
genellikle gizli oyla oy kullanıyorum, ama bu sefer bir istisna yapacağım. birinin DFT ile ne yaptığına bağlı olarak, kesinlikle diğerlerinden daha iyi " sözleşmeler " vardır . (ancak hiçbir koşul her koşulda diğerlerinden daha iyi değildir .)
robert bristow-johnson

5

özellikle bu konvansiyonla ilgili bir soru olduğundan MATLAB'ın gülünç kurallarını pekiştirmeyeceğim ve sadece doğru ve doğru konvansiyon veya konvansiyonlarla cevap vereceğim . yani MATLAB'ın DFT için endekslemesi doğru ve uygun değildir, ancak üç yaygın ölçekleme kuralından hangisi konusunda oldukça agnostikim.

Ayrıca, ben am değil kısıtlayan ne de 0 k < N i Ayrık Fourier Dönüşümü temel anlamı Transform hakkında oldukça fazla faşizan çünkü onlar herhangi tamsayılar olabilir: DFT ve Ayrık Fourier Serileri diğeri olan aynı. DFT , N periyodu olan bir periyodik sekans x [ n ] ile başka bir periyodik sekans X [ k ] 'da N periyodu ile eşleştirir ve iDFT bunu tekrar eşler.0n<N-0k<N-x[n]N-X[k]N-

yani X [ k + N ] = X [ k ]

x[n+N-]=x[n] nZ
X[k+N-]=X[k] kZ

ayrıca, "zaman alanı" ( x [ n ] ) veya "frekans alanı" ( X [ k ] ) içindeki dairesel kıvrım tüm kurallarla tutarlı bir şekilde tanımlanır:x[n]X[k]

W [ k ] X [ k ] N - 1 i =

h[n]x[n]Σben=0N--1h[ben]x[n-ben]=Σben=0N--1x[ben]h[n-ben]
W[k]X[k]Σben=0N--1W[ben]X[k-ben]=Σben=0N--1X[ben]W[k-ben]

bu yüzden bir sözleşmenin diğerine göre tek avantajı (her iki sözleşmenin de geçerli olduğu varsayılarak), bazı teoremlerin ekspresyonunun basitliği ile ilgili olabilir.


DFT için en yaygın ölçeklendirme kuralı:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

"zaman alanında" dairesel evrişim ile ilgili basitlik avantajına sahiptir

DFT{h[n]x[n]}=H[k]X[k]

ancak "frekans alanında" dolaşıyorsanız endişelenmeniz gereken bir ölçeklendirme faktörü vardır :

iDFT{W[k]X[k]}=1Nw[n]x[n]

Parseval teoreminin de endişelenecek bir ölçeklendirme faktörü vardır.

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

ve Dualite teoremi:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

DFT için diğer yaygın ölçeklendirme sözleşmesi:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

frekans alanında dairesel evrişim ile ilgili daha basit

iDFT{W[k]X[k]}=w[n]x[n]

ancak zaman etki alanında katılıyorsanız endişelenmeniz gereken bir ölçeklendirme faktörü vardır :

DFT{h[n]x[n]}=1NH[k]X[k]

Parseval teoreminin de endişelenecek bir ölçeklendirme faktörü vardır.

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

ve Dualite teoremi:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

üniter DFT ölçeklendirme kongre çapında ters ve koruyan enerji ile ölçekleme aynıdır dönüştürmek ya da tersi dönüşümü:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

zaman alanında veya frekans alanında konvolüsyon, endişelenmek için aynı ölçeklendirme faktörüne sahiptir:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

ancak Parseval teoreminin endişelenecek bir ölçeklendirme faktörü yoktur.

n=0N1|x[n]|2=k=0N1|X[k]|2

Dualite teoremi de yoktur:

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


DFT kurallarından bahsederken, genellikle sadece ölçeklendirme faktörleri ile ilgilidir, indeksleme sorunu ile ilgili değildir. Ortak DSP sözleşmesi olduğunu söylediğimde dizine eklemekten bahsettiğimi düşünüyorsanız, bu bir yanlış anlamadır. Tabii ki ölçeklemeye değindim; indeksleme tamamen ilgisizdir, çünkü DFT'nin tanımıyla (ve ölçeklemenin) hiçbir ilgisi yoktur .
Matt L.

MATLAB'da, max(abs(X))spektral bir zirvenin nerede olduğunu bulmak için işlevi kullandığınızda 1ve döndürülen dizinden çıkarmayı unuttuğunuzda ve üzerinde matematik yapacağınız zaman, lanet olası bir "sorun değil" değildir . bu bir sorun. ve üzücü biri. indeksleme orijini, ölçeklendirme kadar "DFT'nin tanımı " ile de ilgilidir. defter tutmanın gerekli olup olmadığı ile ilgilidir.
robert bristow-johnson

Ben olabilirdim, ama bu sefer değil :) Ama yine de, dizine eklemeye verdiğiniz önemi kabul etmiyorum, ama bunun kişisel olduğunu takdir ediyorum. Yine, aşağı oy yok çünkü cevaba verdiğiniz zamanı takdir ediyorum.
Matt L.
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.