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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。3 D3 V5 S8 t1 F
    滤波函数:, [; v/ @1 z( w+ d# s% z+ M/ H- \; @
    #define  NUM_TAPS   48
    & h! g# u6 S% U( o) E' O5 ~#define  NUM_DATA   801 s4 v: ]1 C2 B; v  l$ Q
    6 `) k' E+ U9 Q9 n, u. n

    6 H8 h7 X& _+ L. vvoid floatPointFir(float *x, float *h, short order, float *y, float *w)% {- e; e8 t$ m' R; _$ I
    {, n1 a& {& p0 F
        short i;) u0 T/ x) y4 t" d1 Y1 w
        float sum;
    , t  Z( ]( c- I2 \1 ~ w[0] = *x++;                        // Get the current data to delay line% E% t5 u' a' @: f' U5 ]
    for (sum=0, i=0; i<order; i++)      // FIR filter processing& k8 {9 \; E* t4 I& |; _; }0 x
    {; ]0 E, x: g  V! k" g
      sum += h * w;3 U3 O/ l+ u. u! C5 I. m
    }
    ' Z. C5 d% C$ e- @ *y++ = sum;                         // Save filter output
    7 Z+ p7 X  H- R for (i=order-1; i>0; i--)           // Update data delay line
    + ]* i, e7 D1 s, e, ~" y9 S {8 Y( j) f# ?8 O
      w = w[i-1] ;
    & a& K0 t/ o9 T6 N$ B9 f- c- X+ U }# b' Z' \( K: o
    }  \/ o9 b* x% Y  F' w: P
    ' F: E* G. C" x7 M2 |9 c

    $ i' h; d: k/ I7 g) E测试代码:+ V4 q( _1 S) O# s! r( m- N
    float w[NUM_TAPS];" _- z$ Z5 E, M# a! `5 j1 c
    void main()$ c4 X# }+ V* |& w8 z
    {: E! T! l0 q5 B6 P+ q8 @  a
        FILE  *fpIn,*fpOut;
    ! U$ M3 H/ q' p( s    short i;
    ) J% o  Z& I  a& G5 K( m  C    char  temp[2];8 f; U& _3 d5 F
        float x,  // Input data
    - H3 A" C' C& }- D          y;  // Output data+ }+ ?- v/ l! F$ T- }5 ?* R( q- E
        g( G7 Q3 p0 ~, Q
        fpIn = fopen("..\\data\\input.pcm", "rb");
    & y/ g' b3 v6 o% l    fpOut = fopen("..\\data\\output.pcm", "wb");( I1 i# A+ U  ]! S7 n
        if (fpIn == NULL)$ a) u* m; m$ q
        {4 P6 L3 Q8 U3 ~
            printf("Can't open input file\n");
    - g4 U& N- w' O2 m$ W! Z3 J        exit(0);
    2 \2 p* I& N6 q# v" q$ t    }3 o4 M0 c( q2 q( V, R2 X/ y

    / K! x- J, x. }    // Initialize for filtering process! F- J- P! Y2 ]  ~$ V* E* c5 i* I
        for (i=0; i<NUM_TAPS; i++)
    $ y$ i8 D1 r) s4 N4 T    {- p% P  V8 D$ v7 }3 `! b" i
            w = 0.0;0 ~1 r" m5 ?. x1 V
        }  O2 W1 A1 B* j1 _% m
        // Begin filtering the data! C  n1 e# B2 ]8 H) c# T& }0 d
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)
      W. t1 n4 @: G% o( R    {$ r4 O0 ]* ]: R9 q
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    ; A2 Y5 S5 e4 \6 u: ?6 S  i, D        // Filter the data x and save output y9 D6 n: Y/ p- j" ?( {' G
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);/ @  W# x1 M% Q& X2 v
            temp[0] = (char)((short)y&0xff);% a* l5 Q' E/ o7 E6 Y' ~) m& w
            temp[1] = (char)(((short)y>>8)&0xff);( Q; e+ C4 m" g; ~4 S
            fwrite(&temp, sizeof(char), 2, fpOut);4 S8 `& `) D! b/ @
        }
    6 l* j2 C* Q' c/ {1 W3 K    fclose(fpIn);
    7 B9 T  N  A7 c& c+ X    fclose(fpOut);
    " i, x) U% d8 L2 z}) i' Z* w9 R6 J1 h
    1 ^" C$ i+ ?9 B+ N( r: A% w+ U' T
    ! m' m3 W* S0 a6 X4 A! ?7 w
  • 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-10-26 07:45 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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