Dalam MATLAB, output dari fft
dan / atau ifft
fungsi sering membutuhkan pemrosesan tambahan sebelum dipertimbangkan untuk analisis.
Saya telah mendengar banyak pendapat berbeda tentang apa yang benar:
Scaling
Mathworks menyatakan bahwa
fft
danifft
fungsi didasarkan pada persamaan berikut:Penskalaan menurut panjang sinyal
Teman sebaya saya biasanya skala data dengan segera setelah pemrosesan
fft
.
(Kami tidak mempertimbangkanfft
datamentahsebelum penskalaan.)%% Lakukan fft
X_f = fft (x, n_sample, 1) / n_sample; % fft harus dinormalisasi dengan jumlah sampel dalam data. % Konvensi ini ditetapkan oleh pengembang perangkat lunak (Mathworks).Apakah ini benar?
- Jika demikian, mengapa
ifft
fungsi MATLAB berharap bahwa kita belum diskalakan oleh ? - Apakah ada
ifft
fungsi MATLAB atau opsi fungsi yang tidak secara otomatis skala oleh ?
Atau, apakah ada konvensi yang lebih baik yang harus kita gunakan dalam menempatkan ? Misalnya, menempatkan di dalam daripada , atau menempatkan di kedua persamaan, bukan ?1 / N 1 / √
fft
ifft
1/N- Jika demikian, mengapa
Penskalaan menurut periode pengambilan sampel
Saya telah mendengar bahwa fungsi
fft
danifft
mengasumsikan bahwa periode sampling , dan agar fungsi tersebut benar, hal-hal berikut perlu diterapkan:
Lihat tautan:
- Tautan 1 (lihat komentar untuk Matt Szelistowski oleh Dr Seis)
- Tautan 2 (lihat jawaban oleh Rick Rosson vs jawaban Dr Seis)
- Tautan 3 (lihat komentar oleh Matt (Pesan: 7/16) dan komentar oleh Poorya (14/16)
- Tautan 4 (lihat hal 10, slide [1,1])
- Tautan 5 (lihat hal 8 + 9) [tampaknya ia menggunakan konvensi terbalik untuk fft dan ifft].
Apakah ini benar?
Saya sangat jengkel karena saya tidak dapat menemukan persamaan DFT atau DTFT di Wikipedia yang termasuk periode pengambilan sampel.
Jawaban:
Apakah skala FFT maju 1 / N tergantung pada hasil yang Anda inginkan untuk analisis lebih lanjut: energi (mempertahankan identitas Parseval), atau amplitudo (mengukur tinggi atau volt, dll.).
Jika Anda ingin mengukur atau menganalisis energi, maka jangan skala dengan 1 / N, dan sinusoid yang lebih panjang dengan amplitudo yang sama akan menghasilkan hasil FFT yang lebih besar, sebanding dengan energi yang lebih besar dari sinyal yang lebih lama.
Sedikit lebih umum, jika Anda ingin mengukur atau menganalisis amplitudo, maka untuk mendapatkan sinusoid yang lebih panjang (sehingga dengan lebih banyak energi total pada amplitudo yang sama persis) untuk menghasilkan hasil FFT yang sama dengan sinyal yang lebih pendek, Anda perlu mengurangi Penjumlahan FFT dengan rasio yang sebanding dengan panjangnya. Rasio dapat berupa reference_length / N, yang kadang-kadang 1 / N jika gain input sistem adalah 1,0 untuk dimensi atau unit apa pun, termasuk dimensi interval waktu, yang Anda pilih untuk digunakan dalam analisis lebih lanjut. Anda perlu menurunkan secara proporsional karena DFT adalah penjumlahan: semakin Anda meringkas item yang serupa, semakin besar hasilnya.
Begitu. Energi atau amplitudo. Yang kamu inginkan
Sekarang jika Anda menurunkan FFT maju, maka Anda tidak harus skala terbalik sehingga IFFT (FFT (x)) == x. Atau lakukan sebaliknya.
1 / sqrt (N) untuk penskalaan menurut saya adalah untuk entah ketika seseorang membutuhkan simetri formal untuk beberapa bukti, atau ketika membangun semacam pipa perangkat keras di mana latensi dan / atau jumlah unit aritmatika / gerbang untuk DFT dan untuk IDFT harus identik. Tetapi Anda tidak mendapatkan pengukuran langsung baik dari energi atau amplitudo untuk semua jenis analisis teknik.
sumber
Konvensi penskalaan yang digunakan oleh Matlab umum di DSP. Anda juga bisa menggunakan DFT kesatuan di mana DFT dan IDFT diskalakan oleh faktor . Anda juga bisa menggunakan faktor1/Nuntuk DFT dan faktor1untuk IDFT. Selama Anda konsisten, itu tidak masalah (terlepas dari pertimbangan numerik, terutama ketika menggunakan implementasi titik tetap). Jadi tidak ada konvensi "yang lebih baik", hanya ada "konvensi", dan Anda hanya perlu menyetujui yang mana yang Anda gunakan.1 / N--√ 1 / N 1
Komentar
salah. Tidak ada yang mengatakan bahwa Anda harus menormalkan hasil FFT. Jika Anda ingin, Anda bebas untuk melakukannya.
Juga, FFT tidak menganggap apa-apa tentang periode sampling . Perhatikan bahwa DFT dapat digunakan untuk data yang sifatnya diskrit tanpa melibatkan sampel. Bergantung pada data Anda dan pada apa yang ingin Anda lakukan dengan hasilnya, Anda harus memperhitungkan T sesuai. Misalnya, jika Anda ingin menggunakan DFT (diimplementasikan oleh FFT) untuk memperkirakan transformasi Fourier waktu kontinu, Anda mendapatkan ekspresi berikut:T T
di mana adalah periode pengambilan sampel, N adalah panjang DFT, x ( t ) adalah sinyal waktu kontinu, dan X ( ω ) adalah transformasi Fourier waktu kontinu. Sisi kanan ( 1 ) hanya DFT dari sampel N x ( t ) , diskalakan oleh T , di mana kita mengasumsikan bahwa bagian yang relevan dari x ( t ) berada dalam kisaran t ∈ [ 0 , N T ]T N x ( t ) X( ω ) ( 1 ) N x ( t ) T x ( t ) t ∈ [ 0 , NT] . Rincian lebih lanjut tentang menggunakan DFT untuk mendekati transformasi Fourier waktu kontinu dapat ditemukan dalam jawaban ini .
sumber
terutama karena ini adalah pertanyaan tentang konvensi, saya tidak akan memperkuat konvensi konyol MATLAB dan hanya akan menjawab dengan konvensi atau konvensi yang benar dan tepat . yaitu pengindeksan MATLAB untuk DFT tidak benar dan tepat, tetapi saya cukup agnostik tentang yang mana dari tiga konvensi penskalaan umum.
juga, saya tidak membatasi atau 0 ≤ k < N , mereka dapat berupa bilangan bulat karena saya cukup fasis tentang arti mendasar dari Transformasi Fourier Diskrit: DFT dan Seri Diskrit Fourier adalah satu dan sama. DFT memetakan urutan periodik x [ n ] dengan periode N ke urutan periodik lain X [ k ] juga dengan periode N dan iDFT memetakannya kembali.0 ≤ n < N 0 ≤ k < N x [ n ] N X[ k ] N
jadi X [ k + N ] = X [ k ]
juga, lilitan melingkar dalam "domain waktu" ( ) atau "domain frekuensi" ( X [ k ] ) didefinisikan secara konsisten dengan semua konvensi:x [ n ] X[ k ]
W [ k ] ⊛ X [ k ] ≜ N - 1 ∑ i =
sehingga satu-satunya keuntungan dari satu konvensi lebih dari yang lain (dengan asumsi kedua konvensi itu valid) dapat mengenai kesederhanaan ekspresi beberapa teorema.
konvensi penskalaan paling umum untuk DFT:
memiliki keunggulan kesederhanaan mengenai konvolusi melingkar dalam "domain waktu"
tetapi ada faktor penskalaan yang harus Anda khawatirkan jika Anda berbelit-belit di "domain frekuensi" :
Teorema Parseval memiliki faktor penskalaan yang perlu dikhawatirkan juga.
dan teorema Dualitas:
konvensi penskalaan umum lainnya untuk DFT:
ia juga memiliki lebih banyak kesederhanaan mengenai konvolusi melingkar dalam domain frekuensi
tetapi ada faktor penskalaan yang harus Anda khawatirkan jika Anda terlibat dalam domain waktu :
Teorema Parseval memiliki faktor penskalaan yang perlu dikhawatirkan juga.
dan teorema Dualitas:
yang kesatuan skala konvensi untuk DFT identik di skala dengan inverse dan menjaga energi di seluruh transformasi atau invers transformasi:
konvolusi dalam domain waktu atau domain frekuensi memiliki faktor penskalaan yang sama untuk dikhawatirkan:
tetapi teorema Parseval tidak memiliki faktor penskalaan yang perlu dikhawatirkan.
teorema Dualitas juga tidak:
sumber
max(abs(X))
fungsi untuk menemukan di mana puncak spektral berada dan Anda lupa untuk mengurangi1
dari indeks yang dikembalikan dan Anda akan melakukan matematika di atasnya. ini masalah. dan yang menyedihkan pada saat itu. asal pengindeksan banyak berkaitan dengan " definisi DFT" seperti halnya penskalaan. itu ada hubungannya dengan pembukuan apa yang diperlukan atau tidak.