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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    # ?! K  X7 U2 h' N% J- Q1 i& T滤波函数:5 Q+ i& n5 H  ^  m; \
    #define  NUM_TAPS   487 e9 c. e( K9 g7 h* Z: m2 u
    #define  NUM_DATA   80  ~2 m! d" H/ G, c* u( a' t

    8 n% s5 r  s' E$ ^" |  T  p' Z+ A, ^2 e; n, }  J
    void floatPointFir(float *x, float *h, short order, float *y, float *w)4 y& O* J0 N2 M. A7 V
    {4 b+ z) v& S# ^" _
        short i;+ p3 H& F/ |/ _8 W9 y2 D5 G8 R: D
        float sum;
    " h9 k/ L) H# F/ z: i w[0] = *x++;                        // Get the current data to delay line
    $ A3 _1 |' c3 \8 m) n1 e6 y% } for (sum=0, i=0; i<order; i++)      // FIR filter processing
    + x5 A  S4 {0 }  Q+ m, b {
    0 n( O; Z! |9 n+ L" z' e  sum += h * w;( F  }' ]) b7 _
    }
    & t* e' B0 L3 p$ L. I3 W0 U5 f! g *y++ = sum;                         // Save filter output
    - X: X2 n) q# y* n) g3 Q& X for (i=order-1; i>0; i--)           // Update data delay line- A' f$ G) d1 t6 H: [
    {
    ' s" R7 Q$ I( z9 y2 T$ J1 x  w = w[i-1] ;
    , |+ |! P0 c. E6 w- H9 z' z5 Y }
    $ O+ m6 L2 D7 V}# z! b. S5 z/ W7 l1 M2 O# P: `
    0 {! _1 ]2 L4 t1 t; M

    ! i5 ]* ^; m/ h# D4 j测试代码:
    2 ?' k- w% T( Y# M4 S1 Y6 |/ U4 ?float w[NUM_TAPS];
    0 Z& X$ ]( s) i3 hvoid main()
    5 E! f- J9 j  c' L9 B/ x" T8 A7 M{5 ~! e( v' r! M7 l- h
        FILE  *fpIn,*fpOut;
    1 Q4 }0 `; y" i( m2 Z0 t    short i;
    7 d* D* n9 R% l  y1 T( ~6 K    char  temp[2];* r( Z8 H9 t! f
        float x,  // Input data
    & p/ ^& A7 }( ~* X9 ^4 ]5 v          y;  // Output data5 Y9 j# O7 f) j) b& e
      1 [( Y+ I: P9 [# f  K4 v
        fpIn = fopen("..\\data\\input.pcm", "rb"); 6 A7 }% ]1 g' \# X3 o' Y  M
        fpOut = fopen("..\\data\\output.pcm", "wb");1 a! {6 E+ `; l7 V- K' @8 `
        if (fpIn == NULL)7 @4 g4 V8 X" I1 p
        {
    8 B- M5 [9 N- n* P" f+ Y! `        printf("Can't open input file\n");
      Z8 V& \7 O+ Q2 Q  I: ?3 w2 c3 T, }) J        exit(0);1 l1 M6 H+ a# y0 b' y- s
        }/ [. k0 M( a5 F/ |; h
    - I" \8 D  t* Z8 x- \
        // Initialize for filtering process
    7 [# x: O' O1 j% M( F- u    for (i=0; i<NUM_TAPS; i++)" r0 K* S5 H% p; I: C
        {2 T' h1 M0 c( k9 k4 g% W$ p$ D
            w = 0.0;
    + b4 b/ Q5 M+ Q2 Y! F    }
    6 k8 h+ H" ^- {; N* F' b0 n- Z    // Begin filtering the data
    5 Q7 m; M0 O* d$ [( H- Z% o    while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    9 U+ Q% s* J& d% |0 S) [# L+ N- u    {
    4 y1 U0 w( D# y1 F* b        x = (float)((temp[1]<<8)|(temp[0]&0xff));5 K. c3 R9 L! P6 ^, q- p" o
            // Filter the data x and save output y
    3 @2 Q/ O# i2 a* ]. J6 w        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
      \# W% o, D+ F0 u" u9 u% x        temp[0] = (char)((short)y&0xff);
    9 X( A8 P+ d# ], ~' l8 [        temp[1] = (char)(((short)y>>8)&0xff);% ^' y& x9 ]$ k  r, H+ g& C
            fwrite(&temp, sizeof(char), 2, fpOut);
    6 E9 h- y& G  w+ b, T2 o% h    }4 t" m. y+ |; q0 I& o
        fclose(fpIn);
    " |( W. M+ _# A+ f  I- Z7 X    fclose(fpOut);
    : S' W0 q% u6 q) M7 Y}
    8 o  j/ m* H* i, r6 q* \/ @) U. S9 y  }! s
    ( p$ u# ]! l8 N8 K1 b
  • 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-9-4 06:35 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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