Wednesday 8 November 2017

Ruchome średnie pobieranie próbek


To pytanie ma już odpowiedź tutaj. I mam 2 zestawy danych w Matlab, że muszę sprecyzować przeciwko sobie - jeden na xaxis i jeden na yaxis Dane dla każdego zestawu zebrano przy użyciu innej metody, więc częstotliwość próbkowania jest znacznie różne i dopóki nie dam tej samej ilości punktów danych w obu zestawów nie można wykreślić jeden z innymi. Its dość proste do downsample danych w Matlab przy użyciu funkcji downsample Matlab. The próbkowania wynosi 1 5s i częstotliwość próbkowania B jest 0 1s udało mi się pomyślnie użyć downsample jako downsample B, 15,10, aby go uruchomić w tym samym czasie -3s, co oznacza coś w moich danych, więc muszę go uruchomić w tym punkcie i być na Próbki pobierania próbek 1 5. Teraz jednak zastanawiałem się, czy istnieje metoda, która pozwoliła mi przejąć średnio 15 punktów, zamiast zbierać jeden punkt co 15 punktów, zmniejszając próbę, jak to zrobiłem, po prostu wybiera każdy 15 pkt I. Chciałabym jednak, aby średnia 1 5 punktów dla mnie zamiast Czy jest jakiś sposób na to. I napisał for pętli dla prostego mniejszego wektora, aby sprawdzić, czy mógłbym to zrobić dla A 1 2 3 4 Chciałbym kondensować dane tak, że A ma tylko 2 wpisy , tak że średnio A 1 i A 2, a następnie A 3 i A 4. To jednak nie działa tak, jak chcę, bo nie chcę, żeby przeciętnie A 2 i A 3 chcę, aby pierwsze 2 wpisy, przeciętnie je, a następnie kolejne 2 wpisy, a następnie przeciętnie je tak. Na ktoś help. asked Jan 8 15 w 10 42.marked jako duplikat przez Shai matlab Użytkownicy z matlab badge może pojedynczo zamknąć matlab pytania jako duplikaty i otwórz je ponownie w razie potrzeby 8 stycznia 15 w 15 02. To pytanie zostało zadane przed i już udzielono odpowiedzi Jeśli te odpowiedzi nie odpowiedzą w pełni na Twoje pytanie, zadaj nowe pytanie. Ahh tak Przepraszam, że spróbowałem wyszukać istniejące odpowiedzi pytania Myślę, że moje słowa wyszukiwania różniły się od tytułu, chociaż Maheen Siddiqui 8 stycznia 15 w 10 49.Upsampling próbkowania i próbkowania Discrete-time Mo dulation. The celem tego laboratorium jest pogłębienie zrozumienia przez uczniów zasad modulacji modulowanej dyskretnie, demodulacji, pobierania próbek i pobierania próbek. Pobieranie próbek i pobieranie próbek. W tej części laboratorium będziesz eksperymentować z pobieraniem próbek w górę iw dół przez czynnik 3.Pierwszy plik pobierz plik i wpisz load hw wierszu polecenia Matlab To spowoduje załadowanie zmiennej hw obszarze roboczym Matlab. Startup Simulink i budowanie modeli pobierania próbek w górę iw dół. Zauważ, że próba pobierania próbek wymaga dwóch bloków przetwarzania 1 modulacji z okresowym impulsem Pociąg i 2 usuwanie próbek zerowych. Łatwym sposobem na modulowanie przez sekwencję jest zdefiniowanie sekwencji w obszarze roboczym Matlaba, a następnie doprowadzenie go do modelu przy użyciu bloku Sygnał z obszaru roboczego. Oto niektóre kody do rozważenia. 3 Factor for up i pobieranie próbki N długość hp zeros N, 1 Zdefiniuj wektor wszystkich zer P1 MN 1 Ustaw każdą trzecią próbkę na jedną. Biblioteka bloków operacji przetwarzania sygnałów w bibliotece blastrów DSP zawiera blok Downsample, który usuwa zero próbek Wygląda jak to. Upróbkowanie składa się z dwóch operacji 1 wstawiania zera i 2 filtrów dolnoprzepustowych w celu usunięcia obrazów. Ta biblioteka bloków operacji przetwarzania sygnałów w bibliotece bloków DSP zawiera blok Upsample, który wstawia zerami Jest to tak. o projektowaniu filtrów dolnoprzepustowych za pomocą funkcji Matlab remez. Poniżej znajduje się przykładowy model Simulink Górna gałąź nie pobiera próbek, a dolna gałąź nie pobiera próbek. Uwaga w próbkach pobierania próbek w górę iw dół należy zachować ostrożność, aby ustawić szybkość próbkowania w każdym block Jeśli jest dostępny, ustaw czas próbkowania w blokach filtrów na -1 Następnie filtry będą odziedziczyć ich próbki z poprzedniego bloku. W przeciwnym razie należy ustawić czas próbkowania wyraźnie. W tym modelu dodano kilka bloków Signal To Workspace aby przechwycić różne sygnały. W oknie dialogowym Parametry symulacji, ustaw czas rozpoczęcia na 0 i czas zatrzymania na N-1, gdzie N jest długością sygnału wejściowego h. Również w kategorii opcji Solver ustaw wartość T ype to Fixed-step. Run symulacja spektrum i sekwencji domeny czasowej trzech sygnałów h, hpd, hdown Napisz wyjaśnienie tego, co widzisz Czy dwa bloki przetwarzania używane do funkcji pobierania próbek w dół zgodnie z oczekiwaniami Działki Turn takie jak te Poniżej przedstawiono spektrum i sekwencje domeny czasowej Pierwsze kilka próbek obliczonych tylko przy użyciu modelu Simulink abovepare widma i sekwencji domeny czasowej trzech sygnałów h, hpu, hup Napisz wyjaśnienie co widzisz Czy dwa bloki przetwarzania używane do pobierania próbek w górę zgodnie z oczekiwaniami Skręć wykresy, jak te pokazane poniżej przy zapisie up. Explain jak zaprojektował filtr dolnoprzepustowy do upsampling Jakie były krawędzie pasma przejściowego Jaki był zysk filtra. Poniżej przedstawiono widma i sekwencje domeny czasowej pierwsze kilka próbek obliczono tylko przy użyciu modelu Simulink powyżej. Jak pokazano powyżej, sekwencja domenowa w paśmie upampled przechodzi przez próbki oryginalnych sygnałów To osiąga się u śpiewać zysk 3 w filtrze dolnoprzepustowym Możesz zobaczyć wzmocnienie trzech w dziedzinie częstotliwości Zauważ, że filtr dolnoprzepustowy spowoduje opóźnienie sygnału wzbudzonego do relatywnie do pierwotnego sygnału Na powyższym rysunku opóźnienie było usunięto. Dowiedzenie modulacji i demodulacji. Pobierz plik Każdy komputer wyposażony w multimedia z standardowymi pakietami oprogramowania powinien móc odtwarzać ten plik audio Spróbuj tego Rozpoznajesz, co kobieta czyta. Tak można odczytać dane wav do programu Matlab, wpisując. To powoduje załadowanie trzech zmiennych do użytkownika Obszar roboczy Matlab y to dane audio, fs to częstotliwość próbkowania 11025 w tym przypadku, a nbits to liczba bitów używanych do reprezentowania każdej próbki w y. Widmo y jest takie, jak pokazano poniżej. widać, y zawiera znaczną częstotliwość, aż do częstotliwości dyskretnej 0 5, co odpowiada częstotliwości 11025 częstotliwości 2 Hz w połowie częstotliwości próbkowania. nośnik częstotliwość częstotliwości dyskretnej 0 2, a następnie przeprowadzenie synchronizacji demodulacji i pobierania próbkowania w celu przywrócenia spektrum do jego pierwotnego kształtu. Aby uniknąć aliasingu, y musi zostać wzbogacony przed modulowaniem. Należy pamiętać, że w dyskretnym czasie ograniczenie na nośniku częstotliwość jest wtedy, gdy te częstotliwości są dyskretnymi potrzebami czasowymi w jednostkach radów Jeśli wolisz używać jednostek, które są spójne z sposobem, w jaki generujemy nasze działki, dzielmy nierówność powyżej przez współczynnik 2 pi, co prowadzi do następującego ograniczenia na częstotliwości nośnej. Użyj współczynnika wzmocnienia 3.What jest najwyższa częstotliwość między -0 5 i 0 5 po upsampling przez 3.What jest najwyższa częstotliwość między -0 5 i 0 5 w modulowanych signal. Will upsampling przez 3 uniknąć aliasingu w modulowanym sygnale. Dwa kroki w demodulacji synchronicznej to 1 modulowanie mnożące przez nośnik i 2 filtr dolnoprzepustowy w celu usunięcia składowych podwójnej częstotliwości. Jaka jest najwyższa częstotliwość po modulacji jonowy, ale przed filtrem dolnoprzepustowym Czy występuje zjawisko aliasingu. Jakie są krawędzie pasma przejściowego i wzmocnienie filtru dolnoprzepustowego, którego używałeś do demodulacji. Czyni demodulowany i nie próbkowany sygnał dźwiękowy tak samo jak oryginalny sygnał Nawiasem mówiąc, jeśli chcesz napisać sygnał z pliku wav do pliku wav, aby go wysłuchać, wpisz następujące polecenie w wierszu polecenia Matlab. Zmień odpowiedzi na powyższe pytania i wykonaj następujące czynności, jak poniżej przedstawiające model i widmo Przykład co widać w różnych punktach na dole tej strony. Model Simulink całego kompletnego systemu może wyglądać tak. Widma kilku pośrednich sygnałów wyglądają tak: Copyopy 2008, przy użyciu atrybutu Contribiting Authors Cite Administrator zasobów 2006, 28 czerwca Pobieranie próbek próbkowania próbkowania i modulacji dyskretnej Pobrane 07 stycznia 2017 r. Z bezpłatnych materiałów kursowych witryny sieci Web USU OpenCourseWare Niniejsza praca jest licencjonowana na licencji Creative Commons License. wspomnieć należy o nieskończonym filtrze odpowiedzi impulsowych IIR, a nie o filtrze odpowiedzi impulsowej FIR firmy FIR używanym teraz Jest więcej, ale na pierwszy rzut oka filtry FIR są implementowane jako wyraźne splify i filtry IIR z równaniami. filtr Używam dużo w mikrokontrolerach jest pojedynczym biegunowym filtrem dolnoprzepustowym Jest to cyfrowy odpowiednik prostego analogowego filtru RC Dla większości zastosowań będą miały lepsze właściwości niż filtr pola, którego używasz Większość zastosowań filtru pudełkowego, który ja napotkane są wynikiem, że ktoś nie zwraca uwagi w klasie przetwarzania sygnału cyfrowego, a nie w wyniku potrzeby ich szczególnych cech Jeśli chcesz po prostu osłabić wysokie częstotliwości, które znasz są hałas, jeden biegun filtr dolnoprzepustowy jest lepszy Najlepszym sposobem do wdrożenia cyfrowo w mikrokontrolerze jest zwykle. FILT - FILT FF NEW - FILT. FILT jest kawałkiem stanu trwałego Jest to jedyna trwała zmienna yo musisz obliczyć ten filtr NEW to nowa wartość, którą filtr jest aktualizowany za pomocą iteracji FF jest frakcją filtru, która dostosowuje ciężkość filtra Spójrz na ten algorytm i widzę, że dla FF 0 filtr jest nieskończenie ciężki od czasu wyjściowego nigdy nie zmienia się Dla FF 1, to naprawdę nie ma filtra, ponieważ wynik po prostu następuje na wejściu Wartości użyteczne są w między Na małych systemach wybierzesz FF, aby być 1 2 N, dzięki czemu mnożenie przez FF może być dokonane jako przesunięcie w prawo N bitów Na przykład, FF może wynosić 1 16, a mnożenie przez FF, a więc przesunięcie w prawo o 4 bity. W przeciwnym razie ten filtr potrzebuje tylko jednego odejmowania, a jeden dodano, chociaż liczby muszą zazwyczaj być szersze niż wartość wejściowa bardziej na precyzję liczbową w odrębnej sekcji poniżej. Zwykle odczyty AD są znacznie szybsze niż są potrzebne i stosuje się dwa z tych filtrów kaskadowych Jest to cyfrowy odpowiednik dwóch filtrów RC w serii, a tłumienie o oktawę o 12 dB powyżej częstotliwości rolloff Jednak w przypadku odczytów AD zwykle bardziej trafne jest przejrzenie filtru w domenie czasowej przez rozważenie odpowiedzi krokowej To informuje, jak szybko Twój system będzie widzieć zmianę, gdy coś mierzysz zmiany. Aby ułatwić projektowanie tych filtrów, które tylko używam mojego programu FILTBITS Ty określasz liczbę bitów przesuwnych dla każdego FF w kaskadowych seriach filtrów i oblicza odpowiedź kroku i inne wartości W rzeczywistości zazwyczaj uruchamiam to za pośrednictwem mojego skrypt PLOTFILT Uruchamia to plik FILTBITS, który tworzy plik CSV, a następnie rzutuje na plik CSV Na przykład tutaj jest wynikiem PLOTFILT 4 4.Te dwa parametry PLOTFILT oznaczają, że zostaną dwa kaskadowe filtry typu opisanego powyżej Wartości 4 wskazać liczbę bitów przesunięcia, aby zrealizować mnożenie przez FF W tym przypadku dwa wartości FF mają w tym przypadku wartość 1 16. Czerwony ślad to odpowiedź na jednostkę kroku i jest najważniejszą sprawą, na przykład na przykład kapelusz, jeśli dane wejściowe zmieniają się natychmiast, wyjście połączonego filtra osiądzie do 90 nowej wartości w 60 iteracjach Jeśli potrzebujesz około 95 czasu osadzania, musisz poczekać około 73 iteracji, a dla 50 czasu rozstrzygania tylko 26 iteracji. zielony ślad pokazuje wyjście z jednego spike pełnej amplitudy To daje pewien pomysł na losowe tłumienie hałasu Wygląda na to, że żadna próbka nie spowoduje więcej niż 2 5 zmian na wyjściu. Błękitny ślad ma dać subiektywne uczucie co ten filtr działa z białym szumem To nie jest rygorystyczny test, ponieważ nie ma gwarancji, jaka była zawartość losowych liczb pobranych jako białe szumy dla tego uruchomienia PLOTFILT To tylko daje poczucie, ile to będzie zgniatane i jak gładkie jest. PLOTFILT, być może FILTBITS i wiele innych użytecznych rzeczy, zwłaszcza dla rozwoju oprogramowania PIC jest dostępne w oprogramowaniu PIC Development Tools na mojej stronie Software downloads. Added about numeryczna dokładność. Zobacz z komentarzy, a teraz nowa odpowiedź, że istnieje zainteresowanie dyskutowaniem o liczbie bitów potrzebnych do wdrożenia tego filtra Zauważ, że pomnożenie przez FF spowoduje utworzenie nowych bitów FF New FF poniżej punktu binarnego Na małych systemach FF jest zwykle wybrany jako 1 2 N, tak że to pomnożenie jest rzeczywiście realizowane przez prawo przesunięcia N bitów. FILT jest zatem zwykle liczbą całkowitą stałej Uwaga, że ​​nie zmienia to żadnej matematyki z punktu widzenia procesora , jeśli filtrujesz 10-bitowe odczyty AD i N 4 FF 1 16, potrzebujesz 4 bitów ułamkowych poniżej 10-bitowych odczytów liczb całkowitych Jednym z najbardziej popularnych procesorów jest wykonywanie 16-bitowych operacji całkowitych z powodu odczytów 10-bitowych AD sprawa, nadal możesz wykonać dokładnie takie same 16-bitowe operacje całkowite, ale zaczynaj od odczytów AD przesuniętych o 4 bity Procesor nie zna różnicy i nie potrzebuje wykonywania matematyki na całych 16-bitowych liczbach całkowitych, czy sprawdzasz je być 12 4 stała str oint lub true 16-bitowe liczby całkowite 16 0 stały punkt. Ogólnie trzeba dodać N bitów do każdego bieguna filtra, jeśli nie chcemy dodać hałasu z powodu reprezentacji liczbowej W powyższym przykładzie drugi filtr dwóch musiałby mieć 10 4 4 18 bitów, aby nie zgubić informacji W praktyce na 8-bitowej maszynie oznacza to, że używasz 24 bitowych wartości Technicznie tylko drugi biegun dwóch wymagałby szerszej wartości, ale dla uproszczenia oprogramowania zazwyczaj używam tej samej reprezentacji, ten sam kod dla wszystkich biegunów filtra. Zawsze piszę podprogram lub makro, aby wykonać jedną operację na biegunie filtra, a następnie zastosować do każdego bieguna. Czy podprogram lub makro zależy od tego, czy cykle czy pamięć programu są ważniejsze w danym projekcie Tak czy inaczej, używam pewnego stanu, aby przejść NOWOŚĆ do makro podprogramu, który aktualizuje plik FILT, ale ładuje się do tego samego stanu scratch NEW był w To ułatwia stosowanie wielu biegunów, ponieważ aktualizacja FILT jednego bieguna jest NOWA z następna strona Kiedy podprogram jest użyteczny, gdy po drodze znajdzie się wskaźnik po FILT, który jest aktualizowany bezpośrednio po FILT po wyjściu W ten sposób podprogram automatycznie uruchamia kolejne filtry w pamięci, jeśli jest wywoływany wielokrotnie Z makrem nie potrzebujesz wskaźnika, ponieważ przechodzisz w adresie, aby działać na każdym iteracji. Przykłady kodu. Jest to przykład makra, jak opisano powyżej dla PIC 18.A oto jest podobne makro dla PIC 24 lub dsPIC 30 lub 33. Te przykłady są implementowane jako makra przy użyciu mojego preprocesora assemblera PIC, który jest bardziej zdolny niż jeden z wbudowanych obiektów makr. clabacchio Inną kwestią, o której powinienem wspomnieć jest wdrożenie oprogramowania układowego Możesz napisać pojedynczy biegun filtra po niskiej przepustowości, a następnie zastosować go wielokrotnie W rzeczywistości zwykle pisać taką podprogram, aby wziąć wskaźnik w pamięci do stanu filtra, a następnie go wyprzedzeniem wskaźnik, dzięki czemu łatwo można było z łatwością zadzwonić do wieloliniowych filtrów Olin Lathrop 20 kwietnia 12 w 15 03.1 bardzo dziękuję za odpowiedzi - wszystkie postanowiłem użyć tego filtru IIR, ale ten filtr nie jest używany jako Filtr standardowy LowPass, ponieważ muszę przeanalizować średnie wartości liczników i porównać je w celu wykrycia zmian w pewnym zakresie, ponieważ te wartości mają bardzo różne wymiary w zależności od sprzętu, który chciałem przeciętnie, aby móc reagować na te urządzenia konkretne zmiany automatycznie sensslen 21 maja 12 w 12 06.Jeśli można żyć z ograniczeniem mocy dwóch liczb pozycji do przeciętnej, tj. 2,4,8,16,32 itd., dzielenie można łatwo i skutecznie zrobić na niskiej wydajności mikro bez poświęconego podziału, ponieważ można to zrobić jako przesunięcie bitowe Każde prawo przesunięcia jest jedna moc dwóch eg. Op myślał, że miał dwa problemy, dzieląc się PIC16 i pamięci na jego pierścień bufora Ta odpowiedź pokazuje, że dzielenie nie jest trudne Wprawdzie nie rozwiązuje problemu pamięci, ale system SE pozwala na częściowe odpowiedzi, a użytkownicy mogą wziąć coś z każdej odpowiedzi na siebie, a nawet edytować i połączyć inne odpowiedzi s Ponieważ niektóre inne odpowiedzi wymagają operacji dzielenia, są podobnie niekompletne, ponieważ nie pokazują, jak skutecznie osiągnąć to na PIC16 Martin 20 kwietnia 12 w 13 01.There jest odpowiedź na prawdziwy przeciętny filtr aka boxcar filtr z mniej wymagań pamięci, jeśli nie t mind downsampling To s nazywany kaskadowym integratorem-filtr grzebieniowy CIC Pomysł polega na tym, że masz integrator, który odbywa się w różnych okresach czasu, a kluczowym urządzeniem oszczędzającym pamięć jest to, że poprzez pobieranie próbek, nie musisz przechowywać wigilii wartość życiowa integratora Może być zaimplementowana za pomocą następującej pseudokodowej. Twoja efektywna średnia długość ruchu to decymacjaStandakturaFaktora, ale musisz zachowywać tylko stany miar Próbkowanie Oczywiście można uzyskać lepszą wydajność, jeśli twój stateize i decimationFactor są uprawnieniami 2, dzielenie i reszta operatorów są zastępowane przez przesunięcia i maski - i. Postscript Zgadzam się z Olinem, że zawsze należy rozważyć proste filtry IIR przed średnim ruchem filtra Jeśli nie potrzebujesz częstotliwości-nulls z filtrem bokserskim, 1-biegunowy lub 2-biegunowy filtr dolnoprzepustowy będzie prawdopodobnie działał prawidłowo. Z drugiej strony, jeśli filtruje się do celów decymacji przy wysokim współczynniku próbkowania i uśrednia go do wykorzystania w procesie o niskim współczynniku, to filtr CIC może być tylko tym, czego szukasz, zwłaszcza, jeśli można użyć streszczenia 1 i uniknąć ringbuffer łącznie z tylko jedną poprzednią wartością integratora. Istnieją pewne pogłębione analizy matematyki za pomocą pierwszego ord er IIR, który Olin Lathrop już opisał na temat wymiany stosu przetwarzania sygnałów cyfrowych zawiera wiele ładnych zdjęć Równanie dla tego filtru IIR. Ta możliwość może być zaimplementowana przy użyciu tylko liczb całkowitych i nie podział przy użyciu następującego kodu może potrzebować trochę debugowania, wpisywał z pamięci pamięć. Filtr ten przybliża średnią ruchową ostatnich próbek K, ustawiając wartość alfa na 1 K Zrób to w poprzednim kodzie, określając BITS na LOG2 K, tzn. dla K 16 zestaw BITS na 4, dla K 4 Ustaw BITS na 2, itd. I'll zweryfikować kod tutaj wymienione, jak tylko dostanę zmiany i edytować tę odpowiedź, jeśli potrzebne. jeszcze jedno-biegunowy filtr dolnoprzepustowy średniej ruchome, z Częstotliwość cutoff CutoffFrequency Bardzo prosty, bardzo szybki, działa świetnie i prawie nie ma nad głową pamięci. Upewnij się, że wszystkie zmienne mają zasięg poza funkcją filtru, z wyjątkiem przekazywanych w newInput. Note Jest to filtr pojedynczego etapu Wiele etapów może być połączonych kaskadowo w celu zwiększenia ostrość filtr Jeśli używasz więcej niż jednego etapu, będziesz musiał dostosować DecayFactor w odniesieniu do częstotliwości odcięcia, aby zrekompensować. I oczywiście wszystko czego potrzebujesz to te dwie linie umieszczone w dowolnym miejscu, nie potrzebują własnej funkcji Ten filtr ma czas ramp-up przed średnią ruchu oznacza wartość sygnału wejściowego Jeśli musisz pominąć ten czas rampy, możesz zainicjować MovingAverage tylko do pierwszej wartości newInput zamiast 0 i mam nadzieję, że pierwsza nowa wartość wejściowa nie jest większa. CutoffFrequency SampleRate ma zakres od 0 do 0 5 DecayFactor jest wartością między 0 a 1, zwykle blisko 1.Single-precyzyjne pływaki są wystarczająco dobre dla większości rzeczy, po prostu wolę podwójne Jeśli musisz trzymać się liczb całkowitych, możesz przelicz DecayFactor i Amplitude Factor na ułamkowe liczby całkowite, w których licznik jest zapamiętany jako liczba całkowita, a mianownik jest liczbą całkowitą 2, dzięki czemu można przesunąć bit na prawo jako mianownik, a nie dzieląc się podczas pętli filtracyjnej na przykład, jeśli DecayFactor 0 99 i chcesz używać liczb całkowitych, możesz ustawić wartość DecayFactor 0 99 65536 64881 I wtedy, gdy mnożysz przez DecayFactor w pętli filtru, po prostu przesuń wynik 16. Aby uzyskać więcej informacji na ten temat, s online, rozdział 19 dotyczące filtrów rekurencyjnych. PS Za paradygmat Moving Average, inne podejście do ustawienia DecayFactor i AmplitudeFactor, które mogą być bardziej odpowiednie dla Twoich potrzeb, powiedzmy, że chcesz poprzednio, około 6 pozycji uśrednione tog eter, robi to dyskretnie, dodasz 6 pozycji i podzielisz przez 6, więc możesz ustawić AmplitudeFactor na 1 6 i DecayFactor na 1 0 - AmplitudeFactor. answered 14 maja 12 w wieku 22 55. Każdy inny skomentował dokładnie narzędzie IIR vs FIR, a na mocy dwóch dywizji Chciałbym dać pewne szczegóły implementacji Poniżej działa dobrze na małych mikrokontrolerów bez FPU Nie ma mnożenia, a jeśli zachowasz N moc dwóch, wszystkie podziały jest jednokierunkowe przesunięcie bitowe. Basic FIR ring buffer zachowuje bieżący bufor z ostatnich wartości N, a bieżący SUM wszystkich wartości w buforze Za każdym razem, kiedy pojawia się nowa próbka, odejmij najstarszą wartość w buforze z SUM , wymień ją na nową próbkę, dodaj nową próbkę do SUM i wyjście SUM N. Modified IIR buffer ring zachowuje bieżący SUM z ostatnich wartości N Przy każdej próbie pojawi się nowa próbka SUM - SUM N, dodaj nową próbki i dane wyjściowe SUM N. Odpowiedź 28 sierpnia 13 w 13 45.Jeśli dobrze panu czytam, opisujesz pierwszy porządek IIR filtruje wartość, którą odejmujesz isn t najstarsza wartość, która się wypada, ale zamiast tego średnia z poprzednich wartości Filtry First-Order IIR z pewnością mogą być użyteczne, ale nie wiem co masz na myśli, gdy sugerujesz, że wyjście jest taki sam dla wszystkich sygnałów okresowych Przy częstotliwości próbkowania 10 kHz, podawanie 100 Hz fali prostokątnej w 20-stopniowy filtr pola daje sygnał, który wzrasta równomiernie dla 20 próbek, siedzi wysoko dla 30, kropli jednorodnie dla 20 próbek i siedzi nisko dla 30-go superfekta z filtrem IIR z pierwszego rzędu 28 sierpnia 13 w temperaturze 15 31. będzie powodować falę gwałtownie wzrastającą i stopniowo wyrównywać się w pobliżu, ale nie na maksimum wejściowym, a następnie ostro zacznie opadać i stopniowo wyrównywać blisko, ale nie na wejściu minimum Bardzo różne zachowanie supercat Aug 28 13 w 15 32.Jednym problemem jest to, że prosta średnia ruchoma może być lub nie być użyteczna Z filtrem IIR można uzyskać ładny filtr z stosunkowo niewielką liczbą całkowitą FIR opisujesz może dać Ci tylko prostokąt w czasie - szczerze freq - a ty możesz t zarządzać bocznymi płatami Może być warto wrzucić parę liczb całkowitych, aby uczynić to symetrycznym, dostrajającym FIR, jeśli możesz oszczędzić zegary Scott Seidman 29 sierpnia 13 w 13 50. ScottSeidman No potrzeba mnożenia, jeśli jeden ma po prostu każdy etap FIR albo wyprowadza średnio wejście na ten etap i jego poprzednią zapisaną wartość, a następnie zapisuje dane wejściowe, jeśli ma zakres numeryczny, można użyć sumy zamiast średniej Czy to s lepiej niż filtr pola zależy od aplikacji odpowiedzi krokowej filtru pudełkowego z całkowitym opóźnieniem 1ms, na przykład będzie miał paskudny d2 dt skok gdy zmiana wejściowa, a znów 1ms później, ale będzie miał minimum możliwe d dt dla filtra z całkowitym opóźnieniem 1ms supercat 29 sierpnia w wieku 15 25. Jak mikeselectricstuff powiedział, jeśli naprawdę potrzebujesz zmniejszyć zapotrzebowanie na pamięć i nie pamiętasz odpowiedzi impulsowej jako wykładniczej zamiast prostokątnego impulsu, ja pójdzie na wykładniczy ruch Filtr gniewu Używam ich w znacznym stopniu Z tego typu filtrem, nie potrzebujesz żadnego buforu Nie musisz przechowywać N próbek z przeszłości Tylko jeden Tak, wymagania pamięci zostały obniżone przez czynnik N. Ponadto nie potrzebujesz żadnych podział na to Tylko multiplikacje Jeśli masz dostęp do arytmetyki zmiennoprzecinkowej, użyj multiplikacji zmiennoprzecinkowych Jeśli nie, wykonaj multiplikacje całkowite i przesunięcia w prawo Jednak jesteśmy w 2017 roku i polecam użycie kompilatorów i MCU, które pozwalają do pracy z numerami zmiennoprzecinkowymi. Poza tym, że pamięć jest wydajniejsza i szybsza, nie musisz aktualizować elementów w dowolnym okrągłym buforze, chciałbym powiedzieć, że jest to również naturalne, ponieważ wykładnicza odpowiedź impulsowa lepiej pasuje do charakteru zachowań, w większości przypadków. Pozdrowienie z 20 kwietnia 12 w 9 59. Jedna kwestia z filtrem IIR prawie dotkniętych przez olin i supercat, ale najwyraźniej zignorowane przez innych jest to, że zaokrąglenie wprowadza pewne nieprawidłowości i potencjalnie stronniczość truncation przy założeniu, że N i sa moc dwóch, a tylko arytmetyka całkowita jest używana, prawo przesunięcia systematycznie eliminuje LSB nowej próbki Oznacza to, że jak długo seria mogła być, średnia nigdy ich nie uwzględnia. Na przykład załóżmy, że powoli zmniejszając serie 8,8,8 8,7,7,7 7,6,6, a zakładając, że średnia jest rzeczywiście 8 na początku Pięść 7 próbki przyniesie średnio 7, niezależnie od siły filtra Tylko dla jednej próbki Same historia dla 6, itd. Teraz myśl o tym odwrotnym serie idzie w górę Średnia pozostanie na 7 na zawsze, dopóki próbka nie jest wystarczająco duża, aby to zmienić. Oczywiście, możesz skorygować za stronniczość, dodając 1 2 N 2, ale że tak naprawdę rozwiązać precyzyjny problem, w tym przypadku malejące serie pozostaną na zawsze na 8, aż próbka wynosi 8-1 2 N 2 Na przykład dla N 4 każda próba powyżej zera będzie utrzymywać średnią niezmienioną. Uważam, że rozwiązanie dla co mogłoby oznaczać posiadanie akumulatora utraconych LSB Ale nie zrobiłem tego na tyle, by mieć gotowy kod, i nie jestem pewien, czy nie zaszkodziłoby to mocy IIR w niektórych innych przypadkach serii, na przykład 7,9,7,9 średnio do 8 wtedy. Olin, twoja dwustopniowa kaskada również potrzebuje wyjaśnienia Czy chodzi o trzymanie dwóch średnich wartości w wyniku pierwszego podania do drugiego w każdej iteracji Co to jest zaletą tego.

No comments:

Post a Comment