Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Algorytm strojenia AAT
SQ8MHI Offline
 
*

Liczba postów: 28
Dołączył: 15-09-2010
Post: #31
RE: Algorytm strojenia AAT
(01-01-2012 23:52)SQ8AQU napisał(a):  SWR jest dość kłopotliwy do wyrażenia go stałoprzecinkowo i to w dodatku na dość małej liczbie bitów (zmienia się w zakresie 1..nieskończoność). Dlatego wolę używać odbicia, które zmienia się w zakresie 0..1 i łatwo przyjąć w naszym przypadku zakres 0..MAX_ADC (gdzie zero to zero odbicia (SWR==1), a MAX_ADC to 1, czyli pełne odbicie lub jak kto woli SWR==nieskończoność).

Matematyka w programie jest robiona zmiennoprzecinkowo więc jestem w stanie podać tak duże wartości SWR (precyzyjne odbicie w pobliżu jedynki). Jednak po sprowadzeniu tego do zakresu ADC tracimy rozdzielczość no i znika gradient...
Wszystko jasne, ale 0 i MAX_ADC to warunki brzegowe. Dużo zależy od tego, co się dzieje pomiędzy nimi, oraz (trochę filozoficznie) ile to jest "nieskończoność". Popatrz tu:
İmage
- obydwie krzywe (przyjmijmy na osi pionowej słowo ADC (0..255) a na poziomej kolejne wartości C, przy L=const - taki przekrój wykresu z lnetstim) są zgodne z powyższymi - ale na czarnej dużo łatwiej szukać minimum. W symulatorze przy wyższych częstotliwościach jest jeszcze trudniej - taka szpilka w stogu 255-tek. Dlatego zastanawiam się nad charakterystyką wartości mierzonej przez ADC od SWR. Jeśli zakładamy algorytm poszukiwania minimum mając wyłącznie pomiar SWR, to ta zależność będzie zasadnicza dla algorytmu.

SQ8AQU napisał(a):Główne założenie algorytmu wg mnie się nie zmienia - szukamy minimum odbicia w zbiorze możliwych kombinacji.
Potencjalnych algorytmow widzę sporo. Można próbować wybrać jakiś punkt ("od czapy" albo jakoś inteligentniej (np. heurystycznie sugerować się częstotliwością(jeśli mamy możliwość pomiaru/preselekcji pasma))) i "pomacać" parę punktów w otoczeniu i zrobić krok w stronę spadku. Można użyć książkowej metody Gaussa-Seidela - z punktu startowego iść w kierunku jednej współrzędnej dopóki będzie spadek, potem po drugiej współrzędnej itd. aż poprawa w kolejnych krokach będzie niewielka. Z jednej strony - przy wyznaczaniu lokalnego gradientu musimy wykonać kilka pomiarów, ale mamy informację jak duże mamy nachylenie - można wykorzystać do wyboru wielkości kroku i możemy wykonać krok w kierunku obydwu osi jednocześnie. Przy metodach bezgradientowych - po prostu wykonujemy krok i sprawdzamy, czy mamy lepiej czy gorzej. Która lepsza? Trzeba przetestować statystycznie. Natomiast jakkolwiek byśmy nie próbowali, na wykresie coś się musi dziać, żeby dało się cokolwiek wyliczyć.

Tomek SQ8MHI
02-01-2012 16:50
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
TG50 Offline
Józef
***

Liczba postów: 178
Dołączył: 20-11-2009
Post: #32
RE: Algorytm strojenia AAT
Pytanie do Jakuba SQ8AQU:

Czemu w symulatorze dla impedancji anteny Z=40+j30 |Z|=50 program pokazuje początkowy SWR=2 ???
03-01-2012 0:50
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ8MHI Offline
 
*

Liczba postów: 28
Dołączył: 15-09-2010
Post: #33
RE: Algorytm strojenia AAT
TG50 napisał(a):Czemu w symulatorze dla impedancji anteny Z=40+j30 |Z|=50 program pokazuje początkowy SWR=2 ???
Wg. mnie tak ma być. gamma=(40+j30)-(50+j0)/(40+30j)+(50+j0)=0,3333j ; |gamma|=0,3333 ; SWR=(1+|gamma|)/(1-|gamma|)=2. CBDU.
03-01-2012 12:26
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ8AQU Offline
Nowicjusz
*

