声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1335|回复: 2

[滤波] 看看我的滤波程序有啥问题,该怎样改进

[复制链接]
发表于 2007-9-15 10:31 | 显示全部楼层 |阅读模式

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

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

x
我是用fortran编的,但是滤波结果与原始数据有较大差别,请高手指点,谢谢了
C       NUMERICAL FILTER 滤波
        
        PARAMETER(MN=5000000)
        DIMENSION AD(MN),DD(MN),IO(MN),DD2(MN)
        CHARACTER FINAME*15,FNA*15,SQUASH*40
        REAL*4    REAL(MN),IMAG(MN)
        OPEN(2,FILE=SQUASH(FINAME//'.800'))   
C        OPEN(12,FILE='AD.DAT')
        
        READ(2,*)(AD(I),I=1,NDH*NTOTAL) !读入数据
*****补零使数据长度为2的N次幂**************      
        MI=1
222     MNT=2**MI
        IF(MNT.LE.NTOTAL) THEN
          MI=MI+1
          GO TO 222
        ELSE        
          DO J=1,NDH
             DO I=NTOTAL+1,MNT
                K1=(I-1)*NDH+J
                K2=(I-2)*NDH+J
                AD(K1)=AD(K2)
             END DO   
           END DO  
           NTOTAL=MNT
        END IF
          
        FN=1/((SCAN)*2.0)
       
        NFREQ=NTOTAL/FN
        DF=2./NFREQ
*****开始滤波******
         IFLT=1 !低通
        IF(IFLT.EQ.1) THEN
           WRITE(*,'(A\)')' ENTER HIGH CUT OFF FREQ.(Hz) : '
C           READ(*,*) FHI   
            FHI=0.02
           NHI=FHI/DF
        END IF
        IF(IFLT.EQ.2) THEN !高通
           WRITE(*,'(A\)')' ENTER LOW CUT OFF FREQ.(Hz) : '
           READ(*,*) FLO
           NLO=FLO/DF
        END IF
        IF(IFLT.EQ.3) THEN !带通
           WRITE(*,'(A\)')' ENTER HIGH CUT OFF FREQ.(Hz) : '
           READ(*,*) FHI
           NHI=FHI/DF
           WRITE(*,'(A\)')' ENTER LOW CUT OFF FREQ.(Hz) : '
           READ(*,*) FLO
           FLO=FLO/DF
        END IF
                    
****************************************************************         
        
        DO J=1,NDH
           DO I=1,NTOTAL
              K=(I-1)*NDH+J
              REAL(I)=AD(K)
              IMAG(I)=0.0
           END DO
           CALL FFT842(0,NTOTAL,REAL,IMAG) !快速fft
           IF (IFLT.EQ.1) THEN
              DO I=NHI+1,NTOTAL
                 REAL(I)=0.0
                 IMAG(I)=0.0
              END DO
           END IF
           IF (IFLT.EQ.2) THEN
              DO I=1,NLO
                 REAL(I)=0.0
                 IMAG(I)=0.0
              END DO
           END IF
           IF (IFLT.EQ.3) THEN
              DO I=NHI+1,NTOTAL
                 REAL(I)=0.0
                 IMAG(I)=0.0
              END DO
              DO I=1,NLO
                 REAL(I)=0.0
                 IMAG(I)=0.0
              END DO
           END IF
           CALL FFT842(1,NTOTAL,REAL,IMAG) !fft反变换
           DO I=1,NTOTAL
              K=(I-1)*NDH+J
              DD(K)=REAL(I)
              
           END DO
        END DO
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-9-15 10:37 | 显示全部楼层

这是滤波结果与原始数据的比较

原始数据与滤波后结果比较

原始数据与滤波后结果比较
 楼主| 发表于 2007-9-15 10:39 | 显示全部楼层
老师说,滤波后信号失真了,我看也是滤波后与原来信号差别较大,请高手指点怎样改进呀
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-17 12:30 , Processed in 0.071998 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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