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

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

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

    [LV.5]常住居民I

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

    EDA365欢迎您登录!

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

    x
    各位大神,我有一个疑问。fir的输出序列长度按道理是输入序列的长度+滤波器的阶数。可最近看了一个代码,它的输出序列长度冒似与输入序列长度相同,恳请指点一下。& l! @) P0 P. [6 {; T) ]( ^- P
    滤波函数:1 H) k3 H9 W; O- s) `0 {
    #define  NUM_TAPS   48
    : q1 Q0 y3 `% E5 N4 }#define  NUM_DATA   80
    6 j- Z2 R: G; k) {3 u) G) d  h
    2 R" H: v% c# j% Q1 M. @9 ~2 X& i7 F2 i8 K6 T6 ~
    void floatPointFir(float *x, float *h, short order, float *y, float *w)' M3 O5 r- F7 z$ j! \. i
    {- O! w, e5 ^4 G& X
        short i;9 f7 v2 q+ H! z6 S
        float sum;" ?6 G. K9 C' a  f! p
    w[0] = *x++;                        // Get the current data to delay line
    + \7 d; Z, f7 V4 C; ~ for (sum=0, i=0; i<order; i++)      // FIR filter processing" d; u) b4 Z7 K  u/ f0 m3 J: H
    {$ P" L9 y% [$ c. `5 v$ k
      sum += h * w;) v% f1 @  u1 a9 V
    }
    ( w7 o) {2 b0 Z. L- {0 ^  z *y++ = sum;                         // Save filter output  i) d( I7 A' P+ Z
    for (i=order-1; i>0; i--)           // Update data delay line
    ! Z# i! H6 g# k2 H) c {. N2 L! g: {7 [0 I2 a/ ~
      w = w[i-1] ;
    + v. I! d' H) }2 Y7 {  N: ~1 q }
    ; m8 E: L  {8 s) j6 }6 F" S}
    , ^1 z8 T( I2 f" {  O1 w% y- M+ q$ n! w; q2 [
    % t6 P& d8 f5 w' W  q+ d2 r
    测试代码:/ v0 `1 o7 d1 @9 K6 n
    float w[NUM_TAPS];
      Q' Y" h  \9 Q; a9 P; n3 Vvoid main()
    8 |  p1 Y3 s' r3 {+ }( h{0 L% V$ z: h8 H+ W/ f
        FILE  *fpIn,*fpOut;
    ' r* z2 f' ]3 Z    short i;: e: j% J" x: ~- \  R
        char  temp[2];$ r% c& b' I, h5 ?  p; R2 F5 ?
        float x,  // Input data  R- d  i5 L3 W2 r9 S) b
              y;  // Output data7 b& m$ F0 l  R
      9 {5 h+ b6 G5 g) P8 E0 S* _
        fpIn = fopen("..\\data\\input.pcm", "rb"); 4 \+ @7 d  i2 A( Z1 G
        fpOut = fopen("..\\data\\output.pcm", "wb");2 s' g: C% {* n: j8 d% k% r
        if (fpIn == NULL)% o. s1 m( B3 O: u/ h6 h" Q
        {
    & K- Q. c+ B% j' P" t' p8 @* }9 G        printf("Can't open input file\n");
    9 A! B. [4 Q3 ^$ i- o3 i        exit(0);9 t+ [9 B9 a0 w7 Q" L, F1 a
        }- R# G7 p8 u- j
    ) R& B. B8 B1 K3 Q4 I; p9 W3 f
        // Initialize for filtering process
    ! {; N' ?6 U$ n) y" M    for (i=0; i<NUM_TAPS; i++)- L. Z/ b1 T2 D( E$ ~- @
        {# T4 D% \+ K& [. a1 s( z
            w = 0.0;
    & H. y+ T. y! H! B, G    }
    , S3 {/ d7 u- d2 v! e/ E    // Begin filtering the data
    : M/ D2 r8 h( ]0 I$ A" W3 _* \    while (fread(&temp, sizeof(char), 2, fpIn) == 2)( B3 `) s& Z% \
        {6 _) V. C' W  c" [
            x = (float)((temp[1]<<8)|(temp[0]&0xff));0 J2 F5 A+ }4 I: E; m
            // Filter the data x and save output y
    / d4 Y" O4 H& W! @        floatPointFir(&x, firCoefFloatingPoint, NUM_TAPS, &y, w);- c' r+ {$ S, w+ b( n9 o$ K( T
            temp[0] = (char)((short)y&0xff);
    + _. @# b3 P( D$ y7 w( K. c        temp[1] = (char)(((short)y>>8)&0xff);6 O. e$ ?: H' v! W/ [3 ?% T
            fwrite(&temp, sizeof(char), 2, fpOut);
    0 s% M* j; P* b0 B( w9 t1 i    }5 t7 G1 Z& S, y: W: M
        fclose(fpIn);
    1 Z8 n. N0 z' r% K7 I! j$ h    fclose(fpOut);* X( {6 K! C7 G& ]2 i; I
    }7 y1 {. X5 ~! Z. S, R$ t

    " ]% i- I+ {0 `: h; q6 j; K# ^. t1 c: n6 h/ A+ j
  • 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-12 03:54 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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