Liczba postów: 16
Dołączył: 19-03-2010
Post: #34
RE: Algorytm strojenia AAT
(03-01-2012 0:50)TG50 napisał(a):  Czemu w symulatorze dla impedancji anteny Z=40+j30 |Z|=50 program pokazuje początkowy SWR=2 ???
Właściwie Tomek SQ8MHI odpowiedział wyczerpująco na to pytanie. Może tylko dla kontrastu przytocze przykład skrajny tzn. impedancje 0 +(lub -)j50 - dla tych impedancji moduł |Z| jest również == 50, a odbicie 1 (SWR == nieskończoność)

(02-01-2012 0:37)SP3SWJ napisał(a):  (...)
...może teraz rozjaśniłem mój punkt widzenia :-) na "skrzynki"

I owszem - rozumiem teraz co miałeś na myśli. Ciągle jednak uważam, iż dla samego algorytmu poszukiwania minimum to bez znaczenia czy stroimy z początkowym SWR < 3, czy większym (OK, dla większych SWR będzie trudniej bo - mówiąc obrazowo - "obszary" z niskim SWR będą "węższe")
Decyzja czy strojenie rozpocząć (czy też nie) może zostać podjęta po wykonaniu jednego pomiaru kontrolnego dla C == 0; L == 0 i sprawdzeniu czy SWR (odbicie) jest poniżej limitu (dla skrzynek kabla); próbować natomiast stroić zawsze dla skrzynek anteny.

