Memfilter 50Hz menggunakan filter takik di MATLAB

11

Saya sudah banyak membaca tentang ini, tetapi belum berhasil menyatukan semuanya dengan sukses, jadi saya mencari bantuan.

Saya perlu menyaring 50 Hz dari sinyal. Sepertinya pilihan terbaik adalah filter takik atau filter LMS, tapi saya tidak memiliki salinan suara sehingga filter takik tampaknya menjadi pilihan terbaik.

Saya tidak perlu frekuensi dinormalisasi, karena saya tahu frekuensi sampling (16kHz), dan durasinya 30 detik. Bandwidth bisa sangat ketat, 49.5Hz ~ 50.5Hz harus baik-baik saja.

Sepertinya saya perlu menggunakan kombinasi dari filterdan iirnotch, tapi saya tidak sepenuhnya yakin bagaimana caranya.

Jika seseorang dapat menyatukan ini semua, saya akan sangat menghargainya. Terima kasih.

Dororo
sumber
Saya ingin bertanya bagaimana simulasi filter autoregressive pada redaman / redaman ???
Bagaimana mendefinisikan 'x' dalam program di atas (di mana 'x' adalah input sinyal) ... terima kasih

Jawaban:

15

Saya tidak yakin apa yang dilakukan iirnotch, tetapi ini adalah cara mendesain filter takik dengan tangan.

fs = 20000;             % sampling rate
f0 = 50;                % notch frequency
fn = fs/2;              % Nyquist frequency
freqRatio = f0/fn;      % ratio of notch freq. to Nyquist freq.

notchWidth = 0.1;       % width of the notch

% Compute zeros
notchZeros = [exp( sqrt(-1)*pi*freqRatio ), exp( -sqrt(-1)*pi*freqRatio )];

% Compute poles
notchPoles = (1-notchWidth) * notchZeros;

figure;
zplane(notchZeros.', notchPoles.');

b = poly( notchZeros ); %  Get moving average filter coefficients
a = poly( notchPoles ); %  Get autoregressive filter coefficients

figure;
freqz(b,a,32000,fs)

% filter signal x
y = filter(b,a,x);
Phonon
sumber
Itulah tepatnya yang saya cari, terima kasih.
Sederhana dan elegan. Saya mengerti bahwa semakin kecil notchWidth, semakin kecil lebar notch, tetapi apakah notchWidth terkait dengan kuantitas beton?
Lolo
@Lolo, saya rasa tidak. Saya baru saja mengambilnya karena sepertinya angka yang pas.
Phonon
8

Anda bisa mengetikkan bantuan iirnotch dan kemudian lihat contoh berikut:

% Design a filter with a Q-factor of Q=35 to remove a 60 Hz tone from 
% system running at 300 Hz.
Wo = 60/(300/2);  BW = Wo/35;
[b,a] = iirnotch(Wo,BW);  

Jika Anda mengganti 60 dengan 50 Hz dan kemudian lakukan:

Y = filter(b,a,X)

Itu harus bekerja (dengan X data Anda)


sumber