找回密码
 注册
查看: 569|回复: 3
打印 上一主题 下一主题

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    0 Q+ j  ]) i' Y( a: X0 L滤波函数:* J  T$ B' D( R7 h; u. j" l
    #define  NUM_TAPS   481 [( [- g, k0 ?( w6 p' R. y9 r
    #define  NUM_DATA   80
    0 }. f0 A8 W. P! M+ B; s2 U+ l
    8 r% v: f5 U8 H% y! v' f: [9 h! j
    void floatPointFir(float *x, float *h, short order, float *y, float *w)
    % s% W0 W( _3 R/ O$ Y- x2 r{4 a/ m0 Y. r: }9 T3 l
        short i;
    ! k& i8 P# m: _' v8 S    float sum;
    , c! V; a3 L0 S, z7 G3 W w[0] = *x++;                        // Get the current data to delay line
    6 e  I. }5 V1 V) ?2 G for (sum=0, i=0; i<order; i++)      // FIR filter processing
    , q  L2 s$ k4 L9 t, ?0 {* ?, L {, T0 t/ h/ w6 ~  Q8 B. j3 M
      sum += h * w;7 D* c( C; e. K8 V+ L9 i; Q# @7 G
    }
    : U: ]3 ]0 o( a *y++ = sum;                         // Save filter output
    . U: C0 ~9 _4 m5 \: M. m for (i=order-1; i>0; i--)           // Update data delay line2 U5 h! ^% s0 `9 H! m
    {# d5 P# [6 b$ a' h
      w = w[i-1] ;
    1 r  c$ c: ]7 i! x! A. Z+ x% I# J }
    3 T% u" R" a+ G}: ?) X% p6 E4 Q) y- D
    0 }' X- Q* M% r4 @9 R; ~; [3 x
    ) \  f# {6 [2 Y$ N* [
    测试代码:" u1 w! \1 p2 M; h2 n: T; {7 j6 [
    float w[NUM_TAPS];
    4 X, K& W) A4 u' @4 C! g; O0 evoid main(); r/ a: ~: a5 P
    {3 s; d, v6 t) X3 W5 o* b
        FILE  *fpIn,*fpOut;
    ' e; E. d+ M% m    short i;! L1 c' Y; B: ~
        char  temp[2];
      ?' H5 @* u* {3 W0 W    float x,  // Input data
    9 [. a# \4 d8 u' ^; K7 j5 @          y;  // Output data: e' I( i% v1 `9 p, M1 ^
      2 M- e" L5 G4 M
        fpIn = fopen("..\\data\\input.pcm", "rb");
    / B7 v" l; Q: _/ r' t8 ^& }8 T& C( }    fpOut = fopen("..\\data\\output.pcm", "wb");
    $ I2 B) v" C6 m9 E    if (fpIn == NULL)# w0 q, p8 |! J) C, [  [
        {/ Q: G- x" N' r
            printf("Can't open input file\n");4 x! {* ?7 _6 O+ @
            exit(0);
    ! W+ G7 y; L' ?0 t9 v# F: B    }" }: e; {' {# b% `
    / F1 ^$ h/ i2 b1 j
        // Initialize for filtering process! ~2 y1 W: c- V% t" x- m
        for (i=0; i<NUM_TAPS; i++)
    : L, u- j/ q6 _3 @3 V    {2 q5 j8 r) c4 X9 V4 e
            w = 0.0;
    ; S! p- X* X; ?0 z- o  D8 X) ?    }+ X. `/ ?8 {8 q" X# s! `
        // Begin filtering the data8 e0 I4 J2 i8 W* ~1 X2 L! ?  P5 K* J
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)6 @6 U3 t% O" H8 n
        {
    # g/ T5 V' z3 l/ Z        x = (float)((temp[1]<<8)|(temp[0]&0xff));
    8 X/ |, {' ], U% X' g/ y& g# i( l' C        // Filter the data x and save output y& d: f) s& A4 O- T4 O$ T7 Q2 q
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);- @7 j: `7 i7 ]. d' b
            temp[0] = (char)((short)y&0xff);
    2 m3 `5 ^) u1 U8 K        temp[1] = (char)(((short)y>>8)&0xff);" B$ m; [. z% K; b  A
            fwrite(&temp, sizeof(char), 2, fpOut);
    6 ~( f0 K+ n6 _8 [! B    }
    ( _2 |& ^+ X) _0 W  B    fclose(fpIn);, g" c9 a8 C) o
        fclose(fpOut);' f8 L9 |; v/ _& O
    }( p+ c: N0 m4 J/ x8 @( f  o

    6 z: {: @/ X; |
    # P& B' G' D6 p- G8 c; D
  • 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-5-26 10:07 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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