Wracając do meritum - dorzuciłem przełączniki do L_NetSim, o których wspominałem czyli: -r, -x, -f, -l, -c oraz dopisałem wizualizacje algorytmu strojenia do L_NetSim - tzn L_NetSim korzysta w tej chwili z tej samej biblioteki co L_NetTester, czyli auto_tune.dll i uruchamia algorytm strojenia dla każdej nowo wybranej impedancji/częstotliwości.
Przygotowałem nowy plik wejściowy zawierający zestaw ok. 1300 impedancji dla najpopularniejszych pasm KF - SWR startowy nie przekracza 32.
Spędziłem również trochę czasu próbując napisać jakiś bardziej konkretny algorytm strojenia. Roboczo nazwałem go robakiem (skojarzenie śladów jakie zostawia na bitmapach w L_NetSimie Wink - efekty do oglądnięcia w załączniku (wraz z kodem źródłowym oczywiście). Wydaje mi się, iż można spróbować go w tej formie użyć w sprzęcie - niestety na tą chwilę nie posiadam takowego - muszę dopiero coś wyprodukować.
Algorytm (o dziwo) wydaje się być mało wrażliwy na parametr -p czyli %MAX_ADC zwracany jako wartość odbicia==1 - działa podobnie dla 25 jak i 200% (?) (zmienna dynamika)
Nie radzi sobie z podwójnymi dołkami - te rzeczywiście występują, ale z moich obserwacji wynika, iż ich powodem jest dyskretyzacja siatki L/C i to, że lokalna "dolina" idealnego rozwiązania przebiega pomiędzy punktami, które możemy ustawić/zmierzyć (mierzymy odbicie niejako "na zboczach wąwozu", co powoduje iż SWR chwilowo rośnie, pomimo iż linia idealnego rozwiązania gdzieś pomiędzy ciągle opada); by po kilku punktach dalej znów pokryć (zbliżyć) się z siatką dyskretyzacji L/C i znów zacząć maleć... Tutaj można/trzeba by to ulepszyć.

Co do optymalnych wartości kroku L/C - wszystko zależy od priorytetów, tzn. co tak naprawdę chcemy stroić (SWR duży/mały; impedancja > czy < od Z0) i w jakich pasmach. Dla małych impedancji przydało by się precyzyjne L oraz duże C; dla dużych (>Z0) dokładnie odwrotnie... Dla wyższych pasm przydała by się większa precyzja... na niższych większe wartości maksymalne - itd. itp.
Po przeprowadzeniu eksperymentów z różnymi wartościami L/C na bit wydaje mi się iż dla skrzynki pracującej w całym zakresie KF (no może poza 160m) jako skrzynka anteny (strojenie wysokich SWR) niezłym kompromisem jest 50nH dla L oraz 10p dla C, choć przyznaje, że dla górnych pasm zaczyna w niektórych sytuacjach brakować rozdzielczości/precyzji i niektóre strojenia udają się słabo. Proponowane przez Jarka 5pF/25nH nie radzi sobie zbyt dobrze na 80-tce (to oczywiście ciągle przy założeniu 8-miu bitów na sterowanie L/C). Ot jak w życiu - coś za coś. Idealnym rozwiązaniem było by sterowanie za pomocą 9-ciu, a najlepiej 10-ciu bitów na L/C.
Przykładowy raport końcowy z L_NetTestera uzyskałem następujący:

auto_tune.dll ver: L-Network auto tuner 'worm' ver. 1.01 by Jakub Kopera SQ8AQU Jan 11 2012
command line: L_NetTester.exe -i input_data.txt -o out.txt -l 50e-9
L-bit: 5e-008 Max_L: 1.275e-005 C-bit: 1e-011 Max_C: 2.55e-009
(...)
Tunings simulated: 1337
Tunings successfull: 1331
Tunings failed (SWR>3): 6
Tunings poor (2>SWR>3): 37
Tunings average (1.5>SWR>2): 112
Tunings good (SWR<1.5): 1182
Max tuning iterations: 278
Min tuning iterations: 11
Average tuning iterations: 66
Aaverage SWR: 1.19

Nawiasem mówiac - czy ktoś mógłby podać (z praktyki) ile czasu potrzeba na ustawienie przekaźników oraz wykonanie pojedynczego pomiaru? Wstępnie założyłem ok 20ms, ale być może jest to mniej (więcej?) Pozwoliło by to przeliczyć ilość iteracji na czas strojenia.
Pozdrawiam,


Załączone pliki
.zip  L_NetTools_2012_01_11.zip (Rozmiar: 729.46 KB / Pobrań: 315)

Jakub SQ8AQU
11-01-2012 3:16
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP3SWJ Offline
Jarek
****

Liczba postów: 652
Dołączył: 20-03-2010
Post: #35
RE: Algorytm strojenia AAT
(11-01-2012 3:16)SQ8AQU napisał(a):  Nawiasem mówiac - czy ktoś mógłby podać (z praktyki) ile czasu potrzeba na ustawienie przekaźników oraz wykonanie pojedynczego pomiaru? Wstępnie założyłem ok 20ms, ale być może jest to mniej (więcej?) Pozwoliło by to przeliczyć ilość iteracji na czas strojenia.
Pozdrawiam,

kilka parametrów determinujących szybkość
- to co pisałeś - szybkość przekaźników.. - często jest podawana w notach katalogowych
- szybkość odpowiedzi detektora... ( można zmierzyć ale to nie bedzie problemem o ile ktoś nie wstawi elektrolita w detektora )
- ewentualna szybkość odpowiedzi ALC z TRX ...

pewne sprawy można obejść tu można zrobić kilka pomiarów ADC .. FOR REV ...



http://www.cyfronika.com.pl/dokumentacje/JQX-115F.pdf
dla tych stosowanych w eATU jest mniej niż 20 ms

... a tu jest film
http://www.youtube.com/watch?v=yl7jaeovS3E

pokazujący jak szybko można sterować przekaźnikami przez RS485 w simpleksie przy 2400bps (jeden znak ascii= zmiana stanu styku )
... chodzi o zdalne jednostki ATU sterowane z "procesora domowego" ...
(Ten post był ostatnio modyfikowany: 11-01-2012 3:42 przez SP3SWJ.)
11-01-2012 3:35
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
EI3HMB Offline
ZH
*

Liczba postów: 22
Dołączył: 05-08-2013
Post: #36
RE: Algorytm strojenia AAT
Troche ozywie temat, bo wlasnie rozmyslam nad automatycznym algorytmem...

Pytanie do Jarka i Adama odnosnie filmu powyzej..

Czy easyAtu w jakikolwiek sposob sprawdza czy styki przekaznika zostaly fizycznie zalaczone?
W programie do mojego ATU na STM32 odsylam informacje potwierdzajaca wykonanie nowego ustawienia kiedy ustawione sa wszystkie nowe wartosci dla GPIO. Jednak poruszamy sie w dosc szybkim swiecie procesorow i ustawienie 'jedynki' na pinie procka nie oznacza ze przekaznik juz sie zalaczyl! Mozna przyjac, ze transmisja 9600 jest na tyle wolna ze zanim odpowiedz z ATU 'dotrze' do komputera wszystkie przekazniki sa juz zalaczone, lub:

1. znajac max czas zalaczenia przekaznika dodac takie opoznienie przed odeslaniem potwierdzenia z ATU
2. dodac do ukladu jeden miniaturowy przekaznik o czasie zalaczania = lub nieco wiekszym niz te uzyte w ukladzie sterowania, po ustawieniu wszystkich ustawien dla przekaznikow zalaczyc ten przekaznik kontrolny i odczytac jego stan, dopiero wtedy odeslac potwierdzenie. To rozwiazanie jednak i tak pewnie wymusi jakis delay dla stabilizacji stykow, wiec obstawiam tu rozwiazanie z p. pierwszego.


Co do samego algorytmu...
Skrzynka oparta o FRIMatch, wiec nie zmieniamy indukcyjnosci, testujac rozne ustawienia manualnie (kondensatory zmienne) zauwazylem pewna zaleznosc - jesli na wykresie (MAX6 LCD) jest w jakims miejscu dolek, to krecac kondensatorami w prawo przesuwam dolek w prawo, krecac w lewo przesuwam w lewo. Zaleznosc prosta, chcemy dolek na wyzszej czestotliwosci zmniejszamy C, na nizszej zwiekszamy C. Przyszedl mi wiec do glowy nastepujacy algorytm:

(pierwsze strojenie, brak jakichkolwiek danych)
(dla uproszczenia opieram sie tylko na SWR)
1. Ustawiam kondensatory na 50% wartosci.
2. Dokonuje pomiaru dla zadanej czestotliwosci - komenda wyslana do MAX6, odczyt ADC. Zapamietanie wyniku.
3. Seria pomiarow MAXem (bez zmiany ustawien skrzynki) w gore i w dol od zadanej czestotliwosci.
4. Odszukanie 'po ktorej stronie' jest 'najblizszy dolek'
5. Zmiana wartosci kondensatora od strony anteny na 25% lub 75% (zaleznie od tego 'gdzie jest dolek')
6. Powtarzam krok 3 i 4
7. Zmiana wartosci kondensatora od strony TRX na 25% lub 75% (zaleznie od tego 'gdzie jest dolek')
8. Powtarzam kroki 3 do 7, z tym ze kolejne zmiany wartosci kondensatorow sa o polowe mniejsze przy kazdym kroku, czyli kolejno o 12.5%, 6.25% itd...

Algorytm ten jest oparty na algorytmie poszukiwania danej wartosci w uporzadkowanej serii wartosci, ogranicza ilosc zmian ustawien skrzynki, za to zwieksza ilosc pomiarow VNA.

Majac jakies dane testowe mozna algorytm uproscic przez dodanie oszacowania zmian C w zaleznosci od tego 'jak daleko jest dolek'.


Zastrzegam, ze jest to algorytm wstepny, kiedy jescze nic nie wiemy o antenie, no i oczywiscie jest on dla FRIMatch o stalej indukcyjnosci.

Prosze o konstruktywna krytyke.

Edit:

Chwile jeszcze potrenowalem z recznym ATU i widze ze najtrudniejsze zadanie to znalezc pierwsze ustawienia dla danej czestotliwosci wybranego pasma, programowanie kolejnych czestotliwosci z zadanym krokiem jest juz latwiejsze, bo zmiany sa relatywnie niewielkie, a wiec szybsze do przetestowania.
(Ten post był ostatnio modyfikowany: 21-08-2013 14:00 przez EI3HMB.)
21-08-2013 14:00
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości