Filtrado de 50 Hz utilizando un filtro de muesca en MATLAB

10

He leído mucho sobre esto, pero no he podido armar todo con éxito, así que estoy buscando ayuda.

Necesito filtrar 50 Hz de una señal. Parece que las mejores opciones son un filtro de muesca o un filtro LMS, pero no tengo una copia del ruido, por lo que un filtro de muesca parece ser la mejor opción.

No necesito las frecuencias normalizadas, ya que sé la frecuencia de muestreo (16 kHz), y la duración es de 30 segundos. El ancho de banda puede ser bastante ajustado, 49.5Hz ~ 50.5Hz debería estar bien.

Parece que necesito usar una combinación de filtery iirnotch, pero no estoy completamente seguro de cómo.

Si alguien puede unir todo esto, lo agradecería enormemente. Gracias.

Dororo
fuente
Quiero preguntar cómo funciona la simulación de filtro autorregresivo en amortiguamiento / redaman ???
Cómo definir 'x' en el programa anterior (donde 'x' es una entrada de señal) ... gracias

Respuestas:

14

No estoy seguro de lo que hace iirnotch, pero así es cómo diseñar el filtro de muesca a mano.

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
fuente
Eso es exactamente lo que estaba buscando, gracias.
Simple y elegante Entiendo que cuanto menor sea notchWidth, menor será el ancho de la muesca, pero ¿notchWidth se relaciona con una cantidad concreta?
Lolo
@Lolo, no creo que lo haga. Simplemente lo elegí porque parecía un número conveniente.
Phonon
7

Puede escribir help iirnotch y luego ver el siguiente ejemplo:

% 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 reemplaza el 60 con 50 Hz y luego lo hace:

Y = filter(b,a,X)

Debería funcionar (con X sus datos)


fuente