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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。( P9 Z/ }# u  y. ]
    滤波函数:" L8 f% a, O( E
    #define  NUM_TAPS   48% W- e% E1 I- w0 n
    #define  NUM_DATA   80
    ( b: u$ Z3 f6 X% ^
    3 C& W3 c( E& u1 H. T/ N$ {; _
    & q6 {( T, Y- B3 Jvoid floatPointFir(float *x, float *h, short order, float *y, float *w)
    1 c) Y) z( U8 k8 B{
    8 L' \+ @8 x* F/ p    short i;
    7 X2 L% s0 B; B    float sum;4 `( s. T, [' D; N+ I0 d. S
    w[0] = *x++;                        // Get the current data to delay line1 y8 a5 v; K& E& A! t. q' m4 I
    for (sum=0, i=0; i<order; i++)      // FIR filter processing- V* Y( q7 u3 V1 Q% ?# j- j
    {
    , T# S  R2 }+ q8 e" |  sum += h * w;
    4 @# p! c1 T% [; |: k: w& D% W }: ?: y0 Z/ f/ t2 d9 u7 s( r
    *y++ = sum;                         // Save filter output
      ^$ i# K- Z8 _7 Z  I4 v for (i=order-1; i>0; i--)           // Update data delay line
    9 ~% v; G2 _" X+ v* s. ~9 m {% @0 H6 O; n+ @- l, z0 x
      w = w[i-1] ;
    8 n1 e2 R: Z7 M% a1 U: U }
    , Y+ f' r2 M: @/ T& i' }6 J4 h}+ b5 W! l9 E7 w" r

    ' V% ~, d. Z7 q8 [. F% c, ]3 P
      N* i! G: h) _8 L3 t5 h# d; P. E测试代码:% i; A+ L1 A, n
    float w[NUM_TAPS];
    4 b3 `1 a' r- b" Qvoid main()1 T+ w) U  C- m% {) b
    {
    / d3 t3 y7 @  b' G4 W! d    FILE  *fpIn,*fpOut;
    ! [; W8 v1 }% x( [( I9 b4 q    short i;* m1 o' T: U: h$ W1 I% i
        char  temp[2];
    ! S2 H1 S7 p2 A! w$ c1 {& v0 H    float x,  // Input data
    * G1 K8 S/ |6 r  B          y;  // Output data4 j* C5 S% P& O* M
      # S% U* F( F; R0 ]: k) K
        fpIn = fopen("..\\data\\input.pcm", "rb"); 1 J( ]. y4 B/ y3 G# v: G4 `2 \5 p
        fpOut = fopen("..\\data\\output.pcm", "wb");4 `$ Z& [: E5 y# `1 G
        if (fpIn == NULL)
    . |. U8 R7 D2 M) W! x1 M    {: F5 Z% k' Z8 g! ^$ w/ q
            printf("Can't open input file\n");, G# \' C' M- b# u0 r4 U$ U. _
            exit(0);
    ! G2 ?; ]5 \8 G    }, Q, {3 |% ?" E9 C  V
      S" c! A# _+ L0 K1 A8 ^' ]
        // Initialize for filtering process
    1 d( m( i/ l$ ?3 ?9 ~    for (i=0; i<NUM_TAPS; i++)9 r- O, s3 z5 {5 y& S, C
        {: F9 D# `& _2 T3 R0 Q1 Y& r
            w = 0.0;
    ! v. Z* o& d: `6 O    }
    & C6 w- h2 R( f( B* V+ y$ J9 h1 t    // Begin filtering the data8 v5 l1 N( W# [1 L, \3 G
        while (fread(&temp, sizeof(char), 2, fpIn) == 2), ^, X: o- z$ W
        {
    9 s& p% s7 Y0 |" O- ~* d6 U0 [& X        x = (float)((temp[1]<<8)|(temp[0]&0xff));
    + |# ?" m$ A, e        // Filter the data x and save output y+ _3 L+ o8 U8 i4 |/ i
            floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);$ `( |; D( ~* q" ]
            temp[0] = (char)((short)y&0xff);2 ]0 F' D1 b" M, K) _( e
            temp[1] = (char)(((short)y>>8)&0xff);
    9 v) }3 R+ c5 f. l' x        fwrite(&temp, sizeof(char), 2, fpOut);# v* X; V$ Q* _1 U& c
        }$ b# j  b. s0 o8 h+ i( \  I
        fclose(fpIn);
    - G  R! j1 E  B" B& ^! R    fclose(fpOut);
    4 f) W" z8 ?; z}4 @2 e, k. V5 O  _
    - j, E; J. t& t8 P

    , Z9 \. ]) c) H6 q; Q, _" F
  • 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-18 10:34 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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