N = 40; %滤波器为40阶
M = 201;%取点数
wp = 0.3*pi;%通带截止频率
ws = 0.4*pi;%阻带起始频率
w =linspace(0,pi,M)';%在0~π之间取M个点
c = (cos(w*[0:(N-1)]));
s = (sin(w*[0:(N-1)]));
Hd = zeros(M, 1);
a = find(w
Hd(a) = 1*exp(-j*15*w(a));%理想的通带
Hd(b) = 0;%理想的阻带
Hr = real(Hd);%取实部
Hi = -imag(Hd);%取负的虚部
%算法部分:
Q = [];
p = [];
Inx = find((w <= wp) | (w >= ws));
x = sdpvar(N,1);
t = sdpvar(1,1);
F = [];
for r = 1:1:length(Inx)
Q = [c(Inx(r), :); s(Inx(r), :)];
p = [Hr(Inx(r)); Hi(Inx(r))];
F = F + set('||Q*x-p|| < t');
end
sol = solvesdp(F, t);%求解
x = double(x);
fvtool(x);