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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。  }% K) N( K, X* f9 o# C1 t6 z! D
    滤波函数:
    * B9 Z, f4 b' ~' \% S9 i& ~#define  NUM_TAPS   48, t5 e  G; }1 P( c( P0 F' U8 w
    #define  NUM_DATA   80
    / j* a+ `4 Z8 a# y# \+ N: n$ I# R" o5 Y
    7 ?4 b2 G1 a& e% Y' U* i
    void floatPointFir(float *x, float *h, short order, float *y, float *w)/ _! p& _6 M/ w5 X. m- }3 A
    {0 o' k( }  ^) N1 f2 r0 c
        short i;
    8 p# |- X) |) V: E    float sum;
    5 b5 w3 ]# A) l% q1 `% M5 @) c4 ? w[0] = *x++;                        // Get the current data to delay line
    & y( \: l& l* n for (sum=0, i=0; i<order; i++)      // FIR filter processing. @6 h: b& `1 e
    {
    0 Z2 a. b1 q& Y9 J  sum += h * w;
    ( a* b0 v" Q) M& R. Q. t1 m! } }
    / N8 }+ l$ o: ^ *y++ = sum;                         // Save filter output
    9 r+ M  D9 k0 l) k( q for (i=order-1; i>0; i--)           // Update data delay line) l  ?3 p# {% _4 S9 S, B/ C$ {
    {3 l) [8 C0 @! u3 W
      w = w[i-1] ;* _. e4 V. G) K) h
    }) z8 g3 ]; U1 V. ~4 V, a; l9 w
    }
    2 f0 O1 J9 s3 H4 L- {8 E! u* P
    - W% Q5 t; G8 J. W8 P" z! T
    " \3 O0 g  Y" ^测试代码:
    2 D1 y6 j* R% W  Cfloat w[NUM_TAPS];, I" ^- B" A; T3 f! {/ w
    void main()3 ?& ~: n7 A5 s, ?: k4 p* l
    {8 Z1 ]" i$ A4 |+ k7 ~
        FILE  *fpIn,*fpOut;+ V3 B0 [  W' K0 r
        short i;0 t1 a5 Y4 s% N0 `. g
        char  temp[2];, H" U4 r2 R) U! f0 X, ^- U# Z) X
        float x,  // Input data
    & K9 o5 O7 q1 |8 r9 @          y;  // Output data
    / t. V; n8 |5 K" Z, Q6 |/ I  
    ; p2 s- O# D& [/ @    fpIn = fopen("..\\data\\input.pcm", "rb"); . I- V/ L' F) E/ a6 Z
        fpOut = fopen("..\\data\\output.pcm", "wb");
    1 @9 ?1 E( E- l4 S! E    if (fpIn == NULL)/ k, q. |% ^5 M9 A. R
        {! J' ~* \. K  U* H$ @7 G
            printf("Can't open input file\n");
    7 W) h$ S/ b% ^, G        exit(0);3 q4 ^! d% x8 y/ z3 y( S( |
        }1 T4 s' w2 |0 k* `5 I

    2 \7 o- G/ f2 D" h9 p; s; o    // Initialize for filtering process
    3 a. K: ~% e+ n, D) Q( A% B    for (i=0; i<NUM_TAPS; i++)
    & v3 j+ b8 n- x* C    {' I7 a+ K0 I: z8 t$ S
            w = 0.0;
    ) c$ z& [* V7 u# h; P5 p    }; m6 [8 s2 v8 c" O, n
        // Begin filtering the data% O& v( F3 s9 K" d% n
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    ! _9 z; ~+ _) _% C! h. X    {  e4 D8 d, |1 m4 w1 y  h" t1 W
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    . u3 E- D- v* R7 x        // Filter the data x and save output y  t: X6 d/ y9 Q+ J9 k8 Y
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    $ `/ z: h, P% B. _$ A& s        temp[0] = (char)((short)y&0xff);
    ; M/ m0 D% q6 a& F$ q1 c        temp[1] = (char)(((short)y>>8)&0xff);
    , f$ x* W, i* ?# C+ q        fwrite(&temp, sizeof(char), 2, fpOut);- Q$ [$ @( [" t
        }
    . h! w3 ~7 F2 h  `( k& K    fclose(fpIn);7 H' W! F- c. c* \7 o# z  j
        fclose(fpOut);
    ) @; W. C! X0 ?  `}
    , y4 Z$ a' m& j7 M! Z4 E7 ~4 A: E! j0 O' o6 O. ?! V% o8 M( X( V% c* d+ \
    " J& V' m& W( f7 x( X" m+ N
  • 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-5 11:46 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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