单片机常用算法设计.ppt

  1. 1、本文档共199页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 单片机常用算法设计;7.1 单片机滤波算法的设计;下面我们介绍几种主要的数字滤波法:;下面是限幅滤波程序:( A 值可根据实际情况调整,value 为有效值 ,new_value 为当前采样值滤波程序返回有效的实际值 );B.中位值滤波法;#define N?? 11 char filter() {? char value_buf[N], count,i,j,temp; ??? for ( count=0;countN;count++) ??? {? value_buf[count] = get_ad();??? delay();?? } ??? for (j=0;jN-1;j++) ??? {? for (i=0;iN-j;i++) ?????? {??if ( value_buf[i]value_buf[i+1] ) ????????? {temp = value_buf[i]; value_buf[i] = value_buf[i+1]; value_buf[i+1] = temp;? } ?????? } ??? } ??? return value_buf[(N-1)/2]; }?;C.算术平均滤波法;编写算术平均滤波法程序时严格注意: 一.为了加快数据测量的速度 ,可采用先测量数据 存放在存储器中 ,测完 N 点后 ,再对 N 个数据进行平均值计算; 二.选取适当的数据格式 ,也就是说采用定点数还是采用浮点数。其程序如下所示:;D.递推平均滤波法;#define N 12 char value_buf[N],i=0; char filter() { char count; int?? sum=0; ??value_buf[i++] = get_ad(); ?if ( i == N )??? i = 0; ?for ( count=0;countN;count++) sum = value_buf[count]; ?return (char)(sum/N); };E.一阶滞后滤波法;7.2 信号处理的FFT变换;FFT变换算法的基本思想:利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)^2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。这样变换以后,总的运算次数就变成N+2(N/2)2=N+N^2/2。其程序片段如下所示:;#include stdio.h #include stdlib.h #include math.h typedef struct{ ??????? double r; ??????? double i; }my_complex; //检查a是否为2的整数次方数 #define NOT2POW(a) (((a)-1)(a)||(a)=0) #define MYPI 3.14159265358979323846//pi my_complex* fft(const my_complex* x, unsigned int len){ ??????? unsigned int ex=0,t=len; ??????? unsigned int i,j,k; ??????? my_complex *y; ??????? double tr,ti,rr,ri,yr,yi;;if(NOT2POW(len)) return NULL;????//如果失败,返回空指针 ??????? for(;!(t1);t=1) ex++;???????? //len应该等于2的ex次方 ??????? y=(my_complex*)malloc(len*sizeof(my_complex)); ??????? if(!y) return NULL; //变址计算,库里-图基算法 ??????? for(i=0;ilen;i++){k=i; j=0; =ex; ????????????? ?? while((t--)0){ j=1; j|=k1; k=1; } ????????????? ? ? if(j=i){ y[i]=x[j]; y[j]=x[i]; } ??????? } //用变址后的y向量进行计算 ??????? for(i=0;iex;i++){t=1i; ??????????? ???? for(j=0;jlen;j+=t1){ for(k=0;kt;k++) {ti=-MYPI*k

文档评论(0)

iphone0b + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体如皋市辰森技术服务工作室
IP属地江苏
统一社会信用代码/组织机构代码
92320682MA278Y740Q

1亿VIP精品文档

相关文档