To forum używa plików cookies
To forum wykorzystuje pliki cookies do przechowywania informacji o Twoim logowaniu, jeśli jesteś zarejestrowany, oraz informacji o Twojej ostatniej wizycie, jeśli nie jesteś zalogowany. Pliki cookies to niewielkie pliki tekstowe zapisywane na Twoim komputerze; cookies ustawiane przez to forum mogą być używane wyłącznie na tej stronie i nie stanowią zagrożenia dla bezpieczeństwa. Cookies na tym forum śledzą również, które tematy zostały przez Ciebie przeczytane oraz kiedy miało to miejsce. Prosimy o potwierdzenie, czy akceptujesz, czy odrzucasz zapisywanie tych plików cookies.

Niezależnie od wyboru w Twojej przeglądarce zostanie zapisany plik cookie, aby zapobiec ponownemu zadawaniu tego pytania. W każdej chwili będziesz mógł zmienić ustawienia cookies, korzystając z linku w stopce strony.

Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
WALET – czyli jak buduję sobie transceiver SDR
#51
Photo 
   
Postanowiłem zbudować projekt Leszka. Pierwsza płytka juz działa.
73!  Zbyszek
Cytuj
#52
Zbyszku, gratuluję tempa montażu urządzenia.
Proszę pamiętaj o właściwym wlutowaniu pinów łącznika na drugiej płytce i kolejnych oraz o prawidłowym sposobie montażu kondensatora C31 co zapobiega ewentualnemu wzbudzaniu się wzmacniacza.

[Obrazek: https://lx-net.pl/walet/image/noisy.jpg]

Polecam zapoznanie się z opisami płytek w aplikacji Kickad dla wersji 1.1
Dodatkowo, w folderach h0 i h1 znajdują się aktualne schematy i opisy montażowe tej wersji a dodatkowo zamieściłem tam rysunki wersji uproszczonej zawierającej minimalną ilość elementów zapewniających działanie układu.
Z działająca płytką h0 można przeprowadzić testy formowania sygnału jakie opisałem w postach #43 i #44.

płytka h0
płytka ha

Przy tej okazji informuję, że konstrukcja Waleta znalazła uznanie na konkursie PUK i otrzymała nagrodę. A ponieważ konstrukcja ta nie jest jakimś wiekopomnym odkryciem to zakładam, że komisja uznała za bardziej wartościowy sposób w jaki prezentuję i wyjaśniam moją pracę niż jej wartość techniczną.

Ostatni tydzień trwałem jeszcze w szoku po nagrodzie w konkursie PUK ale mówiąc poważnie podjąłem próbę pomiaru odbieranego sygnału w domenie cyfrowej zamiast układów analogowych.
Niestety, wielokrotne próby zastosowania biblioteki VolumeMeter z Arduino Audio Tools nie przyniosły rezultatu więc w końcu zdecydowałem się na kontakt z autorem (Phil Saltzman).
Tu również początkowo nie udało się nam rozwiązać problemu ale na końcu okazało się, że winna była moja niekompetencja jako programisty ale przede wszystkim używałem starszej wersji ArduinoAudio Tools i o tym napiszę z detalami jutro.

lj.

GitHub
Cytuj
#53
Pomiar siły odbieranego sygnału za pomocą narzędzi Arduino Audio Tools możliwy jest przez włączenie do łańcucha przetwarzania danych modułu z klasy VolumeMeter.

Do tej pory algorytm działał w cyklu: i2s -> filters -i2s gdzie lewe i2s to wejście sygnału po zamianie z analogowego na cyfrowy  a prawe i2s to wyjście sygnału analogowego po zamianie z cyfrowego. 
W module filters znajduje się łańcuch hilbert -> lpf/bpf  tak więc w rzeczywistości pełny łańcuch wyglądał następująco: i2s -> hilbert -> lpf/bpf -> i2s.

Niestety, w przypadku procesora ESP32A1S z wbudowanym kodekiem audio (konwerter A/C i C/A + inne funkcje) rozróżnienie między i2s na wejściu i i2s na wyjściu nie jest oczywiste i realizowane jest przez dokładniejsze precyzowanie tych portów w sekcji setup{ } programu.

Poza tym, klasa VolumeMeter nie posiada, jak większość innych narzędzi Audio Tools tzw. defaultConfig czyli zestawu ustawień domyślnych niezbędnych do uruchomienia instancji z klasy VolumeMeter dlatego pewien czas zajęło mi wyszukanie sposobu w jaki zainicjować moduł VolumeMeter. Sposobem na to okazało się zbudowanie uniwersalnego pliku konfiguracyjnego:

Kod:
uint16_t sample_rate = 24000;
uint16_t channels = 2;
uint16_t bits_per_sample = 16;  // or try with 24 or 32
AudioInfo info(sample_rate, channels, bits_per_sample);

Plik info zawiera niezbędne informacje potrzebne dla instancji klasy VolumeMeter do jej uruchomienia.

Pomiar sygnału może być włączony w dowolnym miejscu strumienia przetwarzania ale zwykle robi się to na wejściu lub na wyjściu.  
Ale z punktu widzenia pomiaru siły sygnału konkretnego sygnału celowe jest mierzenie jego siły na wyjściu za filtrami ograniczającymi pasmo przetwarzania. Gdyby włączyć pomiar na wejściu to pomiarowi podlegałyby wszystkie sygnały docierające do konwertera a/c a konwersja z prędkością sample_rate "zobaczy" wszystkie sygnały o częstotliwości sample_rate/2 (zgodnie z teorią próbkowania) czyli w tym przypadku do 12kHz. Filtry działające przed pomiarem ograniczają pasmo do 3.6/2.4kHz dla SSB oraz do niewielkiego pasma wokół 800Hz przy odbiorze CW a więc w zasadzie mamy pomiar jednego sygnału.
Tak więc włączenie pomiaru w strumień przetwarzania danych poszerza ten łańcuch do postaci: i2s -> filters -> volumeMeter -> i2s .
Poniżej prezentuję obecną sekwencję przepływu danych w kodzie programu po włączeniu cyfrowego pomiaru siły sygnału.
Kod:
......
I2SStream i2s;  //utworzenie instancji klasy I2SStream o nazwie i2s
FilteredStream<int16_t, float> inFiltered(i2s, channels); //definicja filtrów inFiltred sterowanych danymi z wejścia i2s
VolumeMeter volumeMeter(inFiltered); //utworzenie mirnika sygnału volumeMeter sterowanego danymi z filtra
StreamCopy copier(i2s, volumeMeter); // sterowanie danymi z miernika sygnału wyjścia i2s
.....
void setup(void) {
.....
volumeMeter.begin(info); //uruchomienie miernika pomiaru siły sygnału
.....
}
Powyżej zarysowałem najważniejsze zmiany w programie związane z pomiarem sygnału. Inne istotne parametry jak definicje filtrów oraz konfiguracje kodeków ESP32A1S pozostały bez zmian.

Jak wspominałem, początkowo pokazany kod powodował, że kompilacja odbywała się bez błędów ale po wgraniu jej do procesora następował cykliczny jego restart co ok. 1 sek.
Nie mogąc sam sobie z tym poradzić zapytałem autora pakietu Arduino Audio Tools i prawie tydzień zajęło nam wykrycie, że winna było niezgodność pakietu podstawowego Audio Tools z pakietem Driver Tools, który obsługuje kodeki w ESP32A1S. O ile mój pakiet Driver Tools był aktualny to Audio Tools miało wersję dość odległą od obecnej co generowało problemy. Wydaje się, że początkowa instalacja mojego pakietu Audio Tools nie odbyła się ze strony na GitHub ale z jakiegoś miejsca gdzie ten pakiet polecano i tamten link prowadził właśnie do starszej wersji.
Po ustaleniu przyczyny okazało się, że mój początkowy kod włączenia pomiaru sygnału był poprawny ale kosztowało to stratę kilku dni i wykazaniem się słabą znajomością narzędzi Audio Tools wobec autora tego oprogramowania. Trochę to bolało ale żadna wiedza nie przychodzi łatwo ;-)

