中级会员
 
- 积分
- 262
- 金钱
- 262
- 注册时间
- 2019-7-22
- 在线时间
- 43 小时
|
10金钱
有没有 用过dsp库的arm_lms_f32 函数的 我用了一下 为什么输出都是0 是哪里写错了吗
附上 部分代码
#include "sys.h"
#include "delay.h"
#include "arm_math.h"
#define TEST_LENGTH_SAMPLES 320 /* 采样点数 */
#define PI2 6.28318530717959f
#define BLOCK_SIZE 32 //调用一次处理的采样点个数
#define NUM_TAPS 29 /* 滤波器系数个数 */
float Ts=0.0001;//采样时间Ts=0.1ms
float Fs=10000;//对应的采样频率Fs=10KHz
static float u=0.01; //步长参数
int N_iden;
int n_iden;
float32_t DESIRE_dn[TEST_LENGTH_SAMPLES]; //模拟AD采集过来的信号,lms的期望信号dn,经过系统之后的输出信号
float32_t INPUT_xn[TEST_LENGTH_SAMPLES]; //输入到系统的信号,xn
float32_t OUTPUT_yn[TEST_LENGTH_SAMPLES]; //输出的信号,yn
float32_t ERROR_en[TEST_LENGTH_SAMPLES]; //误差信号,en
static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; //状态缓存
//wn
const float32_t firCoeffs32[NUM_TAPS] = {1};
uint32_t blockSize = BLOCK_SIZE;
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE; /* 需要调用arm_fir_f32的次数 */
// 正弦波产生
void Produce_sin(u16 FRE,float Ts) //位数 频率 采样时间
{
u16 i=0;
float temp; //计算得到的sin值
// uint16_t SINGLE[TEST_LENGTH_SAMPLES];//未变换之前的取整sin值
for(i=0;i<TEST_LENGTH_SAMPLES;i++)
{
temp=i*Ts*FRE*PI2;
DESIRE_dn[i]=sin(temp);
// SINGLE[i]=(uint16_t)(sin(temp));
//
// DESIRE_dn[i]= (2^width)/2+(sin(temp)*((2^(width)/2) - 1));
}
}
void Produce_sin_noise(u16 FRE1,float Ts,u16 FRE2) //位数 频率 采样时间
{
u16 i=0;
float temp1,temp; //计算得到的sin值
// uint16_t SINGLE[TEST_LENGTH_SAMPLES];//未变换之前的取整sin值
for(i=0;i<TEST_LENGTH_SAMPLES;i++)
{
temp=i*Ts*FRE1*PI2;
temp1=i*Ts*FRE2*PI2;
INPUT_xn[i]=sin(temp)+sin(temp1);
// SINGLE[i]=(uint16_t)(sin(temp)+sin(temp1));
//
// INPUT_xn[i]= (2^width)/2+((sin(temp)+sin(temp1))*((2^(width)/2) - 1));
}
}
int main(void)
{
uint32_t i;
arm_lms_instance_f32 S;
float32_t *inputF32, *outputF32, *desireF32,*errorF32;
N_iden=16000;
Produce_sin(1000,Ts);
Produce_sin_noise(1000,Ts,6000);
inputF32 = &INPUT_xn[0];
outputF32 = &OUTPUT_yn[0];
desireF32 = &DESIRE_dn[0];
errorF32 = &ERROR_en[0];
// Cache_Enable(); //打开L1-Cache
// HAL_Init(); //初始化HAL库
// Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz
// delay_init(400); //延时初始化
arm_lms_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize,u);
while(n_iden<N_iden)
{
for(i=0; i < numBlocks; i++)
{
arm_lms_f32(&S, inputF32 + (i * blockSize), desireF32 + (i * blockSize),outputF32+ (i * blockSize) ,errorF32 + (i * blockSize),blockSize);
}
n_iden++;
}
while (1);
}
|
|