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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。' J( q; x8 @( O$ y( |
    滤波函数:
    8 [0 z0 }( ]; d- K9 C#define  NUM_TAPS   485 M2 H, N2 V1 @$ _9 f$ d
    #define  NUM_DATA   80& ~1 l" w* t6 u( h$ Q) y0 y
    7 Y9 A* Z" u; x

    . N  T- r0 F/ ?0 D9 lvoid floatPointFir(float *x, float *h, short order, float *y, float *w)# ?9 b0 U, c2 n- k$ i) W
    {, L: s+ P+ _& J: p+ \  d; c
        short i;* Q5 y1 b& m/ z+ G) _' r. U* s
        float sum;- y% J; E! }' Z9 }* f3 h, s$ s
    w[0] = *x++;                        // Get the current data to delay line
    + r7 D* [4 W. R9 t: ?8 f* A for (sum=0, i=0; i<order; i++)      // FIR filter processing1 v( l# Y8 x1 H1 L/ u0 T
    {
    # F! S* N# j4 y0 l* c+ m  sum += h * w;
    - v4 k% o! `0 d2 s }2 g/ p5 {8 e6 B6 O* A7 f
    *y++ = sum;                         // Save filter output1 _4 ?5 |, K9 W! O6 O
    for (i=order-1; i>0; i--)           // Update data delay line
    0 L) Z! D0 \- S5 s# r {
    ' B, x" G/ h: u  w = w[i-1] ;
    , J$ s. n+ S. G7 m% b }6 r  t+ T) Z. f/ V5 f
    }
    + R5 S" g' B3 x- p( J. i
    6 X  w0 y2 n3 x# f7 n; W4 O3 S! H) ^* r
    测试代码:5 C& p% [$ U1 T
    float w[NUM_TAPS];4 y9 K) p- s+ @" L# S3 K% u
    void main()
    / L4 e( j, v0 o9 ^7 p, r! s{
    * Z- W# m6 @; M+ T: o' L    FILE  *fpIn,*fpOut;
    8 c" M$ \  ~) ~    short i;
    + {8 E3 F) X8 n6 F    char  temp[2];' ^: z* U. f$ I( F% {- k2 P
        float x,  // Input data3 E: ^; c3 N( z8 ~- }! `
              y;  // Output data+ N0 W, l7 ~* G' t5 A
      
    4 v' h- x# Y6 a4 i" h8 ]    fpIn = fopen("..\\data\\input.pcm", "rb"); + B, P; G& U( _9 O3 t7 i
        fpOut = fopen("..\\data\\output.pcm", "wb");
    % T$ e, V# F& u: t+ O    if (fpIn == NULL)8 c0 ]# ?2 r- \$ I+ X
        {
    ; x; f' Y8 D$ C- _        printf("Can't open input file\n");; M% ]* G# Q; u2 f* [9 z
            exit(0);& D5 p& A8 X% |6 ]' Z! f5 T
        }: U# D$ t' C/ w5 N6 b* i

    ) j1 m& v" t. Y6 M5 ~' N( Y; ~* @    // Initialize for filtering process6 m: v2 Z" Z, t; @  z9 g$ T# {
        for (i=0; i<NUM_TAPS; i++)' G2 r" Q6 E7 _$ n+ W5 P
        {
    " x3 |) s$ t, ^' [* ]        w = 0.0;
    $ {: C# F1 Q. S0 `& H, ]    }
    - D. O; N0 A0 V* }) d    // Begin filtering the data4 r! {, p5 T) o' S9 J
        while (fread(&temp, sizeof(char), 2, fpIn) == 2)8 V; W/ l- s' i6 ?! f
        {9 I4 g* k, A6 ~  b$ f* `
            x = (float)((temp[1]<<8)|(temp[0]&0xff));
    # U: t8 N: s$ V        // Filter the data x and save output y6 t6 U9 g, a- Y2 |
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);
    " y, N, N+ O. t: o1 e) b  @        temp[0] = (char)((short)y&0xff);
    7 W4 U0 E5 p' }8 v4 V, Z        temp[1] = (char)(((short)y>>8)&0xff);
    9 j/ O# u' L- U  {        fwrite(&temp, sizeof(char), 2, fpOut);
    ) \% }- Y4 G/ r    }- `& U+ n" ~. }/ ]% s. r
        fclose(fpIn);
    $ _, [: P7 \9 p+ c0 x    fclose(fpOut);" G. z' Z- t4 ~  F1 Q6 a: m2 e1 c
    }, R* B! @* @7 Y# Y# B! m+ g2 f) F

    9 L4 n  x7 a( s1 }" e* }, Y; g6 Z6 r+ }) 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-12 22:29 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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