# This version is correct! # length 19 (-9,...,9) linear phase FIR filter param n := 10; param N := 300; param pi := 4*atan(1); param eps := 1.0e-6; set NU_P := {0.0..0.2 by 1/N} union {0.8..1.0 by 1/N}; set NU_S := {0.3..0.7 by 1/N}; set NU_I := {0.2..0.3 by 1/N} union {0.7..0.8 by 1/N}; set NU := NU_P union NU_S union NU_I; var rho >= 0; var h_real {0..n-1}; var h_imag {1..n-1}; var H {nu in NU} = h_real[0] + 2* sum {k in 1..n-1} (h_real[k]*cos(-2*pi*k*nu) - h_imag[k]*sin(-2*pi*k*nu)); minimize power_bnd: rho; subject to passband: sqrt(sum {nu in NU_P} (H[nu]-1)^2) <= sqrt(0.4*N)*rho; subject to stopband: sqrt(sum {nu in NU_S} H[nu]^2) <= sqrt(0.4*N*eps); let h_real[0] := 2; solve; printf {nu in NU}: "%7.4f %10.3e \n", nu, 20*log10(abs(H[nu])) > 2.out;