Mengapa filter stop-band saya menipiskan frekuensi lain?

12

Berikut adalah kode saya untuk sinyal dua-kencang, di mana saya menggunakan stop-band untuk menghapus nada yang lebih tinggi dan kemudian merencanakan sebelum (berwarna biru) dan setelah (berwarna merah) di domain frekuensi setelah menggabungkan sinyal saya dengan koefisien filter. .

Jika Anda memasukkan kode ini ke Matlab, Anda dapat dengan jelas melihat bahwa frekuensi yang lebih tinggi telah berhasil dihapus oleh filter, namun untuk beberapa alasan amplitudo dari frekuensi yang lebih rendah telah dipotong dua, dan semakin saya meningkatkan # koefisien filter, semakin ia hanya meratakan seluruh kurva saya, mengapa ini terjadi? Dan bagaimana saya bisa mencegahnya sehingga stop-band tidak merambat ke luar? Ini gambar dan kodenya:

masukkan deskripsi gambar di sini

fSampling = 8000;
tSampling = 1 / fSampling;

t = 0: tSampling: 0,005;
F0 = 1000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25, 'stop');
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = fftshift (abs (xF));

plot (fAxis, MagXF);
tahan

yF = fft (yt, 64);
MagYF = fftshift (abs (yF));

plot (fAxis, MagYF, 'r')
Zaubertrank
sumber
1
Penyaringan bandpass / bandstop pada dasarnya tidak sempurna dan akan selalu memengaruhi area spektrum yang ingin Anda tinggalkan sendiri. Itu sifat binatang itu.
Daniel R Hicks
1
Hmm ... adakah cara untuk mengatasi ini? Atau filter lain yang relatif sederhana yang lebih cocok? Saya tidak tahu banyak tentang filter takik tetapi saya tahu bahwa itu adalah filter band-stop yang sangat sempit dan bahwa Matlab memiliki perintah untuk mereka.
Zaubertrank
2
Seperti yang saya katakan, itu melekat. Merancang filter selalu merupakan trade-off dalam hal mengoptimalkan beberapa parameter dengan mengorbankan yang lain (dan dengan mengorbankan biaya).
Daniel R Hicks

Jawaban:

12

Filter selalu memiliki "roll-off" yang melekat dalam respons frekuensi mereka, karena Anda tidak bisa secara praktis mewujudkan pass-band yang merupakan fungsi persegi panjang yang sempurna. Untuk filter low-pass, titik di mana besarnya respons frekuensi Anda turun ke -3dB disebut pass-band dan semuanya di luar disebut stop-band (secara teknis, semua yang berada di luar frekuensi sudut, tetapi kami akan mengambil frekuensi sudut menjadi level -3dB). Seberapa cepat respons frekuensi Anda melemahkan melampaui pass-band tergantung pada panjang filter.

Jika Anda melihat respons frekuensi filter htAnda, Anda akan melihat bahwa itu turun ke -6dB pada 1000 Hz:

masukkan deskripsi gambar di sini

Jadi masuk akal bahwa daya turun sebesar 6dB setelah penyaringan, yang Anda lihat pada gambar Anda sebagai separuh dalam amplitudo.

Jika Anda telah melihat dokumentasi untuk fir1fungsi yang Anda gunakan, Anda akan menyadari ini juga (penekanan milik saya):

B = fir1(N,Wn)mendesain Nfilter digital FIR lowpass urutan pertama dan mengembalikan koefisien filter dalam N+1vektor panjang B. Frekuensi cut-off Wn harus antara 0 < Wn < 1.0, dengan yang 1.0 sesuai dengan setengah laju sampel. Filter Bini nyata dan memiliki fase linier. Keuntungan normal filter pada Wn adalah -6 dB.

Sekarang untuk membuat filter yang lebih tajam, dengan respons yang mendekati kotak, Anda harus menggunakan filter IIR, yang datang dengan sejumlah masalah stabilitas, dll., Tapi jelas merupakan pilihan. Anda dapat melihat jawaban saya di sini untuk beberapa ide tentang penerapan filter IIR bagian 2 bentuk diskrit yang memberikan sudut yang sangat tajam. Contohnya ada untuk filter band-pass, tetapi Anda dapat membaca dokumen untuk fungsi yang digunakan di sana dan mengimplementasikan versi low-pass sendiri.

Lorem Ipsum
sumber
1

Dibutuhkan waktu untuk filter untuk "memutuskan" apakah sinyal hanya di dalam atau di luar transisi filter. Salah satu solusinya adalah dengan hanya memindahkan transisi filter dari sinyal apa pun, seperti setengah di antara dua sinyal uji Anda, di mana, dalam kasus pengujian Anda, hanya ada sedikit sinyal yang terdistorsi oleh keputusan yang tidak sempurna.

hotpaw2
sumber
0

Menggunakan

ht = fir1(40,.5,'stop');

sebagai gantinya, dan Anda akan memiliki redaman sangat rendah di F0, dan atenuasi sangat tinggi di F1.

masukkan deskripsi gambar di sini

Telaclavo
sumber