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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    1 R* C9 o0 K* G3 _5 a滤波函数:
    8 }1 {) V! M  O  k. e& [; d#define  NUM_TAPS   48
    $ b5 ]4 e* b% U$ ?#define  NUM_DATA   80, X* p# X& y) R" y2 t# Y' `
    % u% @: M, D3 w- Y

    & l6 @# j2 I$ [) Yvoid floatPointFir(float *x, float *h, short order, float *y, float *w)& k( Z+ Q( F# h5 A- w
    {
    ) H7 a+ j- N4 I    short i;$ ?% J3 U  }. W: ^; ]5 h
        float sum;
    1 `1 @1 l5 T1 v w[0] = *x++;                        // Get the current data to delay line1 u# ?8 I! s0 s* s0 Y0 X
    for (sum=0, i=0; i<order; i++)      // FIR filter processing9 K# S" z( R) d/ ~
    {
    6 q2 w; ^6 G9 R$ g, g: S6 J! k( R  sum += h * w;1 T" \; N5 c) |7 t$ O$ V: a
    }/ m  }# t8 D/ t. V
    *y++ = sum;                         // Save filter output
    / o4 z: W& r" T' N0 |0 w/ B1 N for (i=order-1; i>0; i--)           // Update data delay line
    ; b. I; w5 {2 E# u. ], s5 Q" G7 ` {" A9 H* }9 v5 ^0 }; ^
      w = w[i-1] ;
    ' P5 d. [4 P5 e: |) p( e }3 q! P/ [1 f% }! K: f, Y+ @! A( N
    }: g  u. D! X4 e0 `

    . z( ]4 t" T+ ?6 s0 D; {9 ]
    8 o& _2 m3 Z: |# B7 \' g' F2 j测试代码:- b. F8 N3 g# F+ e
    float w[NUM_TAPS];
    $ y2 a/ D# M6 V0 R( {: m) x; evoid main()) B7 p4 k( T& X$ W  l% c( V
    {3 v# ]3 c6 T5 [$ [) |5 B* z
        FILE  *fpIn,*fpOut;4 z$ K' ?, M+ p& S
        short i;5 }- C2 Z; \, `7 V/ `: Y
        char  temp[2];
    3 Q- @  _2 O( s3 U: o. i3 V    float x,  // Input data
    , ]# {6 i$ Q" y) v2 p9 `          y;  // Output data$ c( D$ W$ y, i* Y; j& O. J
      . X% M/ J( m5 W5 F+ ]  Q
        fpIn = fopen("..\\data\\input.pcm", "rb"); 5 T+ X6 C9 E* D1 q# c4 T3 _" R; m' W% Y
        fpOut = fopen("..\\data\\output.pcm", "wb");
    6 u: E6 q' O$ v/ O6 O2 z    if (fpIn == NULL)
    5 z9 u3 v) c/ v. @$ A' K. D/ P    {
      W4 I& W' e3 c3 k* ?        printf("Can't open input file\n");8 j7 y/ k+ F1 ~' H* J  t& O
            exit(0);! R) A4 m0 K+ y3 X' v1 @  r
        }
    7 f% w- }& C) q: n1 }; B - N' d7 h: x; J8 g! ]
        // Initialize for filtering process
    4 s/ @" q" i& d. ~% Z! v; w    for (i=0; i<NUM_TAPS; i++)5 z$ r% \+ L2 w* B, u: m
        {
    5 o3 q) w: ^; i- A) R! d3 T* k        w = 0.0;5 M2 a) a: |- {1 s, Y
        }
    - b3 i! C7 a1 x# o' T& }+ y( K    // Begin filtering the data4 B. o5 x. {+ s8 v  G5 w
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)8 X( a% n, K8 b% D5 `" Q
        {+ q5 `/ g- N/ C( _5 l
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    0 n7 i. F' I2 p# b# k7 r        // Filter the data x and save output y
    ( s5 y" J0 W- p, H" S; a        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    0 Y; K7 ]: P: A7 P. Q        temp[0] = (char)((short)y&0xff);3 [) P, ~# e. P6 ~! r
            temp[1] = (char)(((short)y>>8)&0xff);1 s0 X5 i& g: D9 @
            fwrite(&temp, sizeof(char), 2, fpOut);
    ' O$ L# v$ i* L8 I0 O    }
    1 k2 b1 m$ [$ S/ D    fclose(fpIn);
    ) w, J; B4 i1 z( H    fclose(fpOut);
    6 X6 {3 b4 L- c* k) d! s}
    / y: }; B# }/ d, R/ F$ O
    1 B1 ~. `( z" o6 h+ L4 F# [/ T# t+ ^$ ~% h' O
  • 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-11-25 02:00 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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