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

Implementacja modemu PLC z OFDM na STM32: Wydajność i przykładowy kod

mongoł2000 04 Sty 2013 13:17 3684 6
  • #1 11739227
    mongoł2000
    Poziom 18  
    Witam, mowa tu oczywiście o Power Line Communication. Wiem że są gotowe układu do tego typu komunikacji jednak chciałbym zrobić to na jakimś uP. Najbardziej pasuje mi do tego mikrokontroler z rodziny STM32. Chciałbym użyć do tego modulacji OFDM z np 10 nośnymi. Z tego co wiem każda nośną musiałbym modulować QAM lub PSK (jakieś pomysły lub przykładowy kod jak coś takiego się robi?) a nastepnie podać nośnę na IFFT. Uzyskane wartości sygnału podaje sie jeszcze kilku operacjom.
    Pasmo które chciałbym wykorzystać leży od 3 kHz do 130 kHz.
    Oczywiście w układzie musiałby być zaimplementowany TX i RX, jednak nie działały by jednocześnie razem wiec nie wnosi to dodatkowego obciazenia.
    Po 1:
    Czy tego typu obliczenia nie są zbyt wymagające dla mikrokontrolera ARM z taktowaniem 24 MHz oraz bez jednostki DSP?
    Po 2:
    Czy ktoś z forumowiczów posiada kod na obojetnie jaki procesor do zaimplementowania OFDM, jesli nie to prosiłbym o jakies materiały(teorii jest dużo, jednak praktycznych rozwiazań nie znalazłem)
  • #2 11749563
    And!
    Admin grupy Projektowanie
    Również nie trafiłem na praktyczne rozwiązania bez specjalizowanych układów.
    Ta realizacja może być pierwsza, warto się pochwalić zakończonym projektem w DIY, natomiast proces tworzenia można udokumentować w Wideoblog elektronika

    Trzeba by oszacować lub najlepiej sprawdzić ile zajmuje na tym procesorze procedura liczenia IFFT (lub IDFT) oraz FFT lub DFT dla wymaganej ilości punktów.
    Wtedy będzie szansa na oszacowanie czy jest szansa na spełnienie wymagań dla 130KHz oraz czy na pokładzie są 2XDAC o odpowiednich parametrach.
  • #3 11750094
    mongoł2000
    Poziom 18  
    Na razie robię teoretyczne działanie z wykorzystaniem matlaba. Zaczełem od modulacji i demodulacji BPSK. Nawet w bardzo zaszumionym sygnale mogłem łatwo odczytać informację czyli do PLC sie może nadać.
    Przy 72MHz STM32F103 :
    256-point 16 b radix-4 fast Fourier transform (FFT) in only 362 µs.
    Trochę wg mnie długo. Jednak wydaje mi się że 16 punktowa FFT wystarczy dla kilku nośnych i wtedy czas zmniejszyłby się. Dla STM32F4 z jednostką DSP zmniejszyłby się jeszcze trzykrotnie.

    No właśnie co do DACów. Po co 2? Wydaje mi się że wystarczy jeden. Wszystkie operacje powinny być wykonane w procku.

    Nie zagłebiałem się jeszcze dostatecznie w OFDM bo to odchodzi od mojej dziedziny trochę, więc poproszę kolegów z NSN o wykład z tej modulacji. Tam się bawią LTE na DSP i FPGA.
  • #4 11753002
    And!
    Admin grupy Projektowanie
    Racja, można spróbować wykonać jak najwięcej wewnątrz CPU.
    Cytat:
    256-point 16 b radix-4 fast Fourier transform (FFT) in only 362 µs.

    Skąd ta informacja ?
  • #5 11753100
    mongoł2000
    Poziom 18  
    Między innymi stąd:
    http://www.dataweek.co.za/news.aspx?pklnewsid=31978

    A tu bardzo ciekawa lektura:
    http://ecet.ecs.ru.acad.bg/cst05/Docs/cp/SI/I.5.pdf

    Na picu postawili OFDM choć to jedynie nadajnik. Ogólnie pobieżna literatura ale pokazane jest jak poradzić sobie bez użycia FPGA - Proste filtrowanie bez użycia FFT.
    Ogólnie chciałbym żeby ten modem PLC był tani więc nad FPGA nie ma sensu tu siedzieć.
  • Pomocny post
    #7 11934091
    shg
    Poziom 35  
    Co do modulacji na poszczególnych podnośnych, to chyba łatwo będzie QAM, można by zrobić QAM-16, będzie po 4 bity na bod, ładny kod wyjdzie, ale oczywiście nic nie stoi na przeszkodzie, żeby zrobić QAM-256 (może poza szumami).
    Samą modulację uzyskuje się przez ustawienie odpowiednich wartości w widmie zespolonym, dla każdej kombinacji bitów czytasz odpowiednią wartość tablicy konstelacji i ustawiasz współczynniki dla danej częstotliwości.
    I nie 10 podnośnych, tylko np. 16. Ważne żeby się z radiksem FFT zgadzało. Krótsza FFT będzie szybsza. Z tego co kiedyś czytałem/liczyłem, to można wyciągnąć chyba około miliona zespolonych próbek na sekundę, zresztą podobnie wychodzi w tym co podałeś. Zatem QAM-16 na każdej podnośnej i 16 podnośnych daje 64 bity na jedną (I)FFT, z tego dostaniesz 32 próbki rzeczywiste (za mieszaczem). Przy 1 Ms/s wychodzi 31 250 transformacji / s, a to daje okrągłe 2 Mbit/s.
    W praktyce realizacja wygląda tak:
    Dane -> podział na body -> konstelacja -> tablica współczynników -> zespolona IFFT -> mieszacz kwadraturowy -> interfejs -> druty.
    Demodulacja odwrotnie. W przypadku demodulacji dochodzi jeszcze problem synchronizacji fazy (tak jak i w radiu, odbiorniki są zawsze trudniejsze niż nadajniki), bo w przeciwnym wypadku dane mogą się rozjechać (np. zrobisz FFT z połowy pierwszego wyniku IFFT i połowy drugiego). To trzeba załatwić jakąś preambułą, albo tonami synchronizującymi (np. użyć jednej z podnośnych jako synchronizacji).
    Na poziomie podnośnych może być podobny problem, ale to zależy akurat od tego, jak się będziesz synchronizował. Jeżeli będziesz synchronizował się z tonem na podnośnej, a nie z całą ramką, to efekt braku synchronizacji będzie taki, jak po obrocie konstelacji. Można też stosować schematy kodowania, które są niezależne od fazy (np. kodowanie różnicowe, ale nie wiem czy procesor to "przełknie", chyba żeby jakoś sprytnie to zoptymalizować na tablicach itp.).
    Poza tym dochodzi jeszcze problem synchronizacji częstotliwości w obu urządzeniach. Będzie on uciążliwy zwłaszcza przy długich pakietach. W praktyce można łatwo policzyć jakie jest dopuszczalne odchylenie częstotliwości dla danej długości pakietu i parametrów transmisji.

    W praktyce modemy z OFDM wykorzystują różny rozmiar konstelacji w zależności od poziomu szumów na danej podnośnej, to jest mierzone przy negocjacji parametrów transmisji. Do tego często jest jeszcze kompensacja echa w drutach, ale tego bez DSP albo nawet FPGA już raczej tak łatwo się nie da. Na zwykłym procesorze oczywiście można, tylko że obliczenia zajmują tyle czasu, że transmisja musi być przez to wolniejsza, a dla wolniejszej transmisji taka kompensacja nie jest już potrzebna, ot takie brzydkie dodatnie sprzężenie zwrotne.

    Kiedyś jakiś modem OFDM robiłem w Octave (mniej więcej kompatybilne z matlabem), ale nie wiem gdzie to mam i czy jeszcze mam. Kod nadajnika jest banalny, odbiornik trochę trudniejszy ze względu na synchronizację, nie pamiętam nawet czy ją zaimplementowałem, czy nie.
REKLAMA