# This is the problem whose solution is shown in Figure 2 # of # "FIR Filter Design via Spectral Factorization and Convex Optimization" # S.P. Wu, S. Boyd, and L. Vandenberghe # In this variant we fix delta and minimize alpha param n := 30; param N := 100; param pi := 4*atan(1); param delta := 0.0016; param omega_p := 0.12*pi; param omega_s := 0.24*pi; set OMEGA_P := {0..omega_p by pi/N}; set OMEGA_S := {omega_s..pi by pi/N}; set OMEGA_I := {omega_p..omega_s by pi/N}; set OMEGA := OMEGA_P union OMEGA_S union OMEGA_I; var alpha >= 0; var r {0..n-1}; var R {o in OMEGA} = r[0] + sum{k in 1..n-1} 2*r[k]*cos(k*o); minimize stop_band_signal_bnd: alpha; subject to ripple_up_bnds {o in OMEGA_P}: R[o] <= alpha; subject to ripple_lo_bnds {o in OMEGA_P}: 1/alpha <= R[o]; subject to stop_bnd_def {o in OMEGA_S}: R[o] <= delta^2; subject to nonneg_spectrum {o in OMEGA}: R[o] >= 0; let alpha := 1; solve; display sqrt(alpha); printf {o in OMEGA: R[o]>0}: "%7.4f %10.3e \n", o, 20*log10(sqrt(R[o])) > lowpass.out;