Forum Forum studentów IV roku EiT Politechniki Śląskiej Strona Główna

Forum studentów IV roku EiT Politechniki Śląskiej

 

Laborka nr 2
Idź do strony 1, 2, 3  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum Forum studentów IV roku EiT Politechniki Śląskiej Strona Główna -> Semestr 4 / PPS
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Zack de la Rocha




Dołączył: 10 Lis 2007
Posty: 187
Przeczytał: 0 tematów


PostWysłany: Nie 15:56, 22 Mar 2009    Temat postu: Laborka nr 2

Jak ktos potrzebuje to skrypt do matlaba do 2 laborki:

Kod:
clc
clear

syms s k t

n = 25;

I1 = 1;
N1 = 1;
LN = 7;
LI = 9;

f = 100* (1 + (I1-N1)/10);
L = 10/f * (1 - (I1-N1)/10);
C = 1/(10^5 * f);
w0 = 2*pi*f;
T = 1 / f;
ti = 0;
fsin = 1200*(N1+I1);

XL = s*L;
XC = 1/(s*C);
R = 250;

Ku =  ((XC * R) / (XC + R)) / (XL + (XC * R) / (XC + R));
disp('Funkcja transmitancji:');
disp(simplify(Ku));
disp('Wartosc symboliczna transmitancji:');
s = j*w0;
disp(subs(Ku));

%ustalic kolejnosc funkcji
f2 = N1/LN * sin(2*pi*fsin*t+pi/I1); %b
f4 = 0; %d
f1 = 200 * abs(N1 - 0.55 * I1) * (t - ti) - LN / (LI + LN); %a
f3 = 1/4 * (N1+I1); %c

c01 = 2/T * int(f1*Ku, t, 0, (1/4)*T);
c02 = 2/T * int(f2*Ku, t, (1/4)*T, T/2);
c03 = 2/T * int(f3*Ku, t, T/2, (3/4)*T);
c04 = 2/T * int(f4*Ku, t, (3/4)*T, T);

c0 = (c01 + c02 + c03 + c04)/2;

disp('Skladowa stala:');
disp(subs(c0));

for k = 1:n
   
    e = exp(-j*k*w0*t);

ck1 = 2/T * int(f1*e*Ku, t, 0, (1/4)*T);
ck2 = 2/T * int(f2*e*Ku, t, (1/4)*T, T/2);
ck3 = 2/T * int(f3*e*Ku, t, T/2, (3/4)*T);
ck4 = 2/T * int(f4*e*Ku, t, (3/4)*T, T);


    c = subs(ck1 + ck2 + ck3 + ck4);
    amplituda = (sqrt(real(c)^2+imag(c)^2));
    faza =atan(imag(c)/real(c));
    if( real(c) < 0)
    faza = faza + pi;
    end
   
   disp(sprintf('Harmoniczna: %d\nWynik: %f +%fi\nAmplituda: %f\nFaza: %f \n\n', k, real(c), imag(c), amplituda,  faza*(180/pi))); 

end


Jak sa jakies bledy to pisac Wesoly


Ostatnio zmieniony przez Zack de la Rocha dnia Nie 23:51, 22 Mar 2009, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
chmurli




Dołączył: 17 Gru 2007
Posty: 24
Przeczytał: 0 tematów

Skąd: /dev/null

PostWysłany: Nie 17:18, 22 Mar 2009    Temat postu:

chyba zle liczysz faze. w tym pragramie z pierwszej labki tez byla faza zle liczona. trzeba sprawdzac w ktorej cwiartce lezy liczba zespolona



Kod:

clc
clear

syms s k t

n = 25;

N1 = 3;
I1 = 2;
LN = 6;
LI = 7;

f = 100* (1 + (I1-N1)/10);
L = 10/f * (1 - (I1-N1)/10);
C = 1/(10^5 * f);
w0 = 2*pi*f;
T = 1 / f;
ti = T/2;
fsin = 1200*(N1+I1);

XL = s*L;
XC = 1/(s*C);
R = 250;

Ku =  ((XC * R) / (XC + R)) / (XL + (XC * R) / (XC + R));
disp('Funkcja transmitancji:');
disp(simplify(Ku));
disp('Wartosc symboliczna transmitancji:');
s = j*w0;
disp(subs(Ku));

%ustalic kolejnosc funkcji
f4 = N1/LN * sin(2*pi*fsin*t+pi/I1); %b
f2 = 0; %d
f3 = 200 * abs(N1 - 0.55 * I1) * (t - ti) - LN / (LI + LN); %a
f1 = 1/4 * (N1+I1); %c

