* This is the problem described in Section 5 * of * "FIR Filter Design via Spectral Factorization and Convex Optimization" * S.P. Wu, S. Boyd, and L. Vandenberghe $Set n_small 50 $Set n_big 300 Set i /0*%n_small%/; Set j /0*%n_big%/; Set inside(i) /1*49/; parameter pi ; pi = 4*arctan(1) ; parameter step ; step =pi/%n_big% ; Set omega_a(j) /0*3 / ; Set omega_p(j) /4*%n_big%/ ; Set omega_1(j) /%n_big% / ; Set omega(j) ; omega(j) = omega_a(j)+omega_p(j)+omega_1(j); Positive Variable alpha , r_small[i], R_big[j] ; Variable ripple ; Equation main[j] , ripple_up(j), Defobj ; main[j].. R_big[j] =e= r_small['0'] +sum{i$inside(i),2*r_small[i]*cos((ord(i)-1)*(ord(j)-1)*step)}; Defobj.. ripple=e=alpha; ripple_up(j)$omega_p(j).. R_big[j] =l= sqr(alpha)/((ord(j)-1)*step) ; R_big.lo[j]$omega_p(j) = 1/((ord(j)-1)*step)-0.001 ; alpha.l = 1; model logcheb /all/; solve logcheb using nlp minimaze ripple; parameter a(j),b(j); a(j)$omega_p(j)=sqr(alpha.l)/((ord(j)-1)*step) ; b(j)$omega_p(j)=1/((ord(j)-1)*step)-0.000001 ; file demo /logcheb.txt/; put demo; put "logcheb2.gms/fir_filter_design model output "; put /; put "obj function ripple = "; put ripple.l:20:10, put /; put "variable alpha = "; put alpha.l:20:10, put /; put "--------------------------------"; put /; put " Item i r_small[i] "; put /; put "--------------------------------"; put /; loop(i , put " ", put i.tl:5 put r_small.l[i]:15:8 put /; ); put "--------------------------------------------------------------------"; put /; put " Item j R_big.lo_limit R_big[j] R_big.up_limit"; put /; put "--------------------------------------------------------------------"; put /; loop(j , put " ", put j.tl:5 put b[j]:20:8 put R_big.l[j]:20:8 put a[j]:20:8 put /; );