File: iirlp.sci

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (43 lines) | stat: -rw-r--r-- 1,190 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function [cout,grad,ind]=iirlp(x,ind,p,flag,lambda,omega,ad,wa,td,wt)
//
//optimization of IIR filters IIR with  Lp criterium for magnitude
//                                      and/or group delay
//     -cf Rabiner & Gold pp270-273-
//
//auteur : G. Le Vey
//
//   p ===> critere Lp
//
//r=module des poles et zeros des filtres
//theta=argument des  "    "   "    "    "
//omega=frequences ou sont donnees les specifications des filtres
//wa,wt=fonctions de ponderation pour l'amplitude et le
//retard de groupe ad,td=amplitudes et retard de groupe desires
//!
// Copyright INRIA
r=x(:,1);theta=x(:,2);
[m,n]=size(ad);if m>n,ad=ad';end
[m,n]=size(td);if m>n,td=td';end
[m,n]=size(omega);if m>n,omega=omega';end;
[m,n]=size(r);if n>m,r=r';m=n;end;
[m,n]=size(theta);if n>m,theta=theta';m=n;end;
//
select flag
                case 'a'
//AMPLITUDE
[cout,grad]=iirmod(p,r,theta,omega,wa,ad);
//
                case 'gd'
//RETARD DE GROUPE
[cout,grad]=iirgroup(p,r,theta,omega,wt,td);
//
                 else
//AMPLITUDE ET RETARD DE GROUPE
[la,ga]=iirmod(p,r,theta,omega,wa,ad);
[lt,gt]=iirgroup(p,r,theta,omega,wt,td);
cout=lambda*la+(1-lambda)*lt;
grad=lambda*ga+(1-lambda)*gt;
end;