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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    9 h- _6 w8 r9 T3 K1 N$ ^滤波函数:
    0 N% r& k6 q0 }  F#define  NUM_TAPS   48
    % d( b. Q  }" N+ p6 I8 K# O9 S- N#define  NUM_DATA   80
    * R* V. u6 Y( Y+ m
    ! _8 c8 x. l- K8 V8 x  ?1 w3 c: W6 y! {* w5 r. w! Q5 y
    void floatPointFir(float *x, float *h, short order, float *y, float *w)- S1 A2 ^- L) |9 f' ]# X3 V
    {
    + Q4 k# H6 J( m1 \/ F    short i;
    3 f: `6 `* W0 ^+ {; F    float sum;' M9 Q+ C- O. }: p. \4 ^
    w[0] = *x++;                        // Get the current data to delay line$ ]. J0 Y1 L$ h2 e- p: w( k
    for (sum=0, i=0; i<order; i++)      // FIR filter processing
    2 b+ }* \) z+ ~7 a  D# E {& h+ c  L8 b3 ~8 L! k) P4 x7 p
      sum += h * w;
    0 t1 \9 ?  U7 U }
    0 A. H1 f7 v' W4 p+ ]0 s4 o8 j *y++ = sum;                         // Save filter output/ x0 a" T! z9 d4 g; j" _9 U
    for (i=order-1; i>0; i--)           // Update data delay line
    * f7 P7 r% ?& z) n {/ C4 f: B/ n. R+ k
      w = w[i-1] ;7 d1 ^. @, b7 K8 w( c) R3 T
    }2 K# p: r% N" D. i
    }% z  b4 v4 F9 A* J& @4 g

    ' B) H- k: U: k6 [( u
    " l  I6 q5 r9 B. R3 S1 ]9 m+ J测试代码:
    ! Y2 A, P. `. z. Afloat w[NUM_TAPS];  Z: I) D! p- ~0 M  v* q/ O2 x' J
    void main()
    7 ~( K1 e- b# i7 a* e! W$ p; j{
    6 @, f7 S3 I- G3 N( |" N    FILE  *fpIn,*fpOut;# H6 ^# s- y1 A' U( x' _! y
        short i;+ e1 v9 ?9 C6 Y
        char  temp[2];
    4 |! h2 ?1 Z5 W! f2 `$ _    float x,  // Input data
    1 m6 t4 m! O- [3 x9 r4 f0 ^. c; T          y;  // Output data* b7 Z& ~* `' b  G6 K! z+ {
      
    / a  I& ?. [2 L    fpIn = fopen("..\\data\\input.pcm", "rb");
    + J# D2 x7 }$ M" @$ b4 W' @# p( t    fpOut = fopen("..\\data\\output.pcm", "wb");
    5 a6 x8 U& [2 H4 B; _1 a9 F    if (fpIn == NULL)
    ; E& O4 {, N) Y    {! ], x" c( W' @; y8 j7 f
            printf("Can't open input file\n");
    ) m1 h( p) ~/ N# j        exit(0);
    ; A* X5 g& c6 B. l1 x; k    }
    + {4 y3 m8 A; T; J
    ) s: e+ X; [' ^1 ]. d/ v4 A    // Initialize for filtering process( g9 A+ u+ Y) z0 e
        for (i=0; i<NUM_TAPS; i++)
    1 W  F1 h& C' q& Q8 s0 l, s    {
    . |& P3 {9 s. p% _. w0 z: B        w = 0.0;
      I( V  }5 \9 Z: K9 l    }
    ; Q" {( ]' t7 }6 ~1 f    // Begin filtering the data! q3 L8 y' q/ S2 ~+ s3 y
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)
    8 D8 ?( W' }. u/ z# P5 q" Y. i    {
    & w0 E, w; y6 X5 O5 P        x = (float)((temp[1]<<8)|(temp[0]&0xff));* l/ ~$ m- ~; Z9 S
            // Filter the data x and save output y  u" D: G  o, K4 q3 ^/ z2 E
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);; Y. E  K, z1 P; c/ l
            temp[0] = (char)((short)y&0xff);
    " R7 c  [) _9 O* s, }        temp[1] = (char)(((short)y>>8)&0xff);
    % }* L; X) j& h$ D! i  H1 a        fwrite(&temp, sizeof(char), 2, fpOut);
    1 ]+ W6 b2 d6 k6 ~: P, O' n    }# s, ]- t  Z1 U4 I) v0 |  t# c
        fclose(fpIn);
    + V3 c1 @+ g9 S) N8 ^4 Z6 B& ^- i& s    fclose(fpOut);- Y6 c" ]( Q# [, \( C
    }2 I  U1 o/ c# M- P6 f) B  ?

    * x. t# C0 j; ~/ Z! n2 u7 P
    # f0 v1 U; [& n& \) z$ 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-29 13:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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