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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。
    - T( q* d9 `9 n( ^滤波函数:4 k5 b# S' ~, ]
    #define  NUM_TAPS   48+ F" {6 I3 s/ E/ {" ~) |
    #define  NUM_DATA   805 V8 _( x5 |/ h& L- z
    8 g, G4 F3 @$ y0 a6 ?

    " q8 w/ g# `) z" Dvoid floatPointFir(float *x, float *h, short order, float *y, float *w)7 }" W3 E: H# h! W! ?5 G) {4 `
    {
    3 ?1 F, U* ~1 e' J* j7 w5 f6 V2 O    short i;
    ' y9 x8 v+ h+ C2 Z. y    float sum;
    " J( T8 p& e- T5 U8 X1 o. x w[0] = *x++;                        // Get the current data to delay line
    1 V: n3 k, T8 ^ for (sum=0, i=0; i<order; i++)      // FIR filter processing
    : j7 S; y8 ]3 G# W  b' j( u/ M0 ^ {
    - |& q, i. M' Q" @  sum += h * w;; d. S- m5 I5 d5 l& g; p! M7 j
    }
    ( |$ \+ d! t" h5 _& e9 F *y++ = sum;                         // Save filter output: |' `$ J* Y1 `
    for (i=order-1; i>0; i--)           // Update data delay line# f% I2 a% f, s5 O, U$ Q
    {) n& K4 c0 p0 S# T2 {9 U
      w = w[i-1] ;" c3 c8 z' v* }
    }+ ]9 u0 d9 w' S8 O1 ^( z' {
    }- g) l# W* T- e( n" T7 z
    * k) n  L( X9 X, \/ u6 @6 t

    ) a2 Z, q) ~% c* ~% Z4 \: f测试代码:
    4 [4 z( x; f7 O7 J! j# h1 qfloat w[NUM_TAPS];  Q' w/ E# }( {2 ]) O9 [
    void main(), }  C9 q4 A4 v, v
    {
    & C# g/ {6 T2 S! Z  B# `    FILE  *fpIn,*fpOut;
    , i/ [& ]" @7 e    short i;
    8 S* e5 P/ e& b. G  g    char  temp[2];
    - V3 J) }3 _! ~) I; j& p    float x,  // Input data
    6 G5 A$ p  ?' t/ ?          y;  // Output data! x1 ?/ J& n3 d& A0 U. G
      * D& t( f& U- T4 A; K
        fpIn = fopen("..\\data\\input.pcm", "rb");
    7 f: k7 n8 O. \    fpOut = fopen("..\\data\\output.pcm", "wb");
    : f3 p2 D/ e* t3 M5 F7 n* P    if (fpIn == NULL)
    8 E6 ~* Q3 Q3 h( f0 b6 f    {
    4 ^  U" O! q, i, U# d        printf("Can't open input file\n");
    ' G9 a3 ]' q9 h        exit(0);5 s9 C, I$ q7 G% k1 \0 {. W
        }( x/ D& D: }! |+ J  U$ ~# J

    + Z& c; {3 }0 }& U3 _6 R7 u    // Initialize for filtering process6 D) N- z6 N' O, u+ A- b& [* o
        for (i=0; i<NUM_TAPS; i++)1 `. Z6 M7 j* a& A" e6 ~0 m& O8 f
        {/ F% P5 [# A3 |0 f& `/ B6 A
            w = 0.0;1 v2 f% a+ {2 u* b$ I* x1 I6 N
        }9 y% z4 C& R1 C- q& Z2 |& c
        // Begin filtering the data
    3 O0 @& b- \8 C  l# {    while (fread(&temp, sizeof(char), 2, fpIn) == 2)* H- z# f8 |# _1 ]6 m/ ?: y
        {% Q( p) G! z4 Y/ R
            x = (float)((temp[1]<<8)|(temp[0]&0xff));5 T3 j7 Y9 y) v5 Q1 o8 i" F
            // Filter the data x and save output y
    5 _0 v: N2 L4 D/ r6 j  `( m; M        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    4 ^( ]7 X! \$ Y  R- i1 e6 |        temp[0] = (char)((short)y&0xff);
    4 ~& s4 j* l: O, M/ {/ _* {        temp[1] = (char)(((short)y>>8)&0xff);: D- M& D4 N, e% X: B: M% l8 k7 c/ [
            fwrite(&temp, sizeof(char), 2, fpOut);5 w4 @. E2 g! ^" p
        }: N, F% q# i) X! k, i, `" L5 g
        fclose(fpIn);
    6 l0 P  U. ]' j6 `* L8 l    fclose(fpOut);8 b7 |. E: h, n, W  F
    }& j5 G5 y4 f/ d( s7 H  B

      C2 l2 @0 `' p3 V5 E: S( |9 j. R* Y( u* G
  • 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 03:48 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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