Hey everyone.
I have a homework and I've never worked in MATLAB before. My script works as it should but the only problem is that I want to put it in a function (by that I mean that I want to write function(Amax, Amin, Fk, Fkappa) and the outputs should be coefficients, magnitude and phase frequency response of the proposed filter. It is basically a script, I will paste the most important stuff here (please ignore the comments, I just needed to comment it in my language)
prompt = 'Zadajte hodnotu Amax [dB] : ' ;Amax = input(prompt) ; prompt1 = 'Zadajte hodnotu Amin [dB] : ' ;Amin = input(prompt1) ; prompt2 = 'Zadajte hodnotu Fkappa [kHz] : ' ;Fkappa = input(prompt2) ; prompt3 = 'Zadajte hodnotu Fk [kHz] : ' ;Fk = input(prompt3) ; omegaK = (Fk/Fkappa) ; Epsilon = sqrt(10^(Amax/10)-1) ; n = ((log10((10^(Amin/10)-1)/(10^(Amax/10)-1))/(2*log10(omegaK)))) ; nz = ceil(n) ; syms s ; vzorec = 1 + Epsilon^2 * s^(2*nz) * (-1)^nz ; % Vzorec na výpočet koreňov
vypocet = solve(vzorec, s) ; % Pomocou funkcie solve vyrátame korene
korene = vpa(vypocet, 4) ; % Numerické aproximačné číselne korene na 4 des. cisla
%display(korene) ; % Vypíše nám korene na command window
X = korene(real(korene)<0) ; % Takto si do premennej X dam tie, kt. majú záporné reálne časti
X1 = double(X) ; % Dám si ich vypísať do X1 ako double (čísla)
syms P ; % Definujeme si premennú P
Gp1 = Epsilon ; % Do Gp1 si priradím Epsilon, pretože mi to inak nešlo
w = P/(2 * pi * Fkappa) ; % w = vzorec ktorý máme v zošite
for i = 1:nz Gp1 = Gp1 * (w - X(i)) ; % vzorec na vypočet Gp (u mňa Gp1)
endGp1 = vpa(Gp1, 4) ; % Znova vpa, korene zaokrúhli na 4 čísla
Gp = expand(Gp1) ; % Expand nám roznásobí Gp (malý lifehack čo som našiel)
Hp = 1/Gp ; % Prenosová funkcia Hp = 1/Gp
Hp = vpa(Hp, 4) ; % Znova nech nám zaokrúhli na 4 čísla
Nasa_Prenosova_Funkcia = Hp % Aby nám vypísalo nasu prenosovú funkciu
koef2 = coeffs(Gp) ; % Beriem si koeficienty z Gp, je to ľahšie ako z Hp
koef1 = fliplr(koef2) ; % Toto mi však vezme aj imag. čast, musim ošetriť:
koef = real(koef1) ; % Do koef si dám iba reálne časti polynómu
Prenosova_Funkcia_Koeficienty = vpa(koef) % Necháme vypísať pre istotu
cit = 1 ; % Citatel nasej prenosovej funkcie je 1
men = double(Prenosova_Funkcia_Koeficienty) ; % menovatel bude číselne z prenosovej funkcie
B = tf(cit, men) ; % tf = prenosová funkcia z čitatela a menovatela
bode(B), grid ; % vykreslenie Bodeho.
It is fully working, I just need to put it in a function, so it can be used in the command window as function(Amax, Amin, Fk, Fkappa) and the outputs should be the Prenosova_Funkcia_Koeficienty and the magnitude and phase frequency response (which is Bode(B).
I tried almost everything but I cannot figure it out.
Thanks for a response.
Best Answer