File: chebc.f

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (72 lines) | stat: -rw-r--r-- 1,940 bytes parent folder | download | duplicates (7)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
C/MEMBR ADD NAME=CHEBC,SSI=0
      subroutine chebc(ordr,dp,beta,x0,er)
c
c!
c sous-programme:  chebc
c sert a generer les parametres de la fenetre de chebyschev lorsqu'un de
c ceux-ci est manquant ( un et un seul ! )
c en double precision
c acheve le 05/12/85
c ecrit par philippe touron
c
c
c
c                  parametres entrants ou sortants
c                 -------------------------------
c ordr, ordr du filtre (entier)
c beta, la largeur du lobe principal (reelle variant entre 0.et 1.)
c dp, attenuation en absolu calculee a partir de alph (reelle)
c ces trois parametres ne peuvent etre nuls simultanements
c
c                  parametre sortant
c                 -----------------
c x0, constante de la fenetre  de chebyschev (reelle)
c     =(3-c0)/(1+c0) avec c0=cos(2*pi*beta)
c er, flag erreur (entier)
c
c                  variables internes
c                 ------------------
c xn=ordr-1
c c0, c1 buffers de calcul (reels)
c sous programmes appele: coshin
c
c!
c
      double precision pi,dp,beta
      double precision x0,xn,c1,c0,xordr
      double precision coshin
      integer ordr,er
      pi=acos(-1.0d+0)
c
c dp et beta  sont specifies, on determine l'ordr
c
      if(ordr.ne.0)goto 10
      if(dp.eq.0.0d+0.or.beta.eq.0.0d+0)er=7
      if(er.gt.0)goto 40
      c1=coshin((1.0d+0+dp)/dp)
      c0=cos(pi*beta)
      xordr=1.0d+0+c1/coshin(1.0d+0/c0)
      ordr=int(xordr)+1
      goto 30
c
c ordr et dp sont specifies, on determine beta
c
10    if(beta.ne.0.0d+0)goto 20
      if(dp.eq.0)er=7
      if(er.gt.0)goto 40
      xn=dble(ordr)-1.0d+0
      c1=coshin((1.0d+0+dp)/dp)
      c0=cosh(c1/xn)
      beta=(acos(1.0d+0/c0))/pi
      goto 30
c
c ordr et beta sont specifies, on determine dp
c
20    xn=dble(ordr)-1.0d+0
      c0=cos(pi*beta)
      c1=xn*coshin(1.0d+0/c0)
      dp=1.0d+0/(cosh(c1)-1.0d+0)
30    x0=(3.0d+0-cos(2.0d+0*pi*beta))/(1.0d+0+cos(2.0d+0*pi*beta))
40    continue
      return
      end