Ogłoszenie

Collapse
No announcement yet.

odtwarzanie sygnału ciągłego z próbek.

Collapse
X
 
  • Filtr
  • Czas
  • Pokaż
Clear All
new posts

    odtwarzanie sygnału ciągłego z próbek.

    Mam problem, muszę odtworzyć syg. z próbek. Próbkowałem sinusoidę 100Hz A=5,5V z różnymi f i na podstawie próbek mam odzyskać syg. ciągły. Dla przykładu próba dla f próbkowania 6,4kHz. Sygnał próbuje odzyskać w matlabie na podstawie wzoru 6,5 z http://www.ise.pw.edu.pl/~szabatin/ps.pdf
    w drugim źródle mam wzór który wg mnie nie jest równoważny powyższemu
    http://www.ztmapc.el.pcz.pl/stud/dsp/dsp-wyklad.pdf
    str 34 , gdzie traci się 2 pi ?

    kod skryptu :

    %sin_64
    s=[ -5.4395 -5.2844 -5.0879 -4.8401 -4.5447 -4.1992 -3.8147 -3.4009 -2.9541 -2.4780 -1.9751 -1.4514 -0.9167 -0.3723 0.1697 0.7141 1.2488 1.7737 2.2839 2.7710 3.2288 3.6523 4.0479 4.3945 4.7107 4.9707 5.1892 5.3564 5.4639 5.5298 5.5408 5.4883 5.3918 5.2368 5.0403 4.7913 4.4958 4.1479 3.7671 3.3557 2.9077 2.4316 1.9312 1.4075 0.8716 0.3259 -0.2136 -0.7605 -1.2964 -1.8176 -2.3303 -2.8198 -3.2788 -3.7012 -4.0967 -4.4446 -4.7620 -5.0220 -5.2405 -5.4053 -5.5127 -5.5774 -5.5920];

    fn=3200;
    fm = 64*100;
    n=numel(s);
    t = 0 : 0.00000001 : 0.01;
    y=0;
    for i=1:1:n
    y=s(i)*sinc(2*pi*fn*(t-(i-1)/fm))+y;
    end;
    plot(t,y)
    grid on

    gdzie:
    s -wartości próbek
    fn- f Nyquista
    fm- f próbkowania

    to co otrzymałem ma obwiednie mojego syg, ale jest przesunięte w fazie(względem org. (to na razie pomijam) ) i jeszcze to wypełnienie...

    czy jakiś znawca przetwarzania sygnałów mógłby mi wytknąć błędy, bo już się z tym prawie miesiąc męczę??
    Załączone pliki
    Last edited by kurdzio; 30.11.2011, 11:06.

    #2
    Nie jestem znawcą, ale wydaje mi się że powinno to wyglądać tak:
    -wg wzoru z prezentacji występuje tylko częstotliwość próbkowania, zatem wartość y w chwili t powinna wynosić "y=s(i)*sinc(fm*(t-(i-1)/fm))+y;" bez 2*pi i z częst. próbkowania fm. Wtedy dostajesz chyba to co powinno wyjść
    Natomiast nie pasuje mi ten wzór z szabatina, tzn wychodzi to co Tobie. Niby oba powinny być poprawne ale pominęliśmy jakieś założenia. Jak będę miał więcej czasu to spróbuję to rozgryźć.

    Skomentuj


      #3
      Już to rozgryzłem. Matlab nie interpretuje funkcji Sa jako sinc(nie wiem czemu). Wzór który podałeś działa i z niego korzystam, ale dzięki za odpowiedz. Mam nowy problem, w załączniku wygenerowany jest syg. sin idealny i jego rekonstrukcja. Nie wiem jak się pozbyć tego zniekształcenia na końcu lub jak je wyjaśnić, w 2 załączniku to samo dla prostokąta. Prostką 100Hz, widmo ograniczone do 7 harmonicznej, efekt Gibbsa rozumiem, tylko czemu tak przesuwa przy ostatniej próbce?
      Załączone pliki

      Skomentuj


        #4
        Rzeczywiście winą było sinc, a raczej to że w matlabie jest to po prostu sin(pi*x)/pi*x.
        Dzięki temu to nie miało prawa normalnie działać. Natomiast na tej prezentacji zostało to wcześniej "podstawione". Zauważ że jeśli potraktujesz Sa(x) jako sin(x)/x to wyjdzie Ci wzorek z Szabatina - czyli wzorki są równoważne. Dzięki że się podzieliłeś, bo długo by mi zajęło zanim bym wpadł na to :)
        Odnośnie tego zniekształcenia to trudno mi powiedzieć. Nic sensownego nie przychodzi mi do głowy, ale częstotliwość odtworzonego jest po prostu inna, nie obcina ostatniej próbki. Jak możesz to pokaż jeszcze kilka okresów tego prostokąta.

        Skomentuj


          #5
          jeżeli zrobię więcej okresów to nic nie zobaczysz bo nie będzie próbek dla tych czasów, jak wygeneruje więcej próbek to cały efekt się przesunie. jeśli masz matlaba to mogę wrzucić skrypty
          Załączone pliki

          Skomentuj


            #6
            Nie znam składni matlaba, ale mam wrażenie, że tam jest po prostu błąd w pętli zliczającej -- jeden obieg za mało albo za dużo?

            Skomentuj


              #7
              jeżeli w matlabie ustawie przebieg o okresie np. 0,16s dla prostokąta jak wyżej to w pkt 0,16 jest znowu st. wysoki i taka jest wartość próbki. oczywiście mogę ręcznie zmienić wartość lub przyciąć okres próbkowania do np.0,159

              Skomentuj


                #8
                Zauważyłem taką rzecz, mianowicie dla tego sinusa na samym początku (na nim tylko testowałem) masz tak na prawdę 63 (n-1) próbek a próbkujesz z częstotliwością 6,4 kHz. Jeżeli dopiszesz jedną próbkę, albo zmniejszysz częstotliwość próbkowania o 0,1 kHz to wszystko jest cycuś malina

                Skomentuj


                  #9
                  wielkie dzięki teraz to są wykresy jak w pysk strzelił:thumbsup:

                  Skomentuj


                    #10
                    Atomizer czy mógłbyś wrzucić foto jak Tobie udało się odwzorować przebieg z pierwszego postu? wykorzystałem Twoja sugestię i w stosunku do przebiegu idealnego w ML działa, ale dla próbek z labo dalej mam coś nie tak..
                    Załączone pliki

                    Skomentuj


                      #11
                      Wychodzi mi dokładnie ten sam wykres. Natomiast skopiowałem próbki tak żeby otrzymać 2 i więcej okresów tego sygnału i te zafalowania występują tylko na końcach. Nie jestem pewny ale mam taką hipotezę że to ostatnie "podciągnięcie" do zera spowodowane jest tym że matlab chce przejść płynnie z ujemnej amplitudy do dalszych wartości które są w wektorze y (które oscylują wokół zera). Natomiast te oscylacje to wpływ również nazwijmy to ogonów funkcji Sa, które nie mają być czym zrównoważone (suma jest skończona). Nie dam jednak nic uciąć, że to na pewno o to chodzi, ale myślę że to co otrzymałeś jest raczej poprawne z założeniami.

                      Skomentuj

                      Czaruję...
                      X