Filtern von 50 Hz mit einem Sperrfilter in MATLAB

10

Ich habe viel darüber gelesen, konnte aber nicht alles erfolgreich zusammenfügen, deshalb suche ich Hilfe.

Ich muss 50 Hz aus einem Signal filtern. Es sieht so aus, als wären die besten Optionen entweder ein Sperrfilter oder ein LMS-Filter, aber ich habe keine Kopie des Rauschens, daher scheint ein Sperrfilter die beste Wahl zu sein.

Ich brauche keine normalisierten Frequenzen, da ich die Abtastfrequenz (16 kHz) kenne und die Dauer 30 Sekunden beträgt. Die Bandbreite kann ziemlich eng sein, 49,5 Hz ~ 50,5 Hz sollten in Ordnung sein.

Es sieht so aus, als müsste ich eine Kombination aus filterund verwenden iirnotch, aber ich bin mir nicht ganz sicher, wie.

Wenn jemand das alles zusammenbringen kann, würde ich es sehr schätzen. Vielen Dank.

Dororo
quelle
Ich möchte fragen, wie die autoregressive Filtersimulation auf Dämpfung / Redaman ???
Wie man 'x' im obigen Programm definiert (wobei 'x' ein Signaleingang ist) ... danke

Antworten:

14

Ich bin nicht sicher, was iirnotch macht, aber so wird der Notch-Filter von Hand entworfen.

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
quelle
Genau das habe ich gesucht, danke.
Einfach und elegant. Ich verstehe, dass die Breite der Kerbe umso kleiner ist, je kleiner die Kerbbreite ist, aber bezieht sich die Kerbbreite auf eine konkrete Menge?
Lolo
@Lolo Ich glaube nicht. Ich habe es nur ausgewählt, weil es wie eine bequeme Nummer schien.
Phonon
7

Sie können einfach help iirnotch eingeben und dann das folgende Beispiel sehen:

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

Wenn Sie die 60 durch 50 Hz ersetzen und dann Folgendes tun:

Y = filter(b,a,X)

Es sollte funktionieren (mit X Ihre Daten)


quelle