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

Kanał awgn jak dodac szumy?

mariuszprus 12 Gru 2009 18:12 2587 5
  • #1 7379264
    mariuszprus
    Poziom 11  
    Witam.

    Moim problemem jest zasymulowanie kanału AWGN.

    dane wejściowe to bity ktore nastepnie sa pzyprzadkowane punktom na konstelacji .
    3 bity = jeden z punktow na konstelacji tak jak na rysunku zamieszonym na stronie :
    http://pl.wikipedia.org/wiki/Diagram_konstelacji
    tak wiec teraz 3 bitom wejściowym bedzie przyprzadkowany jeden punkt konstelacji .
    Punkt ten bedzie miał wartoś cos(alfa)+jsin(alfa) np. punkt 1 1 1 cos(0)+jsin(0)

    czyli wartosci tego punktu 1,0 kktore bedziemy zapisywac w tablicy tab[2][i]
    i- oznacza ilosc przesyłanych punktów konstelacji przez kanał

    czyli w tablicy tab[0][0]=1
    tab[1][0]=0
    następnie np przesyłamy punkt 1 1 0 czyli cos(45)+jsin(45)
    tab[0][1]=0.707
    tab[1][1]=0.707
    .
    .
    tab[0][i]=cos(alfa)
    tab[1][i]=sin(alfa)
    W programie mamy wpisywać wartość SNR
    i w zalezności od tej wartosci do kazdego punktu ma nam dodawać szum za pomoca funkcji losującej ran o rozkładzie gauusa (szum gaussowski)
    (zarówno do wspołrzędnej cos(alfa) jak i do sin(alfa) )

    Jeśli ktoś zna tematyke kanałó radiowych i mołby napisać taka funkcje opsac w jaki sposob mozna losowac liczby o rozkladzie gausa z tym ze prosze nie wysylac linkow z wikipedi bo doskonale je znam


    Tak więc osoby które wiedzą na jakich zasadach działa kanał AWGN proszę o pomoc
  • #2 7383645
    __Grzegorz__
    Poziom 30  
    mariuszprus napisał:

    Jeśli ktoś zna tematyke kanałó radiowych i mołby napisać taka funkcje opsac w jaki sposob mozna losowac liczby o rozkladzie gausa z tym ze prosze nie wysylac linkow z wikipedi bo doskonale je znam


    Jeżeli dysponujesz generatorem liczb losowych o równomiernym rozkładzie losowanych liczb w zakresie 0-1 (zwykły random w komputerze),
    wystarczy że wylosujesz kilka(-naście) takich liczb i policzysz ich średnią.

    Im więcej liczb zsumujesz, tym lepsze przybliżenie rozkładu gaussa (normalnego). Wystarczy 10-12 liczb.

    Wartość średnia (0,5) nie ulegnie zmianie, odchylenie std dla sumy 12-tu liczb będzie = 1.

    Nic nie stoi na przeszkodzie aby od wyniku odjąć wartość średnią (0,5), wynik pomnożyć przez żądaną wartość odchylenia std i dodać żądaną wartość średnią.

    I masz gotowy przepis na generator liczb losowych o rozkładzie normalnym o dowolnej wartości średniej i dowolnej wartości odchylenia standardowego...
  • #3 7384068
    mariuszprus
    Poziom 11  
    dziekuje bardzo za odpowiedz miedzy czasie znalazlem ciekawa strona z POlitechniki Poznanskiej o generatorach mam jeszcze jedno pytanko jak mozna taki suzm polaczyc z wartoscia SNR tzn wartosc SNR mamy zadac w programie jako parametr to w jaki sposob bedzie zwiekszac badz zmniejszac wartosc wylosowanej liczby z generatora o rozkaldzie normalnym ?
  • #4 7385102
    __Grzegorz__
    Poziom 30  
    Pewnie, że można.
    Masz sygnał użyteczny o określonej amplitudzie peak to peak.
    Jeżeli amplituda zmienia się w czasie, bierzesz minimalną.
    SNR zwiąże to z wartością amplitudy peak to peak szumu o rozkładzie normalnym
    (=6 do 8 odchyleń standardowych).

    ...
  • #5 7385397
    mariuszprus
    Poziom 11  
    hmm nie do konca rozumiem więc spytam jeszcze konkretniej...

    na wejscie kodera podaje ciag 10101011 ..... (czy moc takiego sygnału mozna potraktować jako rowny 0.5? a jesli nei to jak ??)

    dokonujemy modulacji na 8 PSK

    SNR=10log(Psygwej/Pszumu) w db

    SNR=Eb/No=Es/(k*No) // Eb srednia energia symbolu na bit Es srednia energia symbolu

    czy No jest tym samym co energia czy tez moca szumu?

    Czy symbol oznacza jeden punkt konstelacji?? i jaka jest wtedy jego energia.?

    teraz podajemy np parametr SNR w skali db i z tego np mozemy wyprowadzic wzor na wartosc mocy szumu

    Pszum=Psygn/(10^(SNR/10)) // dobrze?? ewentualnie jak zamienic na skale liniowa?



    i teraz zgodnie z tym co pisałes mam wylosowac jakas liczbe o rozkładzie normalnym czyli biore kilka liczb o rozkladzie rownomiernym i teraz pytanie z jakiego zakresu??
    tak aby ten SNR nam okreslil ta wartosc dodanego pozniej szumu ...?

    w Internecie znalazlem program w ktorym jest to zastosowane ale ja chce to dokaldnie sam zrozumieć

    .
    .
    .
    amp = sqrt(2.0*RATE*pow(10.0,(snr/10.0))); // gdzie rate oznacza

    RATE = (2.0 / (double) n2)*3.0; // 2 bits per symbol if encoder is rate 1/2
    .
    .
    .



    void awgn()
    {
    /* Add AWGN to transmitted sequence */
    double u1,u2,s,noise,randmum;
    int i;

    #ifdef PRINT
    printf("Received = ");
    #endif

    #ifdef NO_NOISE
    received_Q = psk_Q[transmitted];
    return;
    }
    #else
    do
    {
    randmum = (double)(random())/MAX_RANDOM;
    u1 = randmum*2.0 - 1.0;
    randmum = (double)(random())/MAX_RANDOM;
    u2 = randmum*2.0 - 1.0;
    s = u1*u1 + u2*u2;
    } while( s >= 1);

    noise = u1 * sqrt( (-2.0*log(s))/s )/amp;
    received_I = psk_I[transmitted] + noise;


    jesli wyjasnil bys mi te wzory ktore tutaj zostaly zastosowane do losowania oraz okreslenia zakresu szumow za pomoca SNR bede wdzieczny i jestem w stanie postawic piwo jesli bedziesz w POznaniu;:D:D:D:D

    dobrze gdybys ustusunkowal sie tez do tego co pisałem wczesniej tzn tych moich wzorów ;)::)):


    pomocy!!
REKLAMA