c01 = 2/T * int(f1*Ku, t, 0, (1/4)*T);
c02 = 2/T * int(f2*Ku, t, (1/4)*T, T/2);
c03 = 2/T * int(f3*Ku, t, T/2, (3/4)*T);
c04 = 2/T * int(f4*Ku, t, (3/4)*T, T);

c0 = (c01 + c02 + c03 + c04)/2;

disp('Skladowa stala:');
disp(subs(c0));

for k = 1:n
   
    e = exp(-j*k*w0*t);

ck1 = 2/T * int(f1*e*Ku, t, 0, (1/4)*T);
ck2 = 2/T * int(f2*e*Ku, t, (1/4)*T, T/2);
ck3 = 2/T * int(f3*e*Ku, t, T/2, (3/4)*T);
ck4 = 2/T * int(f4*e*Ku, t, (3/4)*T, T);


    c = subs(ck1 + ck2 + ck3 + ck4);
    amplituda = (sqrt(real(c)^2+imag(c)^2));
    faza =atan(imag(c)/real(c));

    if( real(c) > 0)
        if( imag(c) > 0)
            faza = subs(atan(abs(imag(c))/abs(real(c))));
        end
        if( imag(c) < 0)
            faza = subs(-atan(abs(imag(c))/abs(real(c))));
        end
    end
   
    if( real(c) <0> 0)
            faza = subs(pi-atan(abs(imag(c))/abs(real(c))));
        end
        if( imag(c) <0> 90 )
        faza=faza-180;
    end
    if( faza < -90 )
        faza=faza+180;
    end
   
   
   
   disp(sprintf('Harmoniczna: %d\nWynik: %f +%fi\nAmplituda: %f\nFaza: %f \n\n', k, real(c), imag(c), amplituda,  faza));

   
   
   
 
end


Ostatnio zmieniony przez chmurli dnia Nie 17:19, 22 Mar 2009, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
dominikk




Dołączył: 07 Sty 2009
Posty: 126
Przeczytał: 0 tematów


PostWysłany: Nie 18:31, 22 Mar 2009    Temat postu:

Funkcja transmitancji:
519460313115660973506560000/(170005193383307227693056*s+3863754395075163375*s^2+519460313115660973506560000)
chyba robię coś źle... WesolyWesolyWesolyWesoly
Powrót do góry
Zobacz profil autora
Timon




Dołączył: 10 Paź 2007
Posty: 548
Przeczytał: 0 tematów


PostWysłany: Nie 20:33, 22 Mar 2009    Temat postu:

Jak to jest liczone? nie przypadkiem źle?
mnie sie zdaje że najpierw liczymy harmoniczne a dopiero później mnożymy przez Ku nie?


PS . A po za tym te KU jest inne dla każdej harmonicznej nie?


Ostatnio zmieniony przez Timon dnia Nie 20:42, 22 Mar 2009, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zack de la Rocha




Dołączył: 10 Lis 2007
Posty: 187
Przeczytał: 0 tematów


PostWysłany: Nie 21:06, 22 Mar 2009    Temat postu:

Co do fazy to wydaje mi się, że na PE było coś takiego, że kiedy część rzeczywista jest mniejsza od 0 to wystarczy dodać poprawkę + PI, ale mogę się mylić. Zaraz poszukam w Bolkowskim.

Borys:
No masz racje,że powinno się zmieniać Ku dla częstotliwośc, ale z przemnażaniem nie masz racji, bo dla danej częstotliwości Ku to stała i nie ma znaczenia czy przemnożymy przed czy po całkowaniu Wesoly

Trzeba w pętli dać:

s = j*w0*k;

I chyba będzie działaćWesoly. Mam jeszcze tydzień do mojej laborki i za bardzo się w to nie wgłebiałem.

Ed.

Co do fazy to dobrze ją liczy, wystarczy dodać poprawkę gdy część rzeczywista jest ujemna:
[link widoczny dla zalogowanych]


Ostatnio zmieniony przez Zack de la Rocha dnia Nie 21:14, 22 Mar 2009, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
chmurli




Dołączył: 17 Gru 2007
Posty: 24
Przeczytał: 0 tematów

Skąd: /dev/null

PostWysłany: Nie 21:53, 22 Mar 2009    Temat postu:

@Zack de la Rocha

EDIT:
niewazne juz Wesoly
oba sposoby sa ok


