基于DSP的LMS算法实现与实物测试(二)

1、DSP建模仿真

将按照matlab中的LMS算法原理,编写C语言版的LMS算法模型,移植至DSP中运行,部分代码如下:

/*
 * main.c
 */
#include <string.h>
#include <stdio.h>
#include "LMS.h"
//#include <mathlib.h>
//#include <dsplib.h>

#include "data.h"
#include "data2.h"
#define PI                            3.141592654
#define Fs                            10000
#define Ts                            1/Fs
#define F1                           2
#define F2                           10
#define F3                           20
#define F4                           500
#define NUM_OF_POINT    (12900)

#pragma DATA_SECTION(signal, ".mydata");
float signal[NUM_OF_POINT];
#pragma DATA_SECTION(noise, ".mydata");
float noise[NUM_OF_POINT];
#pragma DATA_SECTION(signal_noise, ".mydata");
float signal_noise[NUM_OF_POINT];
#pragma DATA_SECTION(out_error, ".mydata");
float out_error[NUM_OF_POINT];
#pragma DATA_SECTION(out_y, ".mydata");
float out_y[NUM_OF_POINT];

tsk0_func()
{

}
//void make_data(void)
//{
//    int i;
//    for(i=0;i<NUM_OF_POINT;i++)
//    {
//        signal[i] = sinsp(2*PI*F1*i*Ts) + 0.5*sinsp(2*PI*F2*i*Ts) + 0.25*sinsp(2*PI*F3*i*Ts);
//        noise[i] = 5*sinsp(2*PI*F4*i*Ts+PI/2);
//        signal_noise[i] = signal[i] + 0.2*noise[i];
//        if(i>0)
//            signal_noise[i] += 0.15*noise[i-1];
//        if(i>1)
//            signal_noise[i] += 0.1*noise[i-2];
//    }
//}

int main(void)
{
	 int i, j;
	 //make_data();
	memset((void *)lms_x, 0, sizeof(lms_x)*sizeof(float));
	for(i=0;i<NUM_OF_POINT;i++)
	{
		if(i<LMS_M)
		{
			for(j=0;j<=i;j++)
			{
				//lms_x[j] = noise[i-j];
				lms_x[j] = g_Xn[i-j];
			}
		}
		else
		{
			for(j=0;j<LMS_M;j++)
			{
				//lms_x[j] = noise[i-j];
				lms_x[j] = g_Xn[i-j];
			}
		}
		//lms_param_in.d = signal_noise[i];
		lms_param_in.d = g_Dn[i];
		lms_param_in.x_ptr = &lms_x[0];
		lms_param_in.length_x = LMS_M;

		LMS_Gradient_Instantaneous_Estimates(&lms_param_in, &lms_param_out);                    //运行瞬时梯度估计LMS算法 耗时514个时钟周期

		out_error[i] = lms_param_out.error;
		out_y[i] = lms_param_out.y;
	}
	return 0;
}

CCS运行结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡血键盘手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值