8. 递推增广最小二乘法(RELS)程序
该程序的输入信号为幅值为 1 的 M 序列,噪声源为均值为 0,方差为 0.1 的高斯分布白
噪声。该算法把噪声模型的参数归结入系统的参数向量中。
程序的大体流程是:读入数据—产生数据—给 P,W 等向量置初值—在大循环中由递
推增广最小二乘法计算参数向量
值—当误差足够小时结束递推。逐次递推的
值存入文件
“kuodazuixiaoercheng.txt”中。
递推公式如下:
其中:
程序中模型多项式 A,B,C 的阶次 na,nb,nc 以及大循环的次数 N 均采用宏定义赋值,
此处给值分别为 na=2,nb=2,nc=2, N=850,根据实际情况和需要可改变这 4 个变量的值,在
宏定义中修改即可。
源程序:
#include <iostream.h>
#include <fstream.h>
//#include <stdlib.h>
#include <math.h>
#include<stdio.h>
int brmul(double a[],double b[],int m,int n,int k,double c[])
//int m,n,k;
//double a[],b[],c[];
{ int i,j,l,u;
for (i=0; i<=m-1; i++)
for (j=0; j<=k-1; j++)
{ u=i*k+j; c[u]=0.0;
for (l=0; l<=n-1; l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return 0;
}