声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2862|回复: 0

[Fortran] 计算七类窗函数并给出归一化对数幅频曲线

[复制链接]
发表于 2006-8-8 07:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
主程序:
  1. c----------------------------------------------------------------------
  2. c main program HWINDOW: To test subroutine WINDOW
  3. c Please link subroutine WINDOW
  4. C----------------------------------------------------------------------
  5.         dimension w(0:127)
  6.         n=128
  7.         write(*,*)'    Please input Iwindow='
  8.         write(*,*)'    Note: Iwindow=1,2,...,7'
  9.         read(*,*)Iwindow
  10.         call window(w,n,iwindow,ierror)
  11.         write(*,*)'   ierror=',ierror
  12.         if(ierror.ne.0) stop
  13.         open(3,file='window.dat',status='new')
  14.         do 10 k=0,n-1
  15.            write(3,*)k,w(k)
  16. 10      continue
  17.         close(3)
  18.         stop
  19.         end
复制代码


子程序:
  1.       subroutine window(w,n,iwindow,ierror)
  2. c----------------------------------------------------------------------
  3. c  Routine WINDOW: To Obtain Window Function.
  4. c  Input parameters:
  5. c   n      : the length of window data.
  6. c   iwindow: window type desired.
  7. c   if     : iwindow=1: rectangular window ,  =2: triangular window ,
  8. C                   =3: cosin window ,        =4: Hanning window ,
  9. C                   =5: Hamming window ,      =6: Blackman window ,
  10. c                   =7: Papoulis window .
  11. c  Output parameters:
  12. c   w     : N dimensioned real array.the result is in w(0) to w(n-1).
  13. C   ierror:IF IERROR=0: no error,    =1: Iwindow out of range.
  14. c                                      in chapter 8
  15. C----------------------------------------------------------------------
  16.         dimension w(0:n-1)
  17.         ierror=1
  18.         if(iwindow.lt.1.or.iwindow.gt.7) return
  19.         ierror=0
  20.         pi=4.*atan(1.)
  21.         pn=2.*pi/float(n)
  22.         goto (1,2,3,4,5,6,7), iwindow
  23. 1       do 11 i=0,n-1
  24. 11         w(i)=1.
  25.            return
  26. 2       do 12 i=0,n-1
  27. 12         w(i)=1.-abs(1.-2.*i/float(n))
  28.            return
  29. 3       do 13 i=0,n-1
  30. 13         w(i)=sin(pn*i/2.)
  31.            return
  32. 4       do 14 i=0,n-1
  33. 14         w(i)=0.5*(1.0-cos(pn*i))
  34.            return
  35. 5       do 15 i=0,n-1
  36. 15         w(i)=0.54-0.46*cos(pn*i)
  37.            return
  38. 6       do 16 i=0,n-1
  39. 16         w(i)=0.42-0.5*cos(pn*i)+0.08*cos(2.*pn*i)
  40.            return
  41. 7       do 17 i=0,n-1
  42.            a=abs(sin(pn*i))/pi
  43.            b=1.-2.*(abs(i-n/2.))/float(n)
  44.            c=cos(pn*i)
  45. 17         w(i)=a-b*c
  46.            return
  47.            end
复制代码
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-26 00:56 , Processed in 0.058499 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表