Cara membuat filter kompensasi distorsi

11

Saya membuat channelizer yang terdiri dari mixer kompleks, decimator CIC , dan filter kompensasi / penipisan FIR. Filter FIR akhir dapat, jika penting, diimplementasikan sebagai lebih dari satu filter.

Pertanyaan saya adalah, bagaimana cara mendesain filter sehingga mengimbangi respons frekuensi sangat datar dari filter CIC? Apakah Anda membuat respons frekuensi yang Anda inginkan dengan menghitung kebalikan dari respons CIC dan kemudian menjalankannya melalui FFT terbalik untuk mendapatkan respons impuls?

Seperti yang Anda lihat, meskipun masalah khusus saya berkaitan dengan filter CIC, pertanyaan saya sebenarnya adalah bagaimana Anda membuat segala jenis filter kompensasi distorsi.

Terima kasih atas waktunya.

Jim Clay
sumber
3
Filter yang tujuannya untuk mengkompensasi distorsi sebelumnya dalam sistem komunikasi sering disebut equalizer ; yang mungkin memberi Anda lebih banyak informasi untuk dibaca saat ini. Jenis umum adalah equalizer nol-memaksa (yang bukan yang Anda inginkan jika sistem Anda mengkompensasi memiliki nol dalam respons frekuensi) dan equalizer minimum mean-squared error (MMSE).
Jason R
@JasonR Saya kenal dengan MMSE Adaptive Equalizers dalam konteks saluran kompensasi equalizer yang diarahkan keputusan, tapi saya ragu itu yang Anda maksud. Apakah Anda akan melatih equalizer? Saya kira intinya adalah bagaimana Anda menentukan apa kesalahannya.
Jim Clay
MMSE hanya mengacu pada kriteria yang diperjuangkan oleh equalizer; itu bisa adaptif atau non-adaptif. Jika Anda tahu fungsi transfer sistem untuk mengkompensasi, dan fungsi autokorelasi dari setiap noise tambahan, dan keduanya invarian waktu, maka Anda dapat memperoleh "the" equalizer MMSE, yang akan diperbaiki seiring waktu. Solusi adaptif dapat digunakan ketika informasi itu tidak diketahui secara tepat atau berubah seiring waktu (yang cukup umum).
Jason R
Filter adaptif sering menyertakan mode pelatihan di mana sejumlah simbol yang diketahui dikirim melalui sistem, memungkinkan penerima membiarkan filternya menyatu pada set koefisien yang baik. Setelah pelatihan, juga umum untuk memasuki fase pelacakan, di mana operasi yang diarahkan pada keputusan digunakan untuk pembaruan terus menerus dari keran filter. Sebagai alternatif, dalam rezim di mana SNR dan ISI "cukup baik," mode diarahkan keputusan dapat digunakan dari awal sebagai skema akuisisi buta, melewatkan fase pelatihan.
Jason R
Menemukan bahan bacaan tentang hal ini yang dapat diakses secara matematis agak sulit. Saya suka Haykin's Adaptive Filter Theory , tetapi butuh upaya untuk memotong matematika (dan Anda perlu beberapa latar belakang aljabar linier yang solid). Ini cukup rumit sehingga jika Anda tidak menggunakannya secara teratur, Anda harus pergi dan memoles topik pemrosesan sinyal statistik terlebih dahulu.
Jason R

Jawaban:

9

Berikut ini membahas kompensasi CIC dan bukan teknik "distorsi" umum. Tetapi ini adalah metode langsung untuk "mengganti" "distorsi" yang tidak bervariasi. Jika respons frekuensi diketahui, kebalikan dari frekuensi dapat digunakan untuk mengkompensasi. Contoh-contoh seperti filter CIC, di mana filter yang buruk dapat digunakan karena kompleksitas yang berkurang, dikompensasi kemudian dengan rantai sinyal. Dalam contoh ini respons frekuensi diketahui dan kebalikannya dapat digunakan. Catatan, dengan filter multi-rate Anda hanya ingin menggunakan spektrum "dapat digunakan" setelah penghancuran.

Secara umum, untuk mengkompensasi filter CIC, kebalikan dari respons filter CIC dapat digunakan untuk menghasilkan filter kompensasi. CIC memiliki respons (lihat referensi [r2] atau [r3])

H(ω)=|ssayan(ωD/2)ssayan(ωM./2)|N

Di mana D adalah keterlambatan diferensiasi, M adalah laju penipisan, dan N adalah urutan filter (jumlah filter bertingkat). Kebalikannya dapat ditentukan sebagai

H(ω)=|ssayan(ωM./2)ssayan(ωD/2)|N

Setelah kami mendapatkan respons frekuensi filter kompensasi, kami cukup memilih panjang filter FIR yang kami inginkan. Panjang FIR adalah spesifik aplikasi. Jelas semakin lama filter FIR kompensasi yang lebih baik.

