-
11. Data: 2009-08-10 12:42:07
Temat: Re: cyfrowa obróbka sygnału
Od: Paweł <p...@n...pl>
> Ciekawy jestem co to za algorytm zastosowales, ktoremu bez roznicy jest czy
> to 2000 czy to 2048 probek, pytam bez sarkazmu z ciekawosci :)
Oczywiście w FFT trzeba wykonać tym więcej operacji im więcej jest
próbek danych. Ja jednak wykonuję FFT w czasie rzeczywistym (może lepiej
powiedzieć sukcesywnie).
Czyli co odczyt z ADC muszę zrobić obliczenia dla wszystkich
częstotliwości ale tylko dla dwóch próbek. Dla aktualnej i dla
opóźnionej. Czy ta opóźniona próbka jest o 100 czy o 4096 odczytów z ADC
nie ma wpływu na czas obliczeń.
> A po co liczysz FFT dla kazdej nowej probki? to Ci nic nie daje.
Precyzyjniej należy powiedzieć, że mam wynik FFT co próbkę z ADC.
Nie wpływa to na obciążenie uP a gwarantuje, że nie przegapię
poszukiwanego sygnału.
Paweł
-
12. Data: 2009-08-10 15:43:58
Temat: Re: cyfrowa obróbka sygnału
Od: pgw <"SwietyMikolaj["@]poczta.onet.pl>
Paweł wrote:
>> Ciekawy jestem co to za algorytm zastosowales, ktoremu bez roznicy jest czy
>> to 2000 czy to 2048 probek, pytam bez sarkazmu z ciekawosci :)
>
> Oczywiście w FFT trzeba wykonać tym więcej operacji im więcej jest
> próbek danych. Ja jednak wykonuję FFT w czasie rzeczywistym (może lepiej
> powiedzieć sukcesywnie).
> Czyli co odczyt z ADC muszę zrobić obliczenia dla wszystkich
> częstotliwości ale tylko dla dwóch próbek. Dla aktualnej i dla
> opóźnionej.
Przyznaje, ze nie rozumiem tego. Co to znaczy ze liczysz dla 2 probek i co
to jest próbka opózniona?
> Czy ta opóźniona próbka jest o 100 czy o 4096 odczytów z ADC
> nie ma wpływu na czas obliczeń.
>
>> A po co liczysz FFT dla kazdej nowej probki? to Ci nic nie daje.
>
> Precyzyjniej należy powiedzieć, że mam wynik FFT co próbkę z ADC.
> Nie wpływa to na obciążenie uP a gwarantuje, że nie przegapię
> poszukiwanego sygnału.
Jezeli co 62,5ns jestes wstanie policzyc FFT dla 50 próbek to w 11ms
bedziesz wstanie policzyc FFT dla 4096 próbek. Czyli wynik FFT dostawalbys
co okolo 180 próbka a nie co jedna. Rzeczywiste FFT nie koniecznie oznacza
wynik co jedna próbka.
Skoro sygnał który chcesz wyłapac trwa najkrócej 200ms to dostając wynik
FFT co 11ms spewnościa go nie przegapisz.
Przy czasie okna 256ms masz rodzielczość czestotliwościową FFT ok 4Hz czyli
błąd 2Hz.
--
pgw
-
13. Data: 2009-08-10 15:46:11
Temat: Re: cyfrowa obróbka sygnału
Od: Konop <k...@g...pl>
> Rozdzielczosc 10Hz ale blad 5Hz - 2,5%
Fakt, zgadam się, mój błąd!
> Zwiekszenie czestotliwosci probkowania nie poprawi rozdzielczosci
> częstotliwosciowej tylko zwiekszy pasmo, tu trzeba zwiekszyc okno do 0,25s
Tu też się przyznaje do błędu i dziękuje za poprawienie mnie :)...
Pozdrawiam
Konop
-
14. Data: 2009-08-10 15:49:05
Temat: Re: cyfrowa obróbka sygnału
Od: Konop <k...@g...pl>
> Oczywiście w FFT trzeba wykonać tym więcej operacji im więcej jest
> próbek danych. Ja jednak wykonuję FFT w czasie rzeczywistym (może lepiej
> powiedzieć sukcesywnie).
I tu jest błąd!! Algorytm FFT jest SZYBKI tylko i wyłącznie, jeśli masz
ilość próbek równą 2^N!!!! Chyba, że Twój algorytm automatycznie
uzupełnia analizowany ciąg zerami...
> Czyli co odczyt z ADC muszę zrobić obliczenia dla wszystkich
> częstotliwości ale tylko dla dwóch próbek. Dla aktualnej i dla
> opóźnionej. Czy ta opóźniona próbka jest o 100 czy o 4096 odczytów z ADC
> nie ma wpływu na czas obliczeń.
To ja chyba nie wiem, jak się liczy FFT :P...
> Precyzyjniej należy powiedzieć, że mam wynik FFT co próbkę z ADC.
> Nie wpływa to na obciążenie uP a gwarantuje, że nie przegapię
> poszukiwanego sygnału.
Jeśli chcesz mi powiedzieć, że analizowanie tego FFT co próbkę nie
zużywa więcej czasu procesora niż analizowanie co 0,1s, to OK :)...
Pozdrawiam
Konop
-
15. Data: 2009-08-10 16:33:25
Temat: Re: cyfrowa obróbka sygnału
Od: Paweł <p...@n...pl>
> Przyznaje, ze nie rozumiem tego. Co to znaczy ze liczysz dla 2 probek i co
> to jest próbka opózniona?
Próbka opóźniona oznacza wartość odczytaną z ADC np. 2000 odczytów
wcześniej.
Wykonuję obliczenia sukcesywnie. Zauważ, że znając wyniki FFT dla danego
okienka próbek już łatwo obliczyć FFT dla okienka przesuniętego o jedną
próbkę. Wymaga to tylko kilku prostych działań. Właśnie te obliczenia
wykonuję po każdym odczycie z ADC. Do ich przeprowadzenia konieczna jest
właśnie wartość danej próbki i próbki z drugiego końca okienka czyli
opóźnionej.
>
>> Czy ta opóźniona próbka jest o 100 czy o 4096 odczytów z ADC
>> nie ma wpływu na czas obliczeń.
>>
>>> A po co liczysz FFT dla kazdej nowej probki? to Ci nic nie daje.
>> Precyzyjniej należy powiedzieć, że mam wynik FFT co próbkę z ADC.
>> Nie wpływa to na obciążenie uP a gwarantuje, że nie przegapię
>> poszukiwanego sygnału.
>
> Jezeli co 62,5ns jestes wstanie policzyc FFT dla 50 próbek to w 11ms
> bedziesz wstanie policzyc FFT dla 4096 próbek. Czyli wynik FFT dostawalbys
> co okolo 180 próbka a nie co jedna. Rzeczywiste FFT nie koniecznie oznacza
> wynik co jedna próbka.
> Skoro sygnał który chcesz wyłapac trwa najkrócej 200ms to dostając wynik
> FFT co 11ms spewnościa go nie przegapisz.
>
> Przy czasie okna 256ms masz rodzielczość czestotliwościową FFT ok 4Hz czyli
> błąd 2Hz.
>
W ciągu 62,5uS mogę policzyć FFT dla 2 próbek i 50 częstotliwości. Dla
2048 próbek i 400 częstotliwości (co 10Hz) zajmie to już 0.5 sek.
Paweł
-
16. Data: 2009-08-10 17:02:39
Temat: Re: cyfrowa obróbka sygnału
Od: Paweł <p...@n...pl>
>> Oczywiście w FFT trzeba wykonać tym więcej operacji im więcej jest
>> próbek danych. Ja jednak wykonuję FFT w czasie rzeczywistym (może lepiej
>> powiedzieć sukcesywnie).
>
> I tu jest błąd!! Algorytm FFT jest SZYBKI tylko i wyłącznie, jeśli masz
> ilość próbek równą 2^N!!!! Chyba, że Twój algorytm automatycznie
> uzupełnia analizowany ciąg zerami...
Niestety już dano temu uczyłem się o transformacie Fouriera. Nie jest
wykluczone, że to co robię nie jest to FFT tylko liczenie transformaty
metodą "tradycyjną". Bardzo prosty algorytm ale wymaga wielu mnożeń.
Chyba muszę się trochę doszkolić.
Paweł
-
17. Data: 2009-08-10 17:55:47
Temat: Re: cyfrowa obróbka sygnału
Od: pgw <"SwietyMikolaj["@]poczta.onet.pl>
Paweł wrote:
>> Przyznaje, ze nie rozumiem tego. Co to znaczy ze liczysz dla 2 probek i co
>> to jest próbka opózniona?
>
> Próbka opóźniona oznacza wartość odczytaną z ADC np. 2000 odczytów
> wcześniej.
>
> Wykonuję obliczenia sukcesywnie. Zauważ, że znając wyniki FFT dla danego
> okienka próbek już łatwo obliczyć FFT dla okienka przesuniętego o jedną
> próbkę. Wymaga to tylko kilku prostych działań.
Nie slyszalem o czyms takim, mozesz podać jakieś zródla?
--
pgw
-
18. Data: 2009-08-10 18:33:07
Temat: Re: cyfrowa obróbka sygnału
Od: J.F. <j...@p...onet.pl>
On Mon, 10 Aug 2009 17:49:05 +0200, Konop wrote:
>I tu jest błąd!! Algorytm FFT jest SZYBKI tylko i wyłącznie, jeśli masz
>ilość próbek równą 2^N!!!!
Niekoniecznie - sa algorytmy na inne ilosci, ale nie dowolne.
J.
-
19. Data: 2009-08-10 19:21:42
Temat: Re: cyfrowa obróbka sygnału
Od: Paweł <p...@n...pl>
pgw pisze:
> Paweł wrote:
>
>>> Przyznaje, ze nie rozumiem tego. Co to znaczy ze liczysz dla 2 probek i co
>>> to jest próbka opózniona?
>> Próbka opóźniona oznacza wartość odczytaną z ADC np. 2000 odczytów
>> wcześniej.
>>
>> Wykonuję obliczenia sukcesywnie. Zauważ, że znając wyniki FFT dla danego
>> okienka próbek już łatwo obliczyć FFT dla okienka przesuniętego o jedną
>> próbkę. Wymaga to tylko kilku prostych działań.
>
> Nie slyszalem o czyms takim, mozesz podać jakieś zródla?
>
Opierałem się jedynie na tym co bardzo bardzo dawno temu się nauczyłem.
Tak więc oczywiście mogłem popełnić jakieś podstawowe błędy i zrobić coś
kompletnie bez sensu.
Dla poszczególnych częstotliwości liczę coś takiego
A=P1*Cos(k1)+P2*Cos(k2)+P3*Cos(k3)...+Pn*Con(n)
B=P1*Sin(k1)+P2*Sin(k2)+P3*Sin(k3)...+Pn*Sin(n)
gdzie:
P0,P1,P2,P3... kolejne próbki z ADC
n ilośc próbek dla jakiej przeprowadza się operacje
Cos(k1),Sin(k1),Cos(k2),Sin(k2),Cos(k3)... stablicowane wartości funkcji
Cos i Sin (różne dla różnych częstotliwości).
Amplituda danej składowej jest proporcjonalna do SQR(A*A+B*B)
Aby obliczyć A i B dla okienka przesuniętego jedną próbkę wystarczy
policzyć:
A0=A1+P0*Cos(k0)-Pn*Cos(n)
B0=B1+P0*Sin(k0)-Pn*Sin(n)
Tak więc liczę tylko coś takiego dla różnych częstotliwości po
odczytaniu próbki z ADC.
Dodatkowo liczę A*A+B*B aby porównać prążki i przeprowadzam operacje na
wskaźnikach do tablicy Sin i Cos. Długości tych tablic są rożne dla
różnych częstotliwości.
Dla ARMa jest to łącznie tylko około 20-25 instrukcji w asm na jedną
częstotliwość. Ma on instrukcję MLA mnożenia i jednoczesnego dodawania.
Przy odpowiednio dobranych argumentach dla AT91SAM7S wykonuje się ona
teoretycznie 2 cykle.
Paweł
-
20. Data: 2009-08-10 20:42:16
Temat: Re: cyfrowa obróbka sygnału
Od: Konop <k...@g...pl>
> Niekoniecznie - sa algorytmy na inne ilosci, ale nie dowolne.
Tak, wiem :). Nie zmienia to faktu, że najszybsze są FFT dla 2^N.. dla
innych liczb (np. 3*2^N) można zrobić to też szybko (tzn. szybciej niż
klasyczną transformatą ;), jednak ciut wolniej, prawda?? :)...
Pozdrawiam
Konop