Pomiar sygnału w torze cyfrowym umożliwia całkowitą rezygnację z pomiaru na drodze analogowej.

[Obrazek: https://lx-net.pl/walet/image/arw01.jpg]  [Obrazek: https://lx-net.pl/walet/image/arw02.jpg] 

Te elementy można usunąć całkowicie bez szkody dla działania całości na płytce h0

[Obrazek: https://lx-net.pl/walet/image/arw03.jpg]

Dodatkowo, można też usunąć Q5 z otoczeniem z płytki ha

Obecny kod programu zawiera pomiar sygnału w torze cyfrowym co daje jednoznaczne wartości bez konieczności regulowania trymerami ustawień w torach analogowych.

Pisałem o tym wcześniej ale warto to przypomnieć w tym miejscu, że dynamika toru a/c  to 16 bitów (65535 poziomów) ale w praktyce można liczyć na połowę tej wartości bo pełna dynamika dotyczy sygnałów zarówno na plus jak i na minus co oznacza ograniczenie do 15 bitów (32767 poziomów).
Z moich pomiarów i kalibracji miernika volumeMeter wynika, że tło szumowe przetwornika (bez sygnału na wejściu) to ok. 50 a największy poziom jaki można odebrać w tej skali (32767) to ok. S9 + 23dB.
Wydaje się to być wystarczające dla większości sytuacji z ewentualną reakcją dla sygnałów S9 +30, +40 i +60dB.
Taka reakcja może być wykonana za pomocą pokazanego powyżej układu U9 (PCF8574) oraz D7/RV2, D8/RV3 i ewentualnie D9/RV4. Może uda się zredukować tłumik sygnału na czterech diodach PIN do jednej lub dwóch ale na razie, jeśli jest on zamontowany to należy pozostawić jedynie D7/RV2 z RV2 ustawionym na poziom ok. 3-4k.

Na Github zamieściłem w części dotyczącej wersji 1.1 zarówno kod źródłowy jak i pliki bin dotyczące tej wersji.

lj.

Github
Cytuj


Skocz do:


Użytkownicy przeglądający ten wątek: 1 niewidocznych użytkowników, 1 gości