Berikut ini adalah plot kompensasi langsung ini.

Berikut ini adalah kode Python untuk membuat respons dan plot frekuensi.

import numpy as np
from numpy import sin, abs, pi
import pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

ssayanc-1

[r1] Altera, "Memahami filter kompensasi CIC"

[r2] R. Lyons, "Memahami Pemrosesan Sinyal Digital", edisi ke-2, Prentice Hall, Upper Saddle River, New Jersey, 2004

[r3] R. Lyons, "Memahami Filter Sisir Integrator Bertingkat"

Christopher Felton
sumber
Ref 1 hebat, tetapi menggunakan terminologi yang berbeda (M = stage delay, di mana Anda menggunakan D. R = Laju reduksi, di mana Anda menggunakan M) jadi butuh beberapa saat untuk melihat kesalahan: Anda menggunakan WM / 2, Altera menentukan pi F / R. Setelah plot Excel cepat, saya percaya versi Altera adalah yang benar.
Alan Campbell
@AlanCampbell Jika Anda memplot persamaan di atas (yang saya lakukan dalam cuplikan kode) Anda akan melihat tidak ada kesalahan. Yang tidak saya sebutkan secara eksplisit dalam persamaan adalah keuntungan . Perhatikan dalam snip kode saya menghapus gain. Jika Anda menjalankan snip kode dan memodifikasi M=8dan N=9menciptakan plot yang sama dengan referensi 1. Saya menggunakan nomenklatur yang lebih dekat dengan referensi 2.
Christopher Felton
2

Saya pikir jawaban Christopher adalah jawaban yang bagus. Saya pikir saya akan menambahkan satu untuk kita tipe pemalas / penipu.

Saat menggali di sekitar Matlab's fdatool (Desain Filter & Alat Analisis) saya menemukan bahwa ia dapat merancang dan memodelkan baik CIC dan filter sinc invers, di mana filter sinc invers adalah filter kompensasi distorsi CIC.

Anda menghasilkan filter CIC dengan langsung ke halaman "Buat filter multi-rate" (tombol di sebelah kiri dalam versi R2011b) dan menentukan filter CIC. Anda kemudian dapat mengatur semua parameter yang Anda inginkan, seperti tingkat interpolasi / penipisan, jumlah kaskade (Matlab menyebutnya "bagian"), dll.

Anda membuat filter sinc terbalik dengan pergi ke halaman "Desain filter" (halaman yang default alat ketika dimulai), dan menentukan "Inverse Sinc Lowpass" dari menu tarik turun Lowpass. Anda kemudian dapat mengatur berbagai parameter untuk itu. Ini memiliki beberapa parameter unik di bagian Opsi dialog, termasuk "p", yang sesuai dengan jumlah kaskade (eksponen sinc).

Namun, desain filter invers tulus tidak sepenuhnya memuaskan, karena melakukannya dengan benar sepertinya bukan contoh melakukan perhitungan matematika daripada mencari tahu di mana band pass saya, apa yang terkulai CIC pada saat itu, dan kemudian merancang filter yang dibatalkan secara kasar keluar terkulai itu. Karena filter CIC saya memiliki empat kaskade, saya akan berpikir bahwa saya perlu mengatur "p" menjadi empat, tetapi cara itu terlalu dikompensasi ketika saya melakukan itu. Saya akhirnya meninggalkan "p" pada 1, nilai default.

Alat ini benar-benar bersinar ketika saya menyimpan kedua filter dalam sesi saya, dan kemudian pergi ke manajer filter dan mengalirkannya untuk melihat respons frekuensi secara keseluruhan. Ini sangat membantu, dan mudah dilakukan.

Jim Clay
sumber
0

Tanpa menduplikasi respons di sini, silakan lihat

cara membuat filter kompensasi CIC

yang menunjukkan solusi 3 tap yang sangat sederhana untuk kompensasi CIC.

Ini khusus untuk CIC atau aplikasi apa pun untuk Sinc terbalik yang diperlukan (seperti sebelum konversi D / A).

Untuk mengkompensasi distorsi transversal umum (yang dapat direplikasi dengan filter transversal sebagai lawan distorsi noise dinamis) saya akan mengambil pendekatan menggunakan persamaan Wiener Hopf untuk menghasilkan filter kompensasi menggunakan pendekatan Least Squared Error, idealnya menggunakan urutan pelatihan jika tersedia untuk membandingkan diinginkan dengan respons aktual dan melatih equalizer. Untuk aplikasi yang menunjukkan ini dengan kode sumber yang digunakan lihat:

Mengkompensasi respons frekuensi Loudspeaker dalam sinyal audio

Dan Boschen
sumber