Ambil operasi penyaringan band-pass frekuensi-domain sederhana di bawah ini. . .
NFFT = 128;
x = randn(NFFT,1);
H = zeros(NFFT,1);
H(10:20) = 1;
y = ifft(H.*fft(x), 'symmetric');
Ini memberikan output nyata karena saya menggunakan flag simetris konjugat untuk operasi ifft.
Saya ingin fungsi yang mengembalikan versi simetris konjugat H, jadi saya tidak harus bergantung pada opsi simetris bawaan dalam ifl Matlab. NFFT dapat berupa bilangan bulat positif. Ini bisa disebut sesuatu seperti ini. .
H(10:20) = 1;
H = MakeConjSym(H);
Jawaban:
Konjugasi berarti simetris
yaitu tanda bagian imajiner berlawanan ketikax < 0
FFT dari sinyal nyata adalah konjugat simetris. Separuh spektrum adalah frekuensi positif, dan separuh lainnya adalah negatif. Koefisien negatif adalah konjugat dari positif.
Jadi jika Anda melakukan pemfilteran, amplop Anda harus melakukan frekuensi positif dan frekuensi negatif yang sesuai, sehingga bit imajiner dibatalkan.
Dalam contoh Anda, H hanya melakukan setengah. Itulah sebabnya output memiliki bit imajiner di dalamnya. Yang Anda inginkan adalah
sumber
Anda hanya harus memastikan itu
dan ituH0 bernilai nyata.
sumber
Menggunakan jawaban lain saya punya fungsi MATLAB tertulis untuk melakukan apa yang Anda butuhkan:
Seperti disebutkan dalam kode, MATLAB Coder tidak mendukung IFFT simetris sehingga diperlukan fungsi khusus yang dikodekan untuk melakukan ini jika kompilasi kode adalah tujuannya. Kode yang disediakan harus mendukung FFT panjang genap dan ganjil.
Format terlihat sedikit lebih baik pada intinya .
sumber