Filtraggio 50Hz usando un filtro notch in MATLAB


11

Ho letto molto su questo, ma non sono stato in grado di mettere insieme tutto con successo, quindi sto cercando aiuto.

Devo filtrare 50 Hz da un segnale. Sembra che le migliori opzioni siano un filtro notch o un filtro LMS, ma non ho una copia del rumore, quindi un filtro notch sembra essere la scelta migliore.

Non ho bisogno di frequenze normalizzate, poiché conosco la frequenza di campionamento (16kHz) e la durata è di 30 secondi. La larghezza di banda può essere abbastanza stretta, 49,5Hz ~ 50,5Hz dovrebbe andare bene.

Sembra che debba usare una combinazione di filtere iirnotch, ma non sono del tutto sicuro di come.

Se qualcuno riuscisse a mettere tutto insieme, lo apprezzerei molto. Grazie.


Voglio chiederti come funziona la simulazione del filtro autoregressivo su damping / redaman ???

Come definire 'x' nel programma sopra (dove 'x' è un segnale in ingresso) ... grazie

Risposte:


15

Non sono sicuro di cosa faccia Iirnotch, ma questo è come progettare manualmente il filtro Notch.

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);

Questo è esattamente quello che stavo cercando, grazie.

Semplice ed elegante. Capisco che più piccola è NotchWidth, minore sarà la larghezza della tacca, ma notchWidth si riferisce a una quantità concreta?
Lolo

@Lolo Non credo. L'ho appena scelto perché mi è sembrato un numero conveniente.
Phonon

8

Puoi semplicemente digitare help iirnotch e quindi vedere il seguente esempio:

% 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);  

Se si sostituisce il 60 con 50 Hz e quindi si fa:

Y = filter(b,a,X)

Dovrebbe funzionare (con X i tuoi dati)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.