[Octave/Matlab] Värdmängd hos principialargumentet arg

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

[Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av psynoise »

Jag försöker rita en graf med argument eller fas hos en överföringsfunktion H_AP enligt Octave-koden bifogad nedan. H_AP beskriver ett allpassfilter med fasfördröjning mellan 0 och 2π.

Problemet är att jag vill använda ett principialargumentet med värdmängd inom [0, 2π] istället för [-π, π] vilket är standard i Octave för funktionen arg. Då undrar jag om ni andra känner till några trix eller andra funktioner som jag kan använda mig av för att få önskad värdmängd och då kunna rita grafen snyggt utan hopp som figuren nedan visar?
plot_allpass.png

Kod: Markera allt

f_s = 2*pi;
T = 1/f_s;
w = linspace (0, pi);
W = w*T;

z = e.^(j.*w);

a = 0.9;
b = 0.5;

H_AP = (a - b*(1+a)*z.^-1 + z.^-2) ./ (1 - b*(1+a)*z.^-1 + a*z.^-2);

subplot (2, 1, 1), plot (W ,abs(H_AP))
ylabel ('|H_{AP}(z)|');
xlabel ('\Omega');

subplot (2, 1, 2), plot (W ,arg(H_AP))
ylabel ('arg(H_{AP}(z))');
xlabel ('\Omega');

Df = acos (2*a / (1+2*a));
printf ("Δf = %f\n", Df);

wc = acos(b);
printf("ω_c = %f\n", wc);
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av SvenW »

Går det inte bara med pi+arg(-H_AP) , eller något sådant?
swp
Inlägg: 63
Blev medlem: 31 december 2010, 00:54:56

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av swp »

Inte helt säker på att jag förstått vad du vill göra, men unwrap kanske kan vara något.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av psynoise »

SvenW skrev:Går det inte bara med pi+arg(-H_AP) , eller något sådant?
Tack, det fungerade toppen!

Tänkte aldrig så långt då jag var inställd på att funktionen arg skulle begränsas inom [-π, π] oavsett invärden.

Kod: Markera allt

plot (W ,arg(-H_AP) + pi)
plot_allpass.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av psynoise »

Förresten slutgiltiga koden blev

Kod: Markera allt

plot (W ,arg(-H_AP) - pi)
för att utgå från 0 och ned till - 2π.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av snigelen »

Kanske

Kod: Markera allt

unwrap(angle(H_AP))
kan vara ett alternativ? (arg finns inte i Matlab, därav angle som funkar i både octave och Matlab).
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av psynoise »

psynoise skrev:Tänkte aldrig så långt då jag var inställd på att funktionen arg skulle begränsas inom [-π, π] oavsett invärden.
Vilket den fortfarande är, men det gäller att placera överföringsfunktionen rätt i det komplexa talplanet för att undvika hopp och sedan justera tillbaka efteråt.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: [Octave/Matlab] Värdmängd hos principialargumentet arg

Inlägg av psynoise »

swp och snigelen:
snigelen skrev:Kanske

Kod: Markera allt

unwrap(angle(H_AP))
kan vara ett alternativ? (arg finns inte i Matlab, därav angle som funkar i både octave och Matlab).
Det fungerade också kanon, bra kommando att lägga på minnet helt enkelt. Tack för alla tips.
Skriv svar