logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Filtracja sygnałów z pomiarów przy użyciu FPGA - eliminacja szybkozmiennych zakłóceń

_jta_ 20 Paź 2021 12:13 918 27
REKLAMA
  • #1 19665263
    _jta_
    Specjalista elektronik
    Mam sygnał z pomiarów wielkości, która zmienia się powoli, na który nakładają się szybkozmienny zakłócenia. Potrzebuję pomysłu na prosty (bo do zaimplementowania w FPGA z oszczędzaniem zasobów) sposób eliminacji tych zakłóceń.

    Można oczywiście zastosować flltr dolnoprzepustowy, i gdyby zakłócenia były przez cały czas, to byłby to pewnie najlepszy sposób. Ale spodziewam się raczej, że będą "paczki" zakłóceń z przerwami, w trakcie których mam niezakłócony sygnał - i wyodrębnienie sygnału z tych przerw usunie zakłócenia dużo lepiej, niż filtr dolnoprzepustowy.

    Czy takie sposoby filtrowania, z implementacją poprzez proste operacje z ograniczonymi zasobami, są gdzieś opisane?
  • REKLAMA
  • #2 19665408
    _lazor_
    Moderator Projektowanie
    Jak szybko zmienny sygnał? jeśli wchodzi w dziesiątki MHz to może koraliki ferytowe?
  • #3 19665429
    _jta_
    Specjalista elektronik
    Spodziewam się paczek zakłóceń o szerokim widmie - od dziesiątek Hz do dziesiątek MHz. ADC ma czas przetwarzania kilka us, i przypuszczam, że ma koraliki, jeśli tylko do czegoś pomagają - to jest sprzęt NI. Ale nie chodzi mi o rozwiązania sprzętowe (tu już NI zrobił, co mógł), tylko o algorytm filtrowania danych z ADC. Robiłem coś takiego, ale na komputerze - więc mogłem zebrać tysiące odczytów i potem filtrować - a tu trzeba "w biegu", i potrzebny jest algorytm, najlepiej coś przebadanego.
  • REKLAMA
  • #4 19666869
    Konto nie istnieje
    Poziom 1  
  • #5 19666947
    _jta_
    Specjalista elektronik
    Nie mam, i tylko zgaduję - opierając się na wcześniejszych próbach i wiedzy o warunkach, w jakich to ma działać - czego mogę się spodziewać.

    A poza tym zakłócenia mogą być różne - i sposób filtrowania ma wydobywać z danych to, co się da, w każdej możliwej sytuacji.

    Ale moje pytanie jest takie: czy jest jakiś taki sposób filtrowania, który gdzieś został opisany (np. w podręczniku, którego ja akurat nie znam)?
  • #6 19666950
    Konto nie istnieje
    Poziom 1  
  • #7 19666964
    _lazor_
    Moderator Projektowanie
    https://en.wikipedia.org/wiki/Adaptive_filter

    Ale na bazie czego ten filtr ma się zmieniać to musisz sobie sam odpowiedzieć, bez konkretnych danych nie dostanie konkretnych odpowiedzi.
  • #8 19667610
    jarek_lnx
    Poziom 43  
    Z nieliniowych kojarzę że jest coś takiego jak filtr medianowy (jeden z kolegów stosował) https://en.wikipedia.org/wiki/Median_filter

    Odnośnie liniowych filtrów dolnoprzepustowych to optymalnym filtrem do wygładzania przebiegu w dziedzinie czasu jest średnia ruchoma (nie ma powodu żeby koleje współczynniki filtru były różne) co powoduje że implementacja jest prostsza niż większości filtrów - można robić tylko jedno dodawanie i odejmowanie po przyjściu kolejnej próbki
  • #9 19667622
    Konto nie istnieje
    Poziom 1  
  • #10 19667854
    __Grzegorz__
    Poziom 30  
    _jta_ napisał:
    Spodziewam się paczek zakłóceń o szerokim widmie - od dziesiątek Hz do dziesiątek MHz. ADC ma czas przetwarzania kilka us, i przypuszczam, że ma koraliki, jeśli tylko do czegoś pomagają - to jest sprzęt NI. Ale nie chodzi mi o rozwiązania sprzętowe (tu już NI zrobił, co mógł), tylko o algorytm filtrowania danych z ADC. Robiłem coś takiego, ale na komputerze - więc mogłem zebrać tysiące odczytów i potem filtrować - a tu trzeba "w biegu", i potrzebny jest algorytm, najlepiej coś przebadanego.


    Z opisu wynika częstotliwość próbkowania maksymalnie rzędu setek kHz (1/kilka us).
    Jeżeli spodziewasz się zakłóceń rzędu kilku MHz, MUSISZ pozbyć się ich analogowo.
    W przeciwnym wypadku, "zaliasują" ci się one i nałożą na spróbkowany sygnał.
    I wtedy żadna obróbka nie pomoże... Będziesz miał śmieci, a nie dane.

    Przydałyby się "pewne" informacje:
    - pasmo sygnału użytkowego
    - częstotliwość próbkowania sygnału
    ...
  • #11 19667970
    _jta_
    Specjalista elektronik
    __Grzegorz__ napisał:
    Jeżeli spodziewasz się zakłóceń rzędu kilku MHz, MUSISZ pozbyć się ich analogowo.

    Według wszelkiego prawdopodobieństwa zadbał o to producent... pisałem o tym.

    Pasmo sygnału użytkowego - powiedzmy, do 2Hz; próbkowanie 125kHz, ale jest ze 20 kanałów, czyli każdy około 6kHz.

    Do dalszego przetwarzania mam procesor, ale nie chcę go obciążać obróbką takiej ilości danych.
  • REKLAMA
  • #12 19668215
    Konto nie istnieje
    Poziom 1  
  • #14 19668300
    Konto nie istnieje
    Poziom 1  
  • #16 19668399
    Konto nie istnieje
    Poziom 1  
  • #17 19668450
    __Grzegorz__
    Poziom 30  
    Musisz zrobić filtrowanie analogowe.
    Bez tego wszystkie sygnały z okolic n * Fs zawiną się ci na Twój użyteczny sygnał.

    Zakładając Fs = 6250Hz nie odróżnisz użytecznego sinusa 1Hz od śmieci podanych poniżej, a jest ich bardzo wiele do 1MHz...
    6249Hz, 6251Hz,
    12499, 12501,
    18749, 18751,
    ...
    n*F1-1, n*Fs+1

    Masz szczęście, że Fs/fmax ~= 3000, więc zwykły dwójnik RC 100kohm + 100nF dadzą tłumienie rzędu ponad 50dB dla Fs i problem załatwiony...
    dla 2Hz masz tłumienie jakieś 65mdB :) czyli w sumie nic...
  • #18 19668458
    _lazor_
    Moderator Projektowanie
    Kiedyś robiłem projekt na sprzęcie na sprzęcie od NI to jeszcze dochodzi pudło z kondycjonowaniem sygnału, bo nie za bardzo chcesz wpinać bezpośrednio sygnał z czujnika gdzie mówisz że są niewiadome zakłócenia... a w tym pudle można filtry dodać

    https://www.ni.com/en-us/shop/hardware/signal-conditioning-category.html#
  • #20 19668569
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #21 19669023
    _jta_
    Specjalista elektronik
    A może będą zakłócenia w postaci "paczek" o czasie trwania paru milisekund, powtarzających się co 10 milisekund? Myślisz, że mając 6000 sampli na sekundę nie można ich usunąć? Można, tylko pytanie, jak to zrobić bez użycia nadmiernych zasobów FPGA.

    atom1477 napisał:
    naukowcy powinni sami decydować co potrzebują do użycia

    A to chyba naukowcy zdecydowali... kilka lat temu. I ponieważ decydowało duże grono, to niełatwo o zmianę koncepcji.
  • #23 19669201
    _jta_
    Specjalista elektronik
    Rozumiem, że chodzi o implementację "przeciekającego całkowacza" (chyba tak by pasowało przetłumaczyć "leaky integrator"), w której oszczędza się na mnożeniach: zamiast mnożyć old_out przez 3/4 i do tego dodawać new_in 1/4, by dostać new_out, można policzyć new_out = old_out + (new_in - old_out)*1/4, co oszczędza jedno mnożenie, a na dodatek pozwala (dla α=1/4 i innych całkowitych potęg 1/2) zrobić je poprzez shift, czyli bez użycia układu mnożącego.

    No cóż, całkiem możliwe, że taki "całkowacz" będzie użyty jako element filtru, ale to jeszcze samo z siebie rozwiązaniem nie jest.
  • #24 19669320
    varaktor
    Poziom 18  
    _jta_ napisał:
    Mam sygnał z pomiarów wielkości, która zmienia się powoli, na który nakładają się szybkozmienny zakłócenia. Potrzebuję pomysłu na prosty (bo do zaimplementowania w FPGA z oszczędzaniem zasobów) sposób eliminacji tych zakłóceń.


    HDL Coder z pakietu Matlab generuje VHDL na podstawie wyklikanego filtra. Dodatkowo w pakiecie są narzędzie które potrafią dobrać szerokość sygnałów aby zachować zdefiniowaną precyzję takiego filtra.
    Altera/Intel w pakiecie Quartus dostarcza narzędzie, które potrafi wygenerować filtr na podstawie współczynników (np. z Matlaba).
  • #25 19669369
    Konto nie istnieje
    Poziom 1  
  • #26 19669519
    _jta_
    Specjalista elektronik
    varaktor napisał:
    HDL Coder z pakietu Matlab generuje VHDL na podstawie wyklikanego filtra

    A jakie filtry są do wyboru? Bo ja w bibliotece LabVIEW widziałem spory wybór, ale wyłącznie nie takie, jak trzeba. ;) Tam może być ten sam zestaw.

    atom1477 napisał:
    Najczęściej wystąpią zakłócenia ciągłe. Głównie przydźwięk sieci 50Hz i harmoniczne.

    Ciągłe jak ciągłe. Masz np. regulację fazową na tyrystorze/triaku - i zakłócenia 100x na sekundę, co 10ms, przez ułamek milisekundy.

    Coś podobnego daje także układ prostowniczy dużej mocy z kondensatorami. Może algorytm powinien uwzględniać te 100 Hz?

    atom1477 napisał:
    Akurat przy tak niskim próbkowaniu takie coś łatwo i bez zajmowania dużych zasobów można zrobić na uC.

    Ale próbkę dostaję co kilka mikrosekund - po kolei ze wszystkich wejść. A to już spore obciążenie procesora... Dodatkowy procesor do samego filtrowania?
  • #27 19669870
    Konto nie istnieje
    Poziom 1  
  • #28 19669936
    _jta_
    Specjalista elektronik
    atom1477 napisał:
    Od tego są akurat specjalne typu przetworników ADC. Stosowane w multiumetrach.

    Ale one są powolne - całkują po całym okresie sieci (albo i wielokrotności).

    atom1477 napisał:
    czekać na zapełnienie jakiegoś bufora i potem jechać wszystkie po całości (odpadnie narzut czasu na wchodzenie i wychodzenie do przerwania, narzut na wywoływanie funkcji, itp).

    Nie całkiem, bo procesor ma się zajmować także czym innym, i to może być dość krytyczne czasowo - trzeba by to podzielić na etapy.

    A przede wszystkim, potrzebny jest algorytm - dotąd chyba tylko jarek_lnx coś w tym kierunku podpowiedział.

Podsumowanie tematu

W dyskusji poruszono problem eliminacji szybkozmiennych zakłóceń z wolnozmiennego sygnału pomiarowego przy użyciu FPGA. Użytkownik poszukiwał efektywnego algorytmu filtrowania, który mógłby działać w czasie rzeczywistym, z ograniczonymi zasobami. Zasugerowano różne metody, w tym filtry dolnoprzepustowe, filtry medianowe oraz uśrednianie wykładnicze. Podkreślono znaczenie eliminacji zakłóceń na etapie analogowym przed przetwornikiem ADC, zwłaszcza w kontekście zakłóceń o wysokiej częstotliwości. Wskazano na model przetwornika NI-9205 oraz na potrzebę zastosowania odpowiednich filtrów antyaliasingowych. Dyskutowano również o możliwościach implementacji algorytmów w FPGA oraz o narzędziach, takich jak HDL Coder z pakietu Matlab, które mogą wspierać generację kodu VHDL.
Podsumowanie wygenerowane przez model językowy.
REKLAMA