Board logo

标题: 最小均方算法(LMS Algorithm)理论及DSP实现(2) [打印本页]

作者: yuyang911220    时间: 2017-6-20 08:53     标题: 最小均方算法(LMS Algorithm)理论及DSP实现(2)


复制代码

         输入、输出、初始权值为
  • static double init_y[] = {4.00,3.30,3.69,2.32};
  • static double init_x[] = {        /* 用一维数组保存 */
  • 2.104, 3,
  • 1.600, 3,
  • 2.400, 3,
  • 3.000, 4
  • };

复制代码
  • static double weight[2] = {0.1, 0.1};

复制代码
        main函数中只需要调用zx_lms()就可以运行了,本文对两种梯度下降方法做了个简单对比,


         需要说明的是:batch算法是达到最大迭代次数1000退出的,而stochastic是收敛退出的,因此这里batch算法应该没有对数据做到较好的拟合。stochastic算法则在时钟周期上只有995,远比batch更有时间上的优势。
         注:这里的error没有太大的可比性,因为batch的error针对的整体数据集的error,而stochastic 的error是针对一个随机的数据实例。
         LMS有个很重要的问题:收敛。开始时可以根据给定数据集设置w值,使h(x)尽可能与接近y,如果不确定可以将w设置小一点。

         这里顺便记录下在调试过程中遇到的一个问题:在程序运行时发现有变量的值为1.#QNAN。
         解决:QNAN是Quiet Not a Number简写,是常见的浮点溢出错误,在网上找到了解释
         A QNaN is a NaN with the most significant fraction bit set. QNaN’s propagate freely through most arithmetic operations. These values pop out of an operation when the result is not mathematically defined.
         在开始调试过程中因为迭代没有收敛,发散使得w和error等值逐渐累积,超过了浮点数的范围,从而出现上面的错误,通过修改使程序收敛后上面的问题自然而然解决了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0