OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2343|回复: 3

基于STM32F767的自适应滤波器的设计与实现

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-1-3
在线时间
5 小时
发表于 2020-5-6 07:57:31 | 显示全部楼层 |阅读模式
2金钱
如下一段代码,直接在主函数中运行,理应输出有正弦变化规律的一组数据。在MATLAB仿真时,mu=0.02,没有问题;在电脑上直接运行这段C,mu只能取到0.002,也没问题,可以输出正确结果;但是在67上时,调用串口输出要么是0要么是nan,还有一个问题是在这段代码里,最后的延时函数不可用,如果不屏蔽掉它的话,程序直接运行不下去。
怎么解决,求教。



#define M 40
#define len 200
int main(void)
{



float xs[]={ 1.500,  1.600,  1.699,  1.796,  1.889,  1.979,  2.065,  2.144,  2.217,  2.283,  2.341,  2.391,  2.432,  2.464,  2.485,  2.497,  2.500,  2.492,  2.474,  2.446,  2.409,  2.363,  2.308,  2.246,  2.175,  2.098,  2.016,  1.927,  1.835,  1.739,  1.641,  1.542,  1.442,  1.342,  1.244,  1.149,  1.057,  0.970,  0.888,  0.812,  0.743,  0.682,  0.628,  0.584,  0.548,  0.522,  0.506,  0.500,  0.504,  0.518,  0.541,  0.574,  0.617,  0.668,  0.727,  0.794,  0.869,  0.949,  1.035,  1.126,  1.221,  1.318,  1.417,  1.517,  1.617,  1.715,  1.812,  1.905,  1.994,  2.078,  2.157,  2.229,  2.294,  2.350,  2.399,  2.438,  2.468,  2.488,  2.499,  2.499,  2.489,  2.470,  2.441,  2.402,  2.355,  2.298,  2.234,  2.163,  2.085,  2.001,  1.912,  1.819,  1.723,  1.624,  1.525,  1.425,  1.326,  1.228,  1.134,  1.042,  0.956,  0.875,  0.800,  0.732,  0.672,  0.620,  0.577,  0.543,  0.519,  0.505,  0.500,  0.505,  0.521,  0.546,  0.581,  0.625,  0.677,  0.738,  0.806,  0.882,  0.963,  1.050,  1.142,  1.237,  1.334,  1.434,  1.534,  1.633,  1.732,  1.827,  1.920,  2.009,  2.092,  2.170,  2.240,  2.304,  2.359,  2.406,  2.444,  2.472,  2.491,  2.499,  2.498,  2.487,  2.466,  2.435,  2.395,  2.346,  2.288,  2.223,  2.150,  2.071,  1.986,  1.897,  1.803,  1.706,  1.608,  1.508,  1.408,  1.309,  1.212,  1.118,  1.028,  0.942,  0.862,  0.788,  0.722,  0.663,  0.612,  0.571,  0.539,  0.516,  0.503,  0.500,  0.507,  0.524,  0.551,  0.587,  0.633,  0.687,  0.749,  0.819,  0.895,  0.978,  1.065,  1.158,  1.253,  1.351,  1.450,  1.550,  1.650,  1.748,  1.843,  1.935,  2.023,  2.106,  2.182,  2.252,  2.314,  2.368};
float xn[]={ 0.999,  0.247,  0.661,  1.197,  0.402,  1.215,  1.244,  0.674,  1.653,  1.184,  1.035,  1.891,  1.086,  1.417,  1.893,  1.012,  1.728,  1.679,  1.000,  1.877,  1.319,  1.050,  1.808,  0.906,  1.120,  1.511,  0.532,  1.147,  1.031,  0.263,  1.068,  0.460,  0.122,  0.842, -0.089,  0.085,  0.475, -0.511,  0.100,  0.016, -0.736,  0.104, -0.444, -0.743,  0.048, -0.804, -0.566, -0.078, -0.975, -0.278, -0.247, -0.907,  0.034, -0.396, -0.606,  0.294, -0.451, -0.132,  0.462, -0.350,  0.417,  0.538, -0.067,  0.929,  0.561,  0.375,  1.311,  0.592,  0.904,  1.510,  0.684,  1.417,  1.522,  0.865,  1.806,  1.392,  1.121,  1.987,  1.192,  1.400,  1.925,  0.999,  1.620,  1.638,  0.867,  1.700,  1.197,  0.810,  1.584,  0.702,  0.805,  1.259,  0.255,  0.796,  0.768, -0.065,  0.722,  0.200, -0.225,  0.541, -0.336, -0.241,  0.244, -0.732, -0.165, -0.128, -0.914, -0.066, -0.501, -0.861, -0.003, -0.779, -0.604, -0.006, -0.880, -0.221, -0.064, -0.755,  0.192, -0.129, -0.408,  0.547, -0.136,  0.103,  0.786, -0.024,  0.680,  0.900,  0.237,  1.207,  0.918,  0.632,  1.587,  0.899,  1.099,  1.759,  0.905,  1.544,  1.718,  0.976,  1.865,  1.506,  1.115,  1.980,  1.203,  1.285,  1.854,  0.896,  1.417,  1.504,  0.654,  1.439,  1.002,  0.508,  1.295,  0.451,  0.449,  0.971, -0.038,  0.430,  0.501, -0.380,  0.390, -0.034, -0.532,  0.279, -0.526, -0.504,  0.078, -0.871, -0.350, -0.188, -0.995, -0.144, -0.459, -0.875,  0.040, -0.652, -0.543,  0.156, -0.689, -0.078,  0.198, -0.521,  0.415,  0.200, -0.152,  0.838,  0.219,  0.367,  1.122,  0.314,  0.938,  1.245,  0.524,  1.449,  1.233,  0.842,  1.798,  1.144};
int i,k;
float en[len];
    float W[M][len];
    float x[M];
    float y=0.0;
    float yn[len];
    float mu=0.002;
int m=0;

u16 dacval=0;
u16 adcx,adcx1;
float temp;
u16 xx[50];
//u16 m;
int aa=0;
u16 times=0;
    Cache_Enable();                 //打开L1-Cache
    HAL_Init();            //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz ,时钟初始化
    delay_init(216);                //延时初始化
uart_init(115200);          //串口初始化,参数为波特率
    LED_Init();                     //初始化LED


    for(k=M;k<=len;k++)
    {
        for(i=0;i<M;i++)
        {
            x=xn[k-i-1];
        }for(i=0;i<M;i++)
        {
            y+=W[k-2]*x;
        }
        en[k-1]=xs[k-1]-y;
        for(i=0;i<M;i++)
        {
            W[k-1]=W[k-2]+2*mu*en[k-1]*x;
        }
    }
    for(k=M;k<=len;k++)
    {
        for(i=0;i<M;i++)
        {
            x=xn[k-i-1];
        }
  for(i=0;i<M;i++)
       {
            yn[k]+=W[len-1]*x;
        }
    }                     

  while(1)
{
  
   for(k=M;k<=len;k++)
  {
   m=yn[k]*10000;
   printf("%d,",m);
   LED0_Toggle;  
         
   //delay_ms(500);
  }
}

}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-6 14:18:02 | 显示全部楼层
不懂,只能认认真真跟着原子哥学习先,帮顶
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-5-10 00:43:37 | 显示全部楼层
帮顶
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2017-12-11
在线时间
487 小时
发表于 2020-5-10 09:42:20 | 显示全部楼层
不懂,帮顶!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-1 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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