打印
[DSP]

5502语音程序无数据输出

[复制链接]
628|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
buda|  楼主 | 2019-12-22 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用的是5502开发板做语音信号自适应算法,程序运行的过程中,输入数组一直有数据输入,但是进入算法计算部分,却没有数据输出了,查看了一下算法的各个数组,lms_w数组始终为0,不知道程序的问题出在哪里了,这个算法之前在28335开发板上面运行没有问题,有声音输出,不知道为什么换了个开发板就不行了。。。还想请各位大神帮忙看一下!!!感激!!!程序如果不加算法,直接接输入输出是没有问题的,能输出期望的声音。

这是读取数据进算法程序部分代码:

void processBuffer(void)
{
Uint32 addr;
static Int16 pingPong=PING;
int output;

for ( i=0;i<LMS_M;i++ ){ h[i]=0;}

while(DMA_FGETH(hDmaRcv,DMACCR,ENDPROG)){
;
}

if(pingPong==PING)
{
addr=((Uint32)gBufferRcvPong)<<1;
DMA_RSETH(hDmaRcv,DMACDSAL,addr&0xffff);
DMA_RSETH(hDmaRcv,DMACDSAU,(addr>>16)&0xffff);
pingPong=PONG;
}
else
{
addr=((Uint32)gBufferRcvPing)<<1;
DMA_RSETH(hDmaRcv,DMACDSAL,addr&0xffff);
DMA_RSETH(hDmaRcv,DMACDSAU,(addr>>16)&0xffff);
pingPong=PING;
}
DMA_FSETH(hDmaRcv,DMACCR,ENDPROG,1);
DMA_FSETH(hDmaXmt,DMACCR,ENDPROG,1);

if(pingPong==PONG)
{
for(i=0;i<(BUFFSIZE/2);i++)
{
gBufferRcvPingleft[i]=gBufferRcvPing[2*i];
gBufferRcvPingright[i]=gBufferRcvPing[2*i+1];
}
for(i=0;i<(BUFFSIZE/2);i++){
if(i<LMS_M)
{
for(j=0;j<=i;j++)
{
lms_x[j]=gBufferRcvPingleft[i-j];
lms_error[j]=gBufferRcvPingright[i-j];
}
}
else
{
for(j=0;j<LMS_M;j++)
{
lms_x[j]=gBufferRcvPingleft[i-j];
lms_error[j]=gBufferRcvPingright[i-j];
}
}
lms_param_in.d=lms_x[i];
lms_param_in.error=&lms_error[0];
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);
gBufferXmtPing[i] =lms_param_out.y;
}
}
addr=((Uint32)gBufferXmtPing)<<1;
DMA_RSETH(hDmaXmt,DMACSSAL,addr&0xffff);
DMA_RSETH(hDmaXmt,DMACSSAU,(addr>>16)&0xffff);
}
else
{
for(i=0;i<(BUFFSIZE/2);i++)
{
gBufferRcvPongleft[i]=gBufferRcvPong[2*i];
gBufferRcvPongright[i]=gBufferRcvPong[2*i+1];}
for(i=0;i<(BUFFSIZE/2);i++){
if(i<LMS_M)
{
for(j=0;j<=i;j++)
{
lms_x[j]=gBufferRcvPongleft[i-j];
lms_error[j]=gBufferRcvPongright[i-j];
}
}
else
{
for(j=0;j<LMS_M;j++)
{
lms_x[j]=gBufferRcvPongleft[i-j];
lms_error[j]=gBufferRcvPongright[i-j];
}
}
lms_param_in.d=lms_x[i];
lms_param_in.error=&lms_error[0];
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);
gBufferXmtPong[i] =lms_param_out.y;
}
addr=((Uint32)gBufferXmtPong)<<1;
DMA_RSETH(hDmaXmt,DMACSSAL,addr&0xffff);
DMA_RSETH(hDmaXmt,DMACSSAU,(addr>>16)&0xffff);
}
DMA_start(hDmaXmt);
DMA_start(hDmaRcv);
}

这部分是算法部分代码:

#include <dotp.h>
#include <string.h>
#include "LMS.h"
#include "math.h"

#pragma DATA_ALIGN(lms_x, 8)
float lms_x[LMS_M];

#pragma DATA_ALIGN(lms_error, 8)
float lms_error[LMS_M];

#pragma DATA_ALIGN(lms_w_forward, 8)
float lms_w_forward[LMS_M]; //用于存储未来一时刻滤波系数向量w(k+1)

#pragma DATA_ALIGN(lms_w, 8)
float lms_w[LMS_M]; //用于存储当前时刻滤波系数矢量w(k)

float a=2,b=0.000000000000025;

Adaptive_Filter_In lms_param_in;
Adaptive_Filter_Out lms_param_out;

