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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    + E" r- G( l# b+ r! B8 ~# r滤波函数:
    ; B* [6 b3 ~: B" g9 v#define  NUM_TAPS   48# L: o1 l* K% ~; @
    #define  NUM_DATA   808 G+ `; `; i" [9 v+ ?4 M

    ( ]2 ~. S8 V  w2 V9 z  n# b( [- S. q, j8 K# t3 q* b" t
    void floatPointFir(float *x, float *h, short order, float *y, float *w)% e9 ^* [8 H- E
    {5 j& Q! R! s5 a6 k" W
        short i;( b, b- g) N# O5 k
        float sum;
      ]+ o0 _  h& b5 H w[0] = *x++;                        // Get the current data to delay line; e1 D& {1 S. w, \# N
    for (sum=0, i=0; i<order; i++)      // FIR filter processing7 i/ W2 ^& P; Z7 i( P% Z8 E* f0 I
    {
    ( u) ~" {" b& @. }5 r  i& P) O  sum += h * w;
    5 J, Y, B- [: X* K  f; I; u }
    / T% w8 u  H, X *y++ = sum;                         // Save filter output
    $ C. h. T+ @- \0 k# L# Q for (i=order-1; i>0; i--)           // Update data delay line1 \/ Y) m# m% J) M# C" l) h
    {* q# z' h- ~0 ]0 v
      w = w[i-1] ;
    . ?" H2 a: L- g }
    9 A4 j3 |" F# ^# J1 `}
    4 J" I$ H3 h$ C7 {2 a4 Y+ t6 R( G  m: ?1 v/ m: z8 y" c% M

    * @$ u5 S/ F* i* W测试代码:9 Y* o5 E8 V8 c7 Z( t6 R) P
    float w[NUM_TAPS];
    7 d2 u$ Z! P( d: [0 Lvoid main()
    + o2 r" S. t9 ^{2 P4 g+ I- t( m5 @7 c
        FILE  *fpIn,*fpOut;
    & U6 ?! a) o! R. J2 ]% w/ I2 w    short i;9 L+ Q  Y% ^2 R& U# Q/ ^
        char  temp[2];, h' ]0 J. p3 w+ p, d2 p# s6 b
        float x,  // Input data7 v/ i& Y5 j, C9 _. X
              y;  // Output data
    3 a* D5 ]) s  D( `; Y+ G0 j. S' A2 {  
    / Q! d* T  T! `. {" c0 i+ B: l    fpIn = fopen("..\\data\\input.pcm", "rb");
    5 q4 y! o/ y/ k  t0 S9 T    fpOut = fopen("..\\data\\output.pcm", "wb");
    2 q3 [( F2 y/ u    if (fpIn == NULL)* J/ Y/ P# i: ^3 G; S/ H+ y
        {
    7 m- d% A& D$ J2 H; a. ^        printf("Can't open input file\n");% w  v8 j# E# d' o1 e
            exit(0);# H( d( ]) I! A! V: Z
        }( f# @) F( M# i1 l+ b; T
    " Y$ Q& ^* l9 P8 g8 u) R+ Z4 Q
        // Initialize for filtering process% [& d$ r0 M4 o9 ^  n- l5 C2 M
        for (i=0; i<NUM_TAPS; i++)
    ' a0 j! ?3 s3 |6 j    {$ j5 y, \" B" x- w
            w = 0.0;
    % D8 d1 G: ]6 _7 ?1 }    }: L* |/ H& y7 ?
        // Begin filtering the data" }0 s/ v$ V7 q, p' Y0 G
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    6 f* i6 ?4 T5 k( v    {# V2 z* s) X" M# C
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    ) G; W" R" Z8 m" i& W# }/ [        // Filter the data x and save output y8 e! Q2 m* E6 u# U# F8 h4 G6 s: t
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    3 R7 Z' W* G$ b  e" h. n        temp[0] = (char)((short)y&0xff);
    0 m* P$ U$ P* ]( L& m8 L. x        temp[1] = (char)(((short)y>>8)&0xff);
    8 D, _' ^6 w9 Q) |. I        fwrite(&temp, sizeof(char), 2, fpOut);. P2 Y' f+ K, M1 s1 K& q
        }4 ]$ ~: m0 p1 l+ d
        fclose(fpIn);  |- b! n4 `5 y* r. i) e9 V$ M
        fclose(fpOut);
    # ~- n: T7 A/ M4 c}$ L6 }% D" _' S7 [7 X& s$ A
    + w" n/ {) J9 M, l
    ) V! ~" ?; J9 F% V! 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-8-11 21:37 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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