tylko sie pomylilem w jednym fragmencie, poprawione:


Kod:
if( faza > 360 )
        faza=faza-360;
    end
    if( faza < -360 )
        faza=faza+360;
    end


Ostatnio zmieniony przez chmurli dnia Pon 1:32, 23 Mar 2009, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
exti
Moderator



Dołączył: 14 Paź 2007
Posty: 353
Przeczytał: 0 tematów

Skąd: Zawiercie

PostWysłany: Nie 23:52, 22 Mar 2009    Temat postu:

Oczywiście na początku skryptu trzeba podstawić do zmiennej ti odpowiednią wartość, nie zawsze jest to T/2. Ściślej mówiąc, ti to miejsce, gdzie zaczyna się funkcja a, więc jeśli ktoś ma ją jako pierwszą, to musi dać ti=0.
Powrót do góry
Zobacz profil autora
Timon




Dołączył: 10 Paź 2007
Posty: 548
Przeczytał: 0 tematów


PostWysłany: Śro 22:38, 01 Kwi 2009    Temat postu:

Jak już wrzucacie skrypty to zadbajcie chociaż aby były poprawnie liczone...

Kod:
clc
clear

syms s k t

n = 25;

N1 =
I1 =
LN =
LI =
ti =


f = 100* (1 + (I1-N1)/10);
L = (10/f) * (1 - (I1-N1)/10);
C = 1/(10^5 * f);
w0 = 2*pi*f;
T = 1 / f;
fsin = 1200*(N1+I1);
R = 250;


disp('Wartosc symboliczna transmitancji:');
disp('C:');
disp(subs(C));
disp('L:');
disp(subs(L));

%ustalic kolejnosc funkcji
f2 = N1/LN * sin(2*pi*fsin*t+pi/I1);
f4 = 0;
f1 = 200 * abs(N1 - 0.55 * I1) * (t - ti) - LN / (LI + LN);
f3 = 1/4 * (N1+I1);



c01 = 2/T * int(f1, t, 0, (1/4)*T);
c02 = 2/T * int(f2, t, (1/4)*T, T/2);
c03 = 2/T * int(f3, t, T/2, (3/4)*T);
c04 = 2/T * int(f4, t, (3/4)*T, T);

%NAJLEPIEJ WYWALIC TAM GDZIE JEST CALKA Z '0'
%c0 = (2/T)*(c01 + c02 + c03 + c04);

c0 = (2/T)*(c02 + c03 + c04);
disp('Skladowa stala:');
disp(subs(c0));
for k = 1:n
   
    e = exp(-j*k*w0*t);
Kabs = abs(R/(((j*k*w0)^2)*R*L*C  + (j*k*w0)*L + R));
ck1 =  int(f1*e, t, 0, (1/4)*T);
ck2 =  int(f2*e, t, (1/4)*T, T/2);
ck3 =  int(f3*e, t, T/2, (3/4)*T);
ck4 =  int(f4*e, t, (3/4)*T, T);

    %NAJLEPIEJ WYWALIC TAM GDZIE JEST CALKA Z '0'
    %c = (2/T)* subs(ck1 + ck2 + ck3 + ck4)*Kabs;
   
    c =(2/T) * subs(ck2 + ck3 + ck4)*Kabs;
    amplituda = abs(c);
    b=((((j*k*w0)^2)*R*L*C  + (j*k*w0)*L + R)/R);
   
    f1 =atan(imag(c)/real(c))- atan(imag(b)/real(b)) ;
    faza= f1;
    if( real(c) < 0)
    faza = faza + pi;
    end

   disp(sprintf('Harmoniczna: %d\nWynik: %f +%fi\nAmplituda: %f\nFaza: %f \n\n', k, real(c), imag(c), amplituda,  faza*(180/pi)-90  ));

end


Najlepiej jest sobie te dane od razu wklepac w domu i przeslac na serwer bo jak te dane bedziesz mial na kartce to moga byc niepotrzebne uciecia a liczba 0.00586827 różni się sporo od 0.006 także dokładność jest baardzo ważna w tym zadaniu. pzdro.[/code]

EDIT: kod poprawiony teraz sobie mozna kopiowac


Ostatnio zmieniony przez Timon dnia Czw 7:07, 02 Kwi 2009, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
GREY




Dołączył: 07 Paź 2007
Posty: 634
Przeczytał: 0 tematów

Skąd: Żory/DS Ondraszek

PostWysłany: Śro 23:38, 01 Kwi 2009    Temat postu:

