找回密码
 注册
关于网站域名变更的通知
查看: 571|回复: 3
打印 上一主题 下一主题

实时fir滤波器的输出长度是否和输入长度一样长?

[复制链接]
  • TA的每日心情
    难过
    2020-4-23 15:10
  • 签到天数: 37 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2019-11-8 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    3 d7 f% H* V+ q" b3 M滤波函数:! W' S; x9 V5 G4 J, V
    #define  NUM_TAPS   48
    $ t: ^) ^9 }% V  h& Y1 F: P#define  NUM_DATA   80; p. P* }2 R& G/ L

    " f6 p, H6 d! h" U. L& Q* p; g3 X3 `7 |' Z
    void floatPointFir(float *x, float *h, short order, float *y, float *w)0 C* U& }1 K* }2 j! _
    {" H9 C: Y6 o& |" C& i
        short i;3 x  V, ^* w0 a% ?8 z. q
        float sum;
    * R5 R5 \9 K1 U w[0] = *x++;                        // Get the current data to delay line
    0 f7 I7 L0 T9 U& `# \ for (sum=0, i=0; i<order; i++)      // FIR filter processing
    8 `6 `1 t4 F" z( ~ {
    + o( J! F+ v* v5 S1 t* C  sum += h * w;  ^; h1 L1 ]1 b
    }7 }0 s/ d! T6 I1 z
    *y++ = sum;                         // Save filter output
    - G" m% L2 Y2 p7 i3 O, M8 o for (i=order-1; i>0; i--)           // Update data delay line
      K+ c3 L0 s. R! l( i {
    ; p$ I8 A0 J5 P9 i" z, ^; k. e  w = w[i-1] ;
    " S  j& |2 q0 ], m }
    4 C7 Z9 S6 W" z& k}
    % V6 ]  O! E- Y& J# S% R  g* G
    ! ~. j  g1 A. F" |8 q& H6 q+ ]% S4 {( \
    测试代码:
    ! u" d9 h' W, wfloat w[NUM_TAPS];
    4 h# J/ N. e- n5 B/ Z, Kvoid main()
    / Z% [$ W" [4 p" j4 a- w{; m+ y/ w5 V( h9 z' u% o
        FILE  *fpIn,*fpOut;
    ' d# k9 w* `  J7 T+ R1 p    short i;
    $ h  X  e% Y# J    char  temp[2];
    / z& z3 g& T+ M: k& C4 }. Y    float x,  // Input data, X' F, b% a/ W0 [
              y;  // Output data
    , a  ~! [) v/ H+ X! Q6 A  
    2 M1 c( c, b/ O( f5 W! p/ ?/ H  }    fpIn = fopen("..\\data\\input.pcm", "rb");
    4 S6 u) C3 B2 M! j8 N    fpOut = fopen("..\\data\\output.pcm", "wb");
    6 T" B/ V& @: ?8 y; N$ h    if (fpIn == NULL)+ R0 k) H9 {/ R( O9 C
        {
    ) s. P% n/ o8 m2 ]/ F9 H& u$ g# `        printf("Can't open input file\n");: n: ]. x2 ]0 \3 I
            exit(0);+ A# g2 G" d4 \  |/ c
        }
    # D* N! c' ?8 z/ P" t- D ! r6 g2 a3 B  O( ^; q
        // Initialize for filtering process8 a6 Y! R2 d1 U8 L( a4 q0 F
        for (i=0; i<NUM_TAPS; i++)% z% G2 X  d. K4 ^7 z3 M
        {( G1 T/ I- q& h4 X8 _
            w = 0.0;
    & @9 M& a( [' p& n    }
    ) t, [* S2 S5 a# U8 \5 \6 j8 m    // Begin filtering the data
    0 ]6 r- y: b% Y7 W( m% V    while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    / ?. M3 q3 c7 f5 k    {  H2 R+ J9 O: {8 q
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    ; D% ~* V! ]' [        // Filter the data x and save output y
    # b$ D) K' a3 W2 ?) b7 k9 L4 _. G        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    - g# D0 F  H6 e        temp[0] = (char)((short)y&0xff);
    2 u- X0 ^7 `1 m: ]5 w! i1 \5 M        temp[1] = (char)(((short)y>>8)&0xff);5 C: F: h7 M' a
            fwrite(&temp, sizeof(char), 2, fpOut);
    5 B8 r& C8 [; M/ d    }; y0 l/ w5 e! i* P
        fclose(fpIn);1 C: p* d/ {  u! L8 x9 {
        fclose(fpOut);8 p5 |$ Q0 O2 V4 \* e0 W/ l0 b
    }9 `" i! d+ t7 L9 Z
    * \) i9 c. F& n6 ^  \6 i

    * d: @% N4 ?2 G3 R
  • TA的每日心情
    难过
    2020-4-23 15:10
  • 签到天数: 37 天

    [LV.5]常住居民I

    3#
     楼主| 发表于 2019-11-25 09:10 | 只看该作者
    怎么看不到回复啊
  • TA的每日心情
    难过
    2020-4-23 15:10
  • 签到天数: 37 天

    [LV.5]常住居民I

    4#
     楼主| 发表于 2019-12-4 09:03 | 只看该作者
    大神们都忙,不屑一顾
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-10 02:29 , Processed in 0.078125 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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