• Witamy w największym polskim serwisie internetowym poświęconym w całości zagadnieniom samodzielnej budowy nagłośnienia.
    Dzięki DIYaudio.pl poznasz zagadnienia samodzielnej budowy nagłośnienia od podszewki oraz będziesz mógł dyskutować o DIY audio do woli.

    Artykuły z dawnego portalu zostały przeniesione do sekcji forum na samym dole.

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

Rejestracja
Maj 2, 2008
Postów
119
Reakcji
0
Lokalizacja
...
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łączniki

  • f64.png
    f64.png
    7.4 KB · Wyświetleń: 0
Ostatnia edycja:
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źć.
 
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łączniki

  • 400Hz.png
    400Hz.png
    10.6 KB · Wyświetleń: 0
  • 1600.png
    1600.png
    8.1 KB · Wyświetleń: 0
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.
 
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łączniki

  • 6400.png
    6400.png
    8.1 KB · Wyświetleń: 0
  • 2okr.png
    2okr.png
    7.7 KB · Wyświetleń: 0
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?
 
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
 
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 :D
 
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łączniki

  • sin 64f.png
    sin 64f.png
    7 KB · Wyświetleń: 0
  • sin_64f.JPG
    sin_64f.JPG
    96.7 KB · Wyświetleń: 0
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.
 
Powrót
Góra