Dlaczego mój filtr stop-band tłumi inne częstotliwości?


12

Oto mój kod dla dwutonowego sygnału, w którym używam pasma stop, aby usunąć wyższy ton, a następnie narysowałem przed (w kolorze niebieskim) i po (w kolorze czerwonym) w dziedzinie częstotliwości po splotie mojego sygnału ze współczynnikami filtra .

Jeśli umieścisz ten kod w Matlabie, zobaczysz wyraźnie, że wyższa częstotliwość została skutecznie usunięta przez filtr, ale z jakiegoś powodu amplituda niższej częstotliwości została zmniejszona o połowę, a im bardziej zwiększam # współczynniki filtra, im bardziej spłaszcza całą moją krzywiznę, dlaczego tak się dzieje? Jak mogę temu zapobiec, aby pasmo stop nie rozprzestrzeniało się na zewnątrz? Oto obraz i kod:

wprowadź opis zdjęcia tutaj

fPróbkowanie = 8000;
tSampling = 1 / fSampling;

t = 0: t Próbkowanie: 0,005;
F0 = 1000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25; „stop”);
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = fftshift (abs (xF));

wykres (fAxis, MagXF);
czekaj

yF = fft (yt, 64);
MagYF = fftshift (abs (yF));

wykres (fAxis, MagYF, 'r')

1
Filtrowanie pasmowoprzepustowe / pasmowoprzepustowe jest z natury niedoskonałe i zawsze wpływa na obszary spektrum, które chcesz zostawić w spokoju. Taka jest natura bestii.
Daniel R Hicks

1
Hmm ... czy są sposoby, aby temu przeciwdziałać? Lub inny stosunkowo prosty filtr, który byłby bardziej odpowiedni? Nie wiem dużo o filtrach wycinających, ale wiem, że są to naprawdę wąskie filtry ograniczające pasmo i że Matlab ma dla nich polecenia.
Zaubertrank

2
Tak jak powiedziałem, jest to nieodłączne. Projektowanie filtra jest zawsze kompromisem pod względem optymalizacji niektórych parametrów kosztem innych (i kosztem).
Daniel R Hicks

Odpowiedzi:


12

Filtry zawsze mają nieodłączne „odchylenie” w odpowiedzi częstotliwościowej, ponieważ praktycznie nie można zrealizować pasma przepustowego, które jest idealną funkcją prostokątną. W przypadku filtra dolnoprzepustowego punkt, w którym wielkość twojej odpowiedzi częstotliwościowej spada do -3dB, nazywa się pasmem pasmowym, a wszystko poza nim nazywa się pasmem stopu (technicznie wszystko poza częstotliwością narożną, ale weźmiemy częstotliwość narożna na poziomie -3dB). To, jak szybko twoje pasmo przenoszenia tłumi się poza pasmem przepustowym, zależy od długości filtra.

Jeśli spojrzysz na pasmo przenoszenia filtra, htzobaczysz, że spada on do -6dB przy 1000 Hz:

wprowadź opis zdjęcia tutaj

Ma więc sens, że moc spada o 6 dB po filtrowaniu, co widać na rysunku jako połowę amplitudy.

Gdybyś przejrzał dokumentację fir1używanej funkcji, również byś to zauważył (moje wyróżnienie):

B = fir1(N,Wn)projektuje Nfiltr cyfrowy FIR dolnoprzepustowy rzędu i zwraca współczynniki filtra w N+1wektorze długości B. Częstotliwość odcięcia Wn musi wynosić pomiędzy 0 < Wn < 1.0, co 1.0 odpowiada połowie częstotliwości próbkowania. Filtr Bjest rzeczywisty i ma fazę liniową. Znormalizowane wzmocnienie filtra przy Wn wynosi -6 dB.

Teraz, aby stworzyć ostrzejsze filtry, z odpowiedziami zbliżającymi się do prostokąta, będziesz musiał użyć filtrów IIR, które mają wiele problemów ze stabilnością itp., Ale zdecydowanie opcja. Tutaj możesz zobaczyć moją odpowiedź na kilka pomysłów dotyczących implementacji filtru IIR sekcji dyskretnej 2, drugiego rzędu, który daje bardzo ostre rogi. Przykładem jest filtr pasmowoprzepustowy, ale możesz przeczytać dokumenty dotyczące używanych tam funkcji i samodzielnie wdrożyć wersję dolnoprzepustową.


1

Filtr potrzebuje czasu, aby „zdecydować”, czy sygnał jest tylko w środku, czy poza przejściem filtra. Jednym z rozwiązań jest po prostu przesunięcie przejścia filtra od dowolnego interesującego sygnału, na przykład w połowie odległości między dwoma sygnałami testowymi, gdzie w twoim przypadku testowym jest bardzo mało sygnału do zniekształcenia w wyniku niedoskonałej decyzji.


0

Posługiwać się

ht = fir1(40,.5,'stop');

zamiast tego będziesz miał bardzo niskie tłumienie w F0 i bardzo wysokie tłumienie w F1.

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.