Sida 1 av 1

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

Postat: 15 juni 2013, 12:58:45
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);

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

Postat: 15 juni 2013, 13:12:56
av SvenW
Går det inte bara med pi+arg(-H_AP) , eller något sådant?

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

Postat: 15 juni 2013, 13:23:19
av swp
Inte helt säker på att jag förstått vad du vill göra, men unwrap kanske kan vara något.

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

Postat: 15 juni 2013, 13:26:18
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

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

Postat: 15 juni 2013, 13:30:08
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π.

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

Postat: 15 juni 2013, 13:31:05
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).

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

Postat: 15 juni 2013, 13:36:15
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.

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

Postat: 15 juni 2013, 13:38:20
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.