欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c语言写的fir低通滤波器.doc

    • 资源ID:23885122       资源大小:417.50KB        全文页数:32页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c语言写的fir低通滤波器.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec语言写的fir低通滤波器c语言写的fir低通滤波器根据fir滤波器的公式y(n)=h(m)x(n-m);(m: 0(N-1).利用MATLAB产生滤波器系数(h(n)并归一化,下面为一个LP滤波算法void filter(void)uint16 i,j;fp32 sum;int16 x12030;fp32 h19= -0.0027, -0.0025, 0.0050, 0.0157, -0.0000, -0.0471, -0.0482, 0.0838, 0.2953, 0.4013,0.2953, 0.0838, -0.0482, -0.0471, -0.0000,0.0157, 0.0050, -0.0025, -0.0027;for(i=0;i<2020;i+)x1i = data0i;for(i=0;i<2020;i+)sum=0.0;for(j=0;j<19;j+)if(i >= j)sum+=hj*x1i-j;else;data0i=(int16)sum;for(i=0;i<2000;i+)data0i = data0i+20;考虑到前19个点为不完全累加和,故抛去前19个点。(应该是前后各18个点都是不完全累加和,都应该去掉,对于数据分段进入滤波器的情况,应该把前一段的后面数据放到下一段的前面,这段时间我在解调FSK时遇到了这个问题,通过滤波器的数据的分段处理。)设输入数据xN,输出数据yN,滤波器系数hn1.直接法(由y(m)=h(0)*x(m)+h(1)*x(m-1)+.+h(N-1)*x(m-n-1);void fir(short x, short h, short y) int i,j; long long sum; for (j = 0; j < N; j+) sum = 0; for (i = 0; i < n; i+) sum += xj-i * hi; yj = sum >> 15; 乘法器使用次数:N*n2.逆推法:void fir(short x, short h, short y) int i,j; long sum; for (j = 0; j < n; j+) for (i = 0; i < N; i+) sum = 0; sum = hj * xi yi += sum >> 15; 乘法器使用次数:N*n3.倒序法:(输入输出可以是同一量)void fir(short x, short h, short y) int i,j; long long sum; for (j = N; j > 0; j-) sum = 0; for (i = n; i > 0; i-) sum += xj-i * hi; yj = sum >> 15; #include <stdio.h>#include <math.h>#define true 1#define false 0#define n 8#define bufsize 100 /* the buffer size is 100 */* global declarations */int in_bufferbufsize; /* processing data buffers */int out_bufferbufsize;/* functions */static int processing(int *input, int *output);static void dataio(void);static long round(long a);void main() int *input = &in_buffer0; int *output = &out_buffer0; puts("the 1st experiment startedn"); /* loop forever */ while(true) /* * read input data using a probe-point connected to a host file. * write output data to a graph connected through a probe-point. */ / read the input signal. / if the input file is sine1.dat, the signal contains 300hz,400hz and 500hz. / if the input file is sine2.dat, the signal contains 100hz,400hz and 500hz. / the sampling frequency is 1200hz. dataio(); /* remove the frequency compoment of 400hz and 500hz*/ processing(input, output); / write the output signal. / the output file is result.dat. dataio(); /* * = processing = * * function: apply a low-pass fir filter to input signal and remove the frequency higher than 350hz. * * parameters: address of input and output buffers. * * return value: true. */static int processing(int *input, int *output) int i,size = bufsize; short xx0,x,y; / short zn=0,0,0,0,0,0,0,0,0; short zn=0,0,0,0,0,0,0,0;/short w2*n+1=22,356,155,990,466,220,777,216,777,26,466,9,155,0,22;/short w2*n+1=6,457,56,1024,224,418,523,382,784,99,784,43,523;/ short w2*n+1=330*2,3299*2,1982*2,6867*2,4955*2,1594*2,6607*2,1065*2,4955*2,109*2,1982*2,17*2,330*2; /short w2*n+1=661,6598,3964,13733,9910,3187,13214,2131,9910,217,3964,34,661; / short w2*n+1=58,5628,526,8192,2105,5883,4913,3829,7369,1543,7369,504,4913,102,2105,14,526,1,58; /short w2*n+1=28,4432,280,8192,1259,4883,3356,3975,5873,1509,7048,644,5873,142,3356,30,1259,3,280,0,28; / short w2*n+1=26,651,182,1024,545,421,909,247,909,51,545,11,182,1,26;/short w2*n+1=831,20846,5815,32768,17445,13486,29075,7888,29075,1647,17445,349,5815,21,831;/short w2*n+1=208,5211,1454,8192,4361,3371,7269,1972,7269,412,4361,87,1454,5,208; short w2*n+1=101,4356,810,8192,2835,3403,5670,2517,7088,605,5670,193,2835,21,810;/ short w2*n+1=101,4356,810,8192,2835,3403,5670,2517,7088,605,5670,193,2835,21,810,2,101; / short w2*n+1=50,3814,454,8192,1815,3504,4235*,3084,6353,831,6353,349,4235,50,1815,8,454,0,50; long y0,z0;/22222222222222 while(size-) xx0=*input+; x=xx0*6; z0=(long)x<<15; y0=0; for(i=0;i<n;i+) z0-=(long)w2*i+1*(long)zi; y0+=(long)w2*i+2*(long)zi; y0+=(long)w0*(z0>>15); y0=round(y0); for(i=n-1;i>0;i-) zi=zi-1; z0=round(z0); z0=(short)(z0>>15); y=(short)(y0>>15); *output+ =y; /* additional processing load */ return(true);/* * = dataio = * * function: read input signal and write processed output signal. * * parameters: none. * * return value: none. */static void dataio() /* do data i/o */ return;static long round(long a) long x3; x3=a&(0xffff0000); return x3;-

    注意事项

    本文(c语言写的fir低通滤波器.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开