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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    . {$ p# V6 z, D  k0 A滤波函数:
    & w7 J9 F. }3 S: i6 O# k, F#define  NUM_TAPS   48
    , F! J/ B; X  N7 R/ P#define  NUM_DATA   80
    5 }4 V5 a% S3 r# h: n/ ]7 w% \
    & x" L4 n6 P) f( A, `! W% B% u: Q  r: S5 x. F: L& I
    void floatPointFir(float *x, float *h, short order, float *y, float *w)
    ) z3 }9 O9 l! o, n- p{
    4 V- v  R; n8 h2 }. G$ F    short i;/ R. X  N! z+ s/ Q* W. V
        float sum;
    # O5 \7 @5 [7 Q w[0] = *x++;                        // Get the current data to delay line
    ) R  u+ E* d2 A0 m8 B for (sum=0, i=0; i<order; i++)      // FIR filter processing! @5 W% J9 l& `3 d0 K8 b
    {
    : ?$ E# T& n: {+ B  sum += h * w;1 F7 R/ x" f+ _$ k& O: ^
    }, }+ o- c) [& ]4 `* ^, N
    *y++ = sum;                         // Save filter output
    4 b2 ?0 v+ b% d& V# v for (i=order-1; i>0; i--)           // Update data delay line3 V) M) [: g2 S* Q1 s" x
    {) r; ~- j* @/ E( Y- [6 F: R3 L
      w = w[i-1] ;
    & B0 q: ~9 u9 K- G0 B7 j$ K. _: v }
    4 O" G3 O/ y: K}8 A. N$ H5 I, H! V$ Y/ l
      T3 A7 d0 Q# T( }- e- k

    5 n# ?6 t; X  i5 a% t* E' \7 v测试代码:9 i- O: }/ \1 \& T  t" ]
    float w[NUM_TAPS];
    & H  x& L7 i5 g. ?void main()
    ( ]  H9 q2 [# E{
    7 p. r: V4 V0 t4 i3 [3 A# I    FILE  *fpIn,*fpOut;
    1 F" |  c6 x. s7 ?0 U: x: ?4 ~    short i;0 F" K: H. S5 r# ]. `
        char  temp[2];
    ! c2 R8 |7 O7 l! Y/ {/ c    float x,  // Input data; a# O7 [  Q# Q7 a" X1 ]
              y;  // Output data
    * T- h/ J$ l5 Z/ R  1 g4 L5 H% ]% b: a  ~6 a
        fpIn = fopen("..\\data\\input.pcm", "rb"); 3 V" U! v) j9 M  W6 j; |- c
        fpOut = fopen("..\\data\\output.pcm", "wb");, u3 X8 q$ `" U& O( Q
        if (fpIn == NULL)
    4 I- [4 ]6 X, e6 |! ]" @) R. H  N    {, Q9 p4 J  e' S3 m5 z
            printf("Can't open input file\n");
    ' K, r: n. ?- v  S        exit(0);
    8 E3 L  h4 C5 N$ \# Y0 r    }3 Z+ M& Q1 v$ a) @6 M# p; q
    ) ?6 ~* Z, |/ \* l: v) q0 i
        // Initialize for filtering process
    % |# l3 r/ l) b4 v1 Z1 E3 _    for (i=0; i<NUM_TAPS; i++)
    1 _. J1 H) b5 z# z0 B; Z    {1 H+ ^; g% [9 C# `4 V, U7 e
            w = 0.0;
    4 n6 w! a* [; e  r7 e    }
    1 x2 W2 {$ Z- N    // Begin filtering the data
    8 r4 P% e3 O+ r( L    while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    1 L( l( `% |, T; @( i0 c+ T/ l    {
    9 \; e0 h1 }" t        x = (float)((temp[1]<<8)|(temp[0]&0xff));
    ( _0 \" t1 v# \# }        // Filter the data x and save output y  Z0 A5 z% X" i2 _' z3 d4 b
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    + I1 i3 I& h+ g        temp[0] = (char)((short)y&0xff);; M. z7 v& [% D0 i0 [
            temp[1] = (char)(((short)y>>8)&0xff);
    0 ]/ ^  R# l3 e9 f% a  W: Q( W        fwrite(&temp, sizeof(char), 2, fpOut);
      a% W. N0 ^% _' a5 V4 X; c  ^    }5 \5 I* i+ D" i5 |, k9 p
        fclose(fpIn);) ?) w4 t- s* f/ w% A
        fclose(fpOut);
    . n  u1 Q9 V* q4 x8 K}  z7 e* C, m; b2 v4 D! d% d! Z4 l

    ; q: d) i  s. B. D/ Z
    - u* A  C0 \2 [* u' w3 K
  • 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-2 18:54 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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