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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    . p# }0 _! w) G滤波函数:
    " G; e6 Z8 h% l  S" ^: X, z$ d6 j#define  NUM_TAPS   48# C( k* \0 W5 k: e5 S
    #define  NUM_DATA   80) H4 u* }3 W( m8 @8 m. A; A, f
    / Y/ e1 c5 T3 s9 E5 J

    $ C9 Q1 c- }) F" b+ kvoid floatPointFir(float *x, float *h, short order, float *y, float *w)
    # I2 f9 Y) i0 H{
    / {& E0 {  q$ z8 I    short i;1 \6 }5 y' a+ W
        float sum;
    6 Q/ `' F- W; R' b w[0] = *x++;                        // Get the current data to delay line
    & M0 D8 p$ ~/ V6 Y: N8 L for (sum=0, i=0; i<order; i++)      // FIR filter processing
    1 D; O3 g4 P  O8 |7 ^ {% f9 @7 e; H8 T* P# l* `$ K$ }
      sum += h * w;/ R- @) `( \9 E
    }: N1 E) k4 ?# m( k- n4 f
    *y++ = sum;                         // Save filter output
    & U$ b! B6 F  ] for (i=order-1; i>0; i--)           // Update data delay line
    0 }6 s  [  p7 f {( x3 j$ a  M: T! K: N0 L: x- u
      w = w[i-1] ;- j( p" j' e" v+ B
    }
    ; q  H/ O; y5 Z4 |9 U}8 d: q" _  ?+ p8 Q& g2 m9 \. P

    ( w  R2 P1 h0 L. O9 i" F7 l0 _: b! L/ q* A( S+ f# q
    测试代码:  y: C8 M4 B8 X9 ~, g
    float w[NUM_TAPS];8 ?! w( W; l" a+ L0 j) N
    void main()4 D: t+ ]  Y0 ?. E% b: k& X* D
    {8 _  T# y2 q4 J  o; z
        FILE  *fpIn,*fpOut;% x6 |2 F0 a8 `' W7 F: B
        short i;5 Z1 F' i/ m& I: Z: G  F
        char  temp[2];- ^3 [  A0 y( [- z2 j3 H5 U
        float x,  // Input data  T! q: E% I# w2 S8 P( D" L$ ^/ S- o
              y;  // Output data
    ' M) Q# A6 j: }  2 L( X2 s& g% u& K3 m' E
        fpIn = fopen("..\\data\\input.pcm", "rb");
    . H* ~$ M# ]9 ~5 x9 Z7 [0 G7 _: ]    fpOut = fopen("..\\data\\output.pcm", "wb");
    & Z# H! t& K  e( X" e  d/ s' r    if (fpIn == NULL)
    , R' B+ [' Q7 N+ w    {
    8 g/ {& j7 y3 q; e9 }' C6 |/ }        printf("Can't open input file\n");
    9 @5 r. ^3 U. ]: e9 h8 B        exit(0);
    ! `  s8 q$ }, O& i; B    }; A+ R* b. r7 j) M
    * q8 M8 Q4 Z8 w0 \1 _
        // Initialize for filtering process
    * L) z& u5 m. Z+ F8 b    for (i=0; i<NUM_TAPS; i++)' ?3 E# v3 j7 d; }7 F) O+ L# S
        {5 k7 h  ~/ f3 C/ K  s9 p: q% m
            w = 0.0;
    & \2 k2 x5 T2 j  b+ _. N9 K    }: a. u0 [9 ]3 z  V4 C
        // Begin filtering the data6 ]$ a) a1 {% u$ z
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)9 E9 H( y2 K' B* H: w5 y
        {/ C7 ~/ V4 M: L) r
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    , Q  [5 B' d- l/ B1 w" y4 x        // Filter the data x and save output y( A$ T" O6 X+ P+ @( w
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);8 J5 h4 ^3 s6 s2 y( ]
            temp[0] = (char)((short)y&0xff);9 i; r$ v2 A* a% p
            temp[1] = (char)(((short)y>>8)&0xff);/ ?1 r2 }3 H( f$ L; {0 [# C  u
            fwrite(&temp, sizeof(char), 2, fpOut);
      E* n$ p$ g7 V* u6 W6 b" u    }3 |, S. ~% m5 e6 A& _5 Q0 e! ]$ C
        fclose(fpIn);; d7 g' C' `5 Q" J8 `
        fclose(fpOut);0 j5 s. P0 i+ O
    }5 f# O; H  M4 t9 P" Z4 W
    0 d( z& _! @) T/ F7 n' ~
    - r  t' D5 E0 W* ~2 o% T) {
  • 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-11 22:40 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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