Filtrage à 50 Hz à l'aide d'un filtre coupe-bande dans MATLAB

11

J'ai beaucoup lu à ce sujet, mais je n'ai pas réussi à tout assembler avec succès, donc je cherche de l'aide.

J'ai besoin de filtrer 50 Hz à partir d'un signal. Il semble que les meilleures options soient un filtre coupe-bande ou un filtre LMS, mais je n'ai pas de copie du bruit, donc un filtre coupe-bande semble être le meilleur choix.

Je n'ai pas besoin de normaliser les fréquences, car je connais la fréquence d'échantillonnage (16 kHz) et la durée est de 30 secondes. La bande passante peut être assez étroite, 49,5 Hz ~ 50,5 Hz devrait convenir.

Il semble que je doive utiliser une combinaison de filteret iirnotch, mais je ne sais pas trop comment.

Si quelqu'un peut rassembler tout cela, je l'apprécierais grandement. Merci.

Dororo
la source
Je veux demander comment la simulation de filtre autorégressif sur amortissement / redaman ???
Comment définir «x» dans le programme ci-dessus (où «x» est une entrée de signal) ... merci

Réponses:

15

Je ne sais pas exactement ce que fait iirnotch, mais voici comment concevoir le filtre coupe-bande à la main.

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
la source
C'est exactement ce que je cherchais, merci.
Simple et élégant. Je comprends que plus la largeur de l'entaille sera petite, plus la largeur de l'encoche sera petite, mais est-ce que notchWidth se rapporte à une quantité de béton?
Lolo
@Lolo Je ne pense pas. Je viens de le choisir parce qu'il semblait être un numéro pratique.
Phonon
8

Vous pouvez simplement taper help iirnotch, puis voir l'exemple suivant:

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

Si vous remplacez le 60 par 50 Hz et faites ensuite:

Y = filter(b,a,X)

Cela devrait fonctionner (avec X vos données)


la source