void LMS_Gradient_Instantaneous_Estimates(Adaptive_Filter_In *lms_in, Adaptive_Filter_Out* lms_out)
{
int i;
static int FIR_order;

static unsigned char First_in_flag = 1;
static float *w_ptr, *w_forward_ptr, *Temp_w_ptr;
static float *x_ptr,*error;

float temp,yy=0;

if(First_in_flag)
{
First_in_flag = 0;
FIR_order = lms_in->length_x;

memset((void *)lms_w_forward, 0, FIR_order*4);
memset((void *)lms_w, 0, FIR_order*4);

w_forward_ptr = lms_w_forward;
w_ptr = lms_w;
x_ptr = lms_in->x_ptr;
error = lms_in->error;
}

for(i=0; i<FIR_order; i++)
{
yy+=x_ptr[i]*w_ptr[i];
lms_out->y =yy;
}

temp = b*(lms_in->d - lms_out->y); //仿真用的语句

for(i=0; i<FIR_order; i++)
{

w_forward_ptr[i] = w_ptr[i] +temp*x_ptr[i];

}

Temp_w_ptr = w_forward_ptr; //新旧滤波系数矢量指针交换
w_forward_ptr = w_ptr;
w_ptr = Temp_w_ptr;

}

算法包含的头文件:

#ifndef ADAPTIVE_FITLER_H_
#define ADAPTIVE_FITLER_H_

typedef struct
{
float *x_ptr;
int length_x;
float d,*error;
}Adaptive_Filter_In;
typedef struct
{
float y;

}Adaptive_Filter_Out;

#endif /* ADAPTIVE_FITLER_H_ */

#ifndef LMS_H_
#define LMS_H_

#include "Adaptive_filter.h"

#define LMS_M 16

extern float lms_x[LMS_M];
extern float lms_error[LMS_M];

extern Adaptive_Filter_In lms_param_in;
extern Adaptive_Filter_Out lms_param_out;

extern void LMS_Gradient_Instantaneous_Estimates(Adaptive_Filter_In *lms_in, Adaptive_Filter_Out* lms_out);

#endif

使用特权

评论回复

相关帖子

沙发
manufact| | 2019-12-23 18:12 | 只看该作者
对语音这方面不熟,帮顶一下

使用特权

评论回复
板凳
gygp| | 2019-12-26 21:53 | 只看该作者
怎么移植到DSP5502上  

使用特权

评论回复
地板
chenci2013| | 2019-12-26 21:53 | 只看该作者
DSP种类很多      

使用特权

评论回复
5
biechedan| | 2019-12-26 21:54 | 只看该作者
DSP C5000系列一般用在什么领域

使用特权

评论回复
6
wangdezhi| | 2019-12-26 21:54 | 只看该作者
ti c55xx dsp多少钱  

使用特权

评论回复
7
isseed| | 2019-12-26 21:54 | 只看该作者
5402用于语音处理,如通信设备等应用,可以跑算法

使用特权

评论回复
8
xietingfeng| | 2019-12-26 21:54 | 只看该作者
C6000的性能能满足绝大部分音视频及信号处理算法等应用中

使用特权

评论回复
9
suzhanhua| | 2019-12-26 21:55 | 只看该作者
DSP bios 怎样在C6000之间移植  

使用特权

评论回复
10
mituzu| | 2019-12-26 21:55 | 只看该作者
5409比较好。   

使用特权

评论回复
11
hellosdc| | 2019-12-26 21:56 | 只看该作者
做5502 EVM开发板的好象挺少的  

使用特权

评论回复
12
uiint| | 2019-12-26 21:56 | 只看该作者
dsp5509烧写进flash程序怎么对比  

使用特权

评论回复
13
mituzu| | 2019-12-26 21:56 | 只看该作者
DSP 5502 读写外部IO空间?   

使用特权

评论回复
14
gygp| | 2019-12-26 21:56 | 只看该作者
TI的DSP对校园支持力度比较大

使用特权

评论回复
15
suzhanhua| | 2019-12-26 21:57 | 只看该作者
TI DSP C5000系列学哪一款比较好?  

使用特权

评论回复
16
chenci2013| | 2019-12-26 21:57 | 只看该作者
购买DSP5502的开发板,请问有什么推荐吗!

使用特权

评论回复
17
xietingfeng| | 2019-12-26 21:57 | 只看该作者
现在做算法也是比较主流使用C6000

使用特权

评论回复
18
biechedan| | 2019-12-26 21:57 | 只看该作者
C5000的速度虽然快,但和C6000相比差远了。

使用特权

评论回复
19
isseed| | 2019-12-26 21:57 | 只看该作者
5509同为TI的C5000系列芯片比5402较新

使用特权

评论回复
20
wangdezhi| | 2019-12-26 21:57 | 只看该作者
用DSP实现音频接口   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

1

粉丝