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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。0 U7 I0 \5 X) [. B9 O
    滤波函数:4 W# e2 k: Q" Z$ X8 l/ E& s
    #define  NUM_TAPS   481 g; E( M7 V0 s! P* {; ?" _
    #define  NUM_DATA   80
    1 Z3 F1 G2 [- @/ Z+ X' m7 s) v: B
    7 u: L+ h! d& [/ U" m. Z1 T8 y
    # R* z% D1 w' H/ K) w* jvoid floatPointFir(float *x, float *h, short order, float *y, float *w)
    ! b  _/ W- |( O5 ^0 ?{2 l/ u3 A/ L" n8 s  L
        short i;
    5 W0 F) B: y! i; p    float sum;
    - h. M, ^) P. x3 B7 |  r- u5 `/ o! l w[0] = *x++;                        // Get the current data to delay line5 X* d- L6 f) A% }4 N; m4 q) L/ r
    for (sum=0, i=0; i<order; i++)      // FIR filter processing/ e7 d0 x$ U) m6 c9 p) j
    {+ q* P# E8 E! M0 \8 {; R- E. s* _
      sum += h * w;& X% F. m" Q1 ^/ b# @, S4 @2 ?
    }7 y4 \8 T+ h3 f% E# p- l4 m, C
    *y++ = sum;                         // Save filter output# l" ]8 D: O& I6 @& M
    for (i=order-1; i>0; i--)           // Update data delay line
    3 l7 A3 c. ]- G! G; v {
    ( o2 a# ]0 p( r& `  w = w[i-1] ;
    $ \& E9 R- u0 ?9 x' W }8 R6 Q* E9 ^% W4 T. c- f! g
    }% P" {, F6 v; h- ]+ r6 _7 C
    1 }. I" A2 u1 o, C$ Y7 H; [! t5 I: o3 `
    ' X: ^' j, S8 Z6 w. ^5 W- Z( j2 y8 g" N6 [
    测试代码:
    - j+ t, Q- L& s3 h0 _: g$ |. n' l% Hfloat w[NUM_TAPS];
    # i' B) L8 K" r$ Vvoid main()! L, j& g7 n0 Y2 k
    {7 G: i; b$ o4 @9 v5 F! k; u" r
        FILE  *fpIn,*fpOut;% ]+ `) V6 h  }; Q
        short i;" d: q" ~9 _+ |) v3 o/ \
        char  temp[2];+ F/ i4 k7 q$ F: a/ u2 e2 S
        float x,  // Input data8 Z( {. C5 c0 ]7 y4 Q+ _! D) s
              y;  // Output data5 j2 Y: W" H8 q5 ]5 G; \
      
    7 R# w4 s, C: h% R: P    fpIn = fopen("..\\data\\input.pcm", "rb"); 9 V! F# I+ S7 j) i( D6 d0 t
        fpOut = fopen("..\\data\\output.pcm", "wb");1 K5 W; u7 K1 J9 s9 M+ x7 s
        if (fpIn == NULL)
    ) ]% ]1 Q! o4 V4 b1 p( T    {$ D3 G* j& h, J  \" s+ ^3 H
            printf("Can't open input file\n");
    , p2 b) T# s% C, J! M        exit(0);9 i; N8 ]# |( R& y! r
        }/ a- S3 J# F. u7 j+ f' E% z. ]8 _

    3 E! D. \) F4 a- Z. z    // Initialize for filtering process2 l/ n, e; A$ p9 E- d$ z0 h
        for (i=0; i<NUM_TAPS; i++)9 U4 ^/ ]% ?: B* `  U
        {* A! {7 e' A, v9 b' q! b# M
            w = 0.0;- Y! I2 K$ P2 R9 C
        }% H% X2 a- @* R  Y' }
        // Begin filtering the data- W% L0 Z$ x& \# j' M3 @( D
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    ! O  k) C8 t2 C% G0 L) d    {; u9 M1 Z% V" q& i
            x = (float)((temp[1]<<8)|(temp[0]&0xff));' d2 }5 U. x; V% I) E5 t
            // Filter the data x and save output y. i; E2 v1 r5 i7 i
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);, q6 R, w; v  [' C
            temp[0] = (char)((short)y&0xff);
    % _/ \! ~# C( s7 d0 f. u0 n        temp[1] = (char)(((short)y>>8)&0xff);
    : o7 b$ ]2 F7 u0 @7 ^6 N        fwrite(&temp, sizeof(char), 2, fpOut);8 f" b! ?7 W# C! e* W. g( R
        }( Q! f# Q6 ~6 x9 n, p
        fclose(fpIn);; V/ ?; M6 d' p8 U1 t1 l$ o: s
        fclose(fpOut);
    # u1 f8 t3 D' e: i, u) m}7 B; b; U1 j/ l; A

    5 b% ]4 e2 \* j  `
    - R4 v9 F. e7 v& ]
  • 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-11 01:30 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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