# 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 # Here, the problem is formulated as an SOCP in the # original variables h[0],...,h[n-1]. 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 h {0..n-1}; var H_real {o in OMEGA} = h[0] + sum{k in 1..n-1} h[k]*cos(-k*o); var H_imag {o in OMEGA} = sum{k in 1..n-1} h[k]*sin(-k*o); var R {o in OMEGA} = H_real[o]^2 + H_imag[o]^2; minimize stop_band_signal_bnd: alpha; subject to ripple_up_bnds {o in OMEGA_P}: sqrt(R[o]) <= alpha; subject to ripple_lo_bnds {o in OMEGA_P}: 1/alpha <= sqrt(R[o]); subject to stop_bnd_def {o in OMEGA_S}: R[o] <= delta^2; let alpha := 1; let h[0] := 1; solve; display (alpha); printf {o in OMEGA}: "%7.4f %10.3e \n", o, 20*log10(sqrt(R[o])) > lowpass.out;