标题:这次需要真正的高手进来了 谢谢
只看楼主
刘暮哲
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:75
专家分:83
注 册:2009-9-25
结帖率:69.23%
已结贴  问题点数:10 回复次数:4 
这次需要真正的高手进来了 谢谢
#include<stdio.h>
#include<math.h>
#define N 160
#define m 88   /*滤波器的阶数*/
#define pi 3.1415926
float fir(float *x,float *h,int lenx,int lenh);
void main()
{   
     FILE *fp,yp;     /*fp为指向输入的指针,yp是指向输出的指针*/
     int i,j,a;
     int fc=8000;/*设计的滤波器参数*/
     int fpp=4000;
     float wp=0.5*pi;  /*归一化角频率*/
     int fs=5000;
     float ws=0.625*pi;
     float wc=(wp+ws)/2/pi;
     
     /*设计滤波器*/
     float hd[m];
     float wb[m];
     float h[m];

     float buffer1[N+m-1]={0};
     float buffer2[N+m-1],buffer3[N];
     
     
     a=(m-1)/2;
     
     for(i=0;i<m;i++)
     {     hd[i]=sin(wc*(i-a))/(pi*(i-a));
         wb[i]=0.42-0.5*cos((2*pi)/(m-2))+0.08*cos((4*pi*i)/(m-2));    /*black窗*/
         h[i]=hd[i]*wb[i];   /*滤波器时域形式*/
     }
     

     fp=fopen("d:\我的文档\桌面\work\assignment090929.pcm","r");
     if(fp==NULL)
         printf("the file can not open!\n");
      
     else
         printf("ok\n");
     while(!feof(fp))    /*读入文件并滤波*/
     {
       fread(&buffer1[m-1],sizeof(float),N,fp);
       buffer2=fir(buffer1,h,247,m);
       for(i=0;i<N;i++)
       buffer3[i]=buffer[m+i];
       for(i=0;i<m-1;i++)
            buffer1[i]=buffer1[N+m-2-i];  /*把后面m-1位调到前面*/
       /*输出写到文件*/
       yp=fopen("lz.pcm","w");
       if(yp==NULL)
       {  printf("file write error!\n");
          return;
       }
       fwrite(bufffer3,sizeof(float),N,yp);

      
       }
     fclose(fp);  /*关闭文件*/


}
float fir(float *x,float *h,int lenx,int lenh)
{
        int i,j;
        float yn[247]={0};
        for(i=0;i<lenh;i++)
        {    for(j=0;j<=i;j++)
                yn[i]=x[j]*h[i-j];
        }
        for(i=lenh;i<lenx;i++)
        {
            for(j=0;j<lenh;j++)
                yn[i]=x[i-j]*h[j];
        }

   
    return yn;
}



出现的错误是:
--------------------Configuration: liu - Win32 Debug--------------------
--------------------Configuration: liu - Win32 Debug--------------------
Compiling...
lz.c
D:\VC-work\L\liu\lz.c(13) : warning C4305: 'initializing' : truncation from 'const double ' to 'float '
D:\VC-work\L\liu\lz.c(15) : warning C4305: 'initializing' : truncation from 'const double ' to 'float '
D:\VC-work\L\liu\lz.c(16) : warning C4244: 'initializing' : conversion from 'double ' to 'float ', possible loss of data
D:\VC-work\L\liu\lz.c(30) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
D:\VC-work\L\liu\lz.c(31) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
D:\VC-work\L\liu\lz.c(36) : warning C4129: '? : unrecognized character escape sequence
D:\VC-work\L\liu\lz.c(36) : warning C4129: '? : unrecognized character escape sequence
D:\VC-work\L\liu\lz.c(36) : warning C4129: 'w' : unrecognized character escape sequence
D:\VC-work\L\liu\lz.c(45) : error C2115: '=' : incompatible types
D:\VC-work\L\liu\lz.c(45) : error C2106: '=' : left operand must be l-value
D:\VC-work\L\liu\lz.c(52) : error C2115: '=' : incompatible types
D:\VC-work\L\liu\lz.c(52) : error C2088: '==' : illegal for struct
D:\VC-work\L\liu\lz.c(56) : error C2065: 'bufffer3' : undeclared identifier
D:\VC-work\L\liu\lz.c(56) : warning C4022: 'fwrite' : pointer mismatch for actual parameter 1
D:\VC-work\L\liu\lz.c(56) : error C2115: 'function' : incompatible types
D:\VC-work\L\liu\lz.c(56) : warning C4024: 'fwrite' : different types for formal and actual parameter 4
D:\VC-work\L\liu\lz.c(79) : error C2115: 'return' : incompatible types
D:\VC-work\L\liu\lz.c(79) : warning C4172: returning address of local variable or temporary
执行 cl.exe 时出错.

是高手的进来看看  哈哈

lz.obj - 1 error(s), 0 warning(s)
搜索更多相关主题的帖子: 滤波器 
2009-10-24 21:25
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:3 
偶进来了

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2009-10-24 21:46
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
偶又走了,如同不经意地进来却故意地走了

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2009-10-24 21:48
apwh7550
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:106
注 册:2009-10-17
得分:3 

不是高手,只是看到了两处错误:

1、FILE *fp,yp;     /*fp为指向输入的指针,yp是指向输出的指针*/
    貌似按你说的应该写为FILE *fp,*yp;

2、fwrite(bufffer3,sizeof(float),N,yp); 好像该是buffer3,敲错了

你的程序别人不好运行,你没传这个文件: fp=fopen("d:\我的文档\桌面\work\assignment090929.pcm","r");
2009-10-24 22:57
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:3 
你的这个程序我看了一下,有关浮点型数的计算太多了,导致了一系列的错误,
你定义的那个函数应该是一个指针类型的,并且float yn[247]={0}; 应该是static float yn[247]={0};
因为这个与内存的释放有关。从你写的程序可以看出来你的功底还不行,有待提高,刚开始不要去编一些太复杂的程序,
慢慢来,一步一步的,脚踏实地!

愿用余生致力编程
2009-10-25 19:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-289774-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.256884 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved