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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。, S: C. h9 r. F( N7 a* F
    滤波函数:
    + V. t& w9 y& U/ |0 n* k#define  NUM_TAPS   485 H0 ^( i) v. N3 N. {9 n4 J; k
    #define  NUM_DATA   806 P0 F$ F5 c" n
    & ]7 l! R* W1 S# G

    6 n9 @- X' h% j: mvoid floatPointFir(float *x, float *h, short order, float *y, float *w)
      M1 A' v6 ~7 M2 o{
    ! c, ^3 ]* C- M# i! E    short i;2 R# {+ \8 g8 ?
        float sum;
    7 m/ J" ^6 w" X w[0] = *x++;                        // Get the current data to delay line
    7 R  d4 l% w3 M( W6 R for (sum=0, i=0; i<order; i++)      // FIR filter processing; {4 {! D( e" d* M2 f1 Q2 I7 a
    {
    4 s# n: Z% K7 P- p  sum += h * w;2 V& I" J5 ~* G* K0 V- ~: i5 H( o
    }  h& g5 l' j$ {2 U/ z2 B
    *y++ = sum;                         // Save filter output
    ! q9 B' ~: A# N1 f+ [6 @8 r for (i=order-1; i>0; i--)           // Update data delay line0 u; Y  l6 D, T0 u2 _! z2 j. H- y, g
    {
    1 F  P! v6 ?$ `4 T7 v9 @' X: r9 U/ g; y  w = w[i-1] ;8 V7 F6 x' h; _& x* w: g: W- A
    }
    : h% u* L6 J3 o* l}8 _5 n$ g) q  \0 |  S8 {3 j

    # d' c# i- U0 y2 b! v. e4 s
    3 `- v  H' I0 b1 t5 q测试代码:
    * t* ]& J8 Y% j- dfloat w[NUM_TAPS];
    - O% u& i8 j0 Rvoid main()4 G5 k& f; L) o
    {
    ( W" r3 p1 i$ A% g2 K    FILE  *fpIn,*fpOut;$ S: b) ?7 b& [% b- o
        short i;4 C- \9 i. d' t2 h
        char  temp[2];
    8 M) k9 {1 e! u% o& u    float x,  // Input data
    $ m* _* |3 t2 I8 k4 [          y;  // Output data* D3 V2 z/ l+ y0 v: s) e
      
    & o5 r/ A, ?7 m8 i5 p+ s) B    fpIn = fopen("..\\data\\input.pcm", "rb"); % }+ i' J( k! d2 `/ ?6 h  O
        fpOut = fopen("..\\data\\output.pcm", "wb");1 u* ^5 u; T5 E! q+ P  ^( w
        if (fpIn == NULL)6 j2 T) \  R6 I& H- _) f0 g& g
        {6 o! x( c3 a; Q! \, _1 W
            printf("Can't open input file\n");  x  ~# Z; v' I" N0 K) s
            exit(0);7 J6 L, X: T1 `% `: |
        }
    ! M& r; f' {- X 0 T+ T0 S% P& y3 W) t; H. Y
        // Initialize for filtering process
    1 ]4 C, S1 h* R, \    for (i=0; i<NUM_TAPS; i++)! p) y+ u7 |3 F3 J+ w
        {
    6 [+ r/ e6 C9 @3 Q; o# D        w = 0.0;
    1 _8 e# V1 e1 X3 X2 y  r  S% B+ V    }
    & ]. M" {7 a# |/ e. [    // Begin filtering the data& @4 R8 f" x  ^5 V' W
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)/ e4 ~8 B) _; n
        {
    & u: Y2 Q+ e1 v& o2 F( p        x = (float)((temp[1]<<8)|(temp[0]&0xff));+ a; m; ]* o1 c8 f2 J5 _
            // Filter the data x and save output y
    , O+ ?4 ]. P' q9 u        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);: B; `; w1 U& c
            temp[0] = (char)((short)y&0xff);, q0 p% M. N/ q+ o+ D
            temp[1] = (char)(((short)y>>8)&0xff);
    ' f& W1 O& M, t3 l0 B+ p( w        fwrite(&temp, sizeof(char), 2, fpOut);, d/ W% _8 o8 i, u
        }
    $ ~, @8 N- w" g8 @9 ~& n! P& w    fclose(fpIn);6 C  O; f; k/ L; R. ~& a' r
        fclose(fpOut);
    1 _( K( [5 ^: y6 N0 n}
    + A# ]$ W, Q0 f2 m3 |! S
    2 N( g! g/ U& e, A
    . m6 d% z: m1 ]7 ?0 s. {
  • 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 14:04 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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