설명
이 모델은 유한 임펄스 응답에 대한 필터 가중치를 찾습니다.
(FIR) 필터. 제약 조건에는 회전된 2차 원뿔을 사용합니다.
이 모델은 Lobo의 minimax 선형 위상 저역 통과 필터 설계입니다.
등. al (3.3절) 모델의 비선형 항 1/t를 다음과 같이 모델링합니다.
다음: 변수 u,v를 도입합니다. 여기서 v = 2(그리고 u = 1/t)입니다. 그러면 1/t
2차 원뿔로 모델링할 수 있습니다.
||[v, u-t]|| <= 유+티, 유,티 >=0
제공: Michael Ferris, 위스콘신 대학교 매디슨
소형 모델 유형 :QCP
카테고리 : 피망 슬롯 모델 라이브러리
메인 파일 : fdesign.gms
$title 선형 위상 저역 통과 필터 설계 (FDESIGN,SEQ=379)
$onText
이 모델은 유한 임펄스 응답에 대한 필터 가중치를 찾습니다.
(FIR) 필터. 제약 조건에는 회전된 2차 원뿔을 사용합니다.
이 모델은 Lobo의 minimax 선형 위상 저역 통과 필터 설계입니다.
등. al (3.3절) 모델의 비선형 항 1/t를 다음과 같이 모델링합니다.
다음: 변수 u,v를 도입합니다. 여기서 v = 2(그리고 u = 1/t)입니다. 그러면 1/t
2차 원뿔로 모델링할 수 있습니다.
||[v, u-t]|| <= 유+티, 유,티 >=0
제공: Michael Ferris, 위스콘신 대학교 매디슨
Lobo, MS, Vandenberghe, L, Boyd, S 및 Lebret, H, 응용 분야
2차 콘 프로그래밍. 선형대수학과 그 응용,
제어, 신호 및 이미지의 선형대수학 특별호
처리. 284(1998년 11월).
키워드: 2차 제약조건 프로그래밍, 2차 원뿔 프로그래밍,
엔지니어링, 유한 임펄스 응답 필터 설계
$offText
* N2는 FIR 필터 길이의 절반입니다(즉, 이산화 지점 수).
$설정되지 않은 경우 N2 $set N2 10
스칼라 n2 / %N2% /, 베타 / 0.01 /, 단계, n, omega_s, omega_p;
n = 2*n2;
단계 = pi/180;
omega_s = 2*pi/3;
omega_p = 파이/2;
세트
나는 / 0*179 /
omega_stop(i) / 120*179 /
omega_pass(i) / 0* 90 /
k / 0*%N2% /;
매개변수 오메가(i);
오메가(i) = (ord(i) - 1)*단계;
매개변수 cosomega(i,k);
cosomega(i,k) = cos((ord(k) - 1 - (n-1)/2)*omega(i));
* 반올림 오류로 인해 cos()=0이 누락된 경우 수정
코소메가(i,k)$(abs(cosomega(i,k))<1e-13) = 0;
변수
h(k)
티
v2 '원뿔형 변수 u - t'에 대해
v3 '원뿔형 변수 u + t에 대해';
양수 변수 u, v, v3;
방정식
passband_up_bnds(i)
콘_lhs, 콘_rhs
그래서
passband_lo_bnds(i)
stopband_bnds(i)
stopband_bnds2(i);
passband_up_bnds(i)$omega_pass(i)..
2*sum(k$[ord(k) < 카드(k)], h(k)*cosomega(i,k)) =l= t;
cone_rhs.. v2 =e= u - t;
cone_lhs.. v3 =e= u + t;
* MOSEK에 대한 명시적 원뿔 구문
* 그러니까.. v3 =c= v + v2;
그래서.. sqr(v3) =g= sqr(v) + sqr(v2);
passband_lo_bnds(i)$omega_pass(i)..
u =l= 2*sum(k$[ord(k) < 카드(k)], h(k)*cosomega(i,k));
stopband_bnds(i)$omega_stop(i)..
-beta =l= 2*sum(k$[ord(k) < 카드(k)], h(k)*cosomega(i,k));
stopband_bnds2(i)$omega_stop(i)..
2*sum(k$[ord(k) < 카드(k)], h(k)*cosomega(i,k)) =l= 베타;
t.lo = 1;
v.fx = 2;
모델 fir_socp / all /;
t를 최소화하는 qcp를 사용하여 fir_socp를 해결합니다.
스칼라 최소최대;
if(t.l > 0, minimax = 20*log10(t.l));
최소값 표시, h.l, t.l, u.l;