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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    - O' \0 e: ]% c滤波函数:7 }: t; R- @1 {% R9 P9 T+ c
    #define  NUM_TAPS   48
    % j4 f/ U* C  p: c2 E1 S7 |7 e#define  NUM_DATA   80
    . [3 f4 n8 m$ O/ ~3 f0 @! W6 D+ W0 I& B  c; {; K$ s

    . @$ p) q2 B) M, E. {% K4 Mvoid floatPointFir(float *x, float *h, short order, float *y, float *w)
    - Z9 c' P* x% b{* M! z, \( d4 Y& W/ G: y" a. I
        short i;
    " ?" j0 {5 l0 P0 D; g    float sum;
    . M! \. w& ~5 `- i+ u w[0] = *x++;                        // Get the current data to delay line
    ; ~/ s4 g3 I# ^8 N% o0 I for (sum=0, i=0; i<order; i++)      // FIR filter processing
    0 ~# F. D* y: b* p6 ^ {) _/ \! x; {) f" `2 t7 p
      sum += h * w;- A2 }0 K) B" I& E* N* \! p
    }4 X5 G) {4 B+ q, I
    *y++ = sum;                         // Save filter output* ?$ \8 @- j% a# K
    for (i=order-1; i>0; i--)           // Update data delay line. b# |  K# W# n, P* |9 Z8 `
    {2 ?3 T/ }8 h& A0 |3 }( L+ t
      w = w[i-1] ;4 \# M# p8 [' }
    }- N) A* c2 v- I$ C' R, J1 a
    }8 E4 |3 r* H$ P2 J6 b$ c
    3 V) X2 x2 i9 S7 n
    ! D% P. p8 h6 H# \' `# X2 O8 u% K* M3 N
    测试代码:4 e( g6 l8 d$ w( L
    float w[NUM_TAPS];
    9 B2 e" C2 ~5 ~6 k6 G  p9 ?void main()
      }1 z% T* g  ~1 n- |{
    4 }  m* d# U. O6 c    FILE  *fpIn,*fpOut;
    + Q+ d7 x9 G) A: [8 v$ x    short i;
    2 ]6 y2 v; V) h- s+ r" ^8 x    char  temp[2];5 M' w( p* y  A) W
        float x,  // Input data+ A* |9 y! q" C! Y3 |5 E, _
              y;  // Output data
    + q7 g7 E" o! h$ R7 F  1 A' S, t% N8 D; k3 Y; S% L
        fpIn = fopen("..\\data\\input.pcm", "rb");
    6 I% d, t) Y* `    fpOut = fopen("..\\data\\output.pcm", "wb");
    " S1 X/ {& M0 E+ B& s2 K& d    if (fpIn == NULL)
    - x& B+ ]5 t3 w2 D9 k& v' Q* j) t6 f    {7 A2 @' M1 i3 w- f+ e. c
            printf("Can't open input file\n");
    / j, `9 R- s; S# y, J4 ]. z        exit(0);
    9 N3 G3 {6 u7 i  f; Q. N& }. N    }& E" y, n* W9 p7 Y4 R3 }
    $ Q& P! ~& X3 o+ r7 [
        // Initialize for filtering process
    8 p4 e; g3 U& K, M* [. I$ Q" l    for (i=0; i<NUM_TAPS; i++)* G6 h: ]1 V* v. b! h! O1 I
        {$ a, O2 C" E6 u  D: B  O& |  j+ R
            w = 0.0;% ^4 n% F! H1 O# o
        }
    2 a7 l* _: H# @# L5 a+ n    // Begin filtering the data! |% a1 E6 Q' x6 p2 n( @1 R$ g
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)+ d4 \" C9 P% Y, S. t& v
        {
    ; H. S4 }+ y* @! L8 p; _        x = (float)((temp[1]<<8)|(temp[0]&0xff));
    , [/ f7 ^4 E0 l6 j* d4 r        // Filter the data x and save output y' ]& A0 p/ i' r& c1 a
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    $ E' P! b* G3 r) {/ Y: g6 y* a        temp[0] = (char)((short)y&0xff);
    4 _) J# N" A- Y1 f+ O        temp[1] = (char)(((short)y>>8)&0xff);
    ! n! z  W; I6 q2 B8 j3 I. ?        fwrite(&temp, sizeof(char), 2, fpOut);
    3 u) ^* R% q5 J" l7 m" a1 z% |    }
    $ t% p. O" i* T& E0 B! U6 r    fclose(fpIn);; g; I0 B+ `1 \: r
        fclose(fpOut);
    ' f" Z+ U* u  A8 t}' u/ |( s7 g* L+ }& j4 N+ j

    ) W: m2 K( U+ z' g2 q& q
    - T0 O  o4 N8 }( S( `/ e
  • 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-7-11 03:01 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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