Przyganial kociol garnkowi.


Kod:
??? Undefined function or variable 'Ku'.

Error in ==> borys at 25
disp(Ku);
Powrót do góry
Zobacz profil autora
Timon




Dołączył: 10 Paź 2007
Posty: 548
Przeczytał: 0 tematów


PostWysłany: Czw 7:04, 02 Kwi 2009    Temat postu:

No to usun ta linijke z Ku. ona i tak nie jest potrzebna. na koniec pousuwalem to co bylo zbedne, ale widocznie nie usunalem wszystkiego.
Powrót do góry
Zobacz profil autora
zaix




Dołączył: 24 Lut 2008
Posty: 238
Przeczytał: 0 tematów


PostWysłany: Czw 20:35, 02 Kwi 2009    Temat postu:


Cytat:
c0 = (2/T)*(c02 + c03 + c04);

No chyba w snach... po co mnozyc to drugi raz przez 2/T? Powinno byc raczej c0 = (c02 + c03 + c04)/2
Powrót do góry
Zobacz profil autora
Zack de la Rocha




Dołączył: 10 Lis 2007
Posty: 187
Przeczytał: 0 tematów


PostWysłany: Czw 20:57, 02 Kwi 2009    Temat postu:

Przecież napisałem w pierwszym poście, że nie gwarantuję, że jest dobrze i proszę o sprawdzenie inne osoby? Nie wiem czemu sie napinasz Wesoly

Mozesz skorzystac z funkcji angle(), ktora zwraca argument (kat fazowy) liczby zespolonej. Abs() zwraca moduł, ale tą funkcję już użyłeś.

Nie rozumiem tez dlaczego robisz modul z transmitacji. Nie bylem na ostatnim wykladzie i jezeli koles tak kazal robic to ok. Ja czegos takiego w zadnej ksiazce nei moglem znalezc.

A co do poprawnosci liczenia skryptu, to zaproksymowalismy sygnal za pomoca wyznaczonych przez niego wspolczynnikow i Grzechta powiedzial, ze wyglada to dobrze ale trzeba jeszcze pozmianiac ilosc probkowan w kazdym sygnale i powinno sie zgadzac. Tak to wyglada:

[link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
Timon




Dołączył: 10 Paź 2007
Posty: 548
Przeczytał: 0 tematów


PostWysłany: Pią 11:52, 03 Kwi 2009    Temat postu:

To jakbyscie mieli z półką to by za takie wykres zjechałby was od góry do dołu przynajmniej mnie zjechał bo miałem podobnie... i powiedział że ten wykres aproksymowany to wcale nie podobny
Powrót do góry
Zobacz profil autora
beer87




Dołączył: 21 Paź 2007
Posty: 249
Przeczytał: 0 tematów


PostWysłany: Sob 11:49, 04 Kwi 2009    Temat postu:

co do tego skryptu to wyskakuja mi takie błędy...


Cytat:
Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In D:\MATLAB6p5\work\zx.m at line 65
Harmoniczna: 4
Wynik: 0.000000 +0.000000i
Amplituda: 0.000000
Faza: NaN


??? Input argument 'NEWexpr' is undefined.

Error in ==> D:\MATLAB6p5\toolbox\symbolic\@sym\subs.m
On line 103 ==> error(inputchk(OLDf,OLDexpr,NEWexpr));

Error in ==> D:\MATLAB6p5\work\zx.m
On line 61 ==> c =(2/T) * subs(ck2 + ck3 + ck4)*Kabs;
wiecie może o co kaman ?
Powrót do góry
Zobacz profil autora
L3oN




Dołączył: 31 Paź 2007
Posty: 517
Przeczytał: 0 tematów


PostWysłany: Nie 13:48, 05 Kwi 2009    Temat postu:

Co do tego skryptu... nie zapomniał autor o tym, że wartość transmitancji filtru zmienia się z częstotliwością?
EDIT: tu moja, poprawiona wersja - wygląda na to, że dająca wyniki zgodne z prawdą: [link widoczny dla zalogowanych]
Podaje od razu fazy jakie trzeba wpisać do MCS (dla sinusów czyli +90 stopni)


Ostatnio zmieniony przez L3oN dnia Nie 16:00, 05 Kwi 2009, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Forum studentów IV roku EiT Politechniki Śląskiej Strona Główna -> Semestr 4 / PPS Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2, 3  Następny
Strona 1 z 3

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
deox v1.2 // Theme created by Sopel & Download

Regulamin