Filtrando 50Hz usando um filtro de entalhe no MATLAB


10

Eu li muito sobre isso, mas não consegui juntar tudo com sucesso, então estou procurando por ajuda.

Eu preciso filtrar 50 Hz de um sinal. Parece que as melhores opções são um filtro de entalhe ou um filtro LMS, mas eu não tenho uma cópia do ruído, portanto um filtro de entalhe parece ser a melhor opção.

Não preciso das frequências normalizadas, pois conheço a frequência de amostragem (16kHz) e a duração é de 30 segundos. A largura de banda pode ser bem pequena, 49,5Hz ~ 50,5Hz deve estar bem.

Parece que preciso usar uma combinação de filtere iirnotch, mas não sei bem como.

Se alguém puder juntar tudo isso, eu apreciaria muito. Obrigado.


Eu quero perguntar como a simulação de filtro autoregressivo no amortecimento / redaman ???

Como definir 'x' no programa acima (onde 'x' é uma entrada de sinal) ... obrigado

Respostas:


14

Não sei ao certo o que o iirnotch faz, mas é assim que projetamos o filtro de entalhe manualmente.

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

É exatamente o que eu estava procurando, obrigado.

Simples e elegante. Entendo que quanto menor a largura de entalhe, menor será a largura do entalhe, mas a largura de entalhe está relacionada a uma quantidade concreta?
Lolo

@Olo Eu não acho que sim. Eu escolhi porque parecia um número conveniente.
Phonon

7

Você pode digitar help iirnotch e ver o seguinte exemplo:

% 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 você substituir os 60 por 50 Hz e, em seguida, faça:

Y = filter(b,a,X)

Deve funcionar (com X seus dados)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.