This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6748: 将mic in接口的左右声道的数据分别作为LMS算法的参考信号和误差信号进行处理,输出结果通过line out输出 ,但是无法输出音频数据

Part Number: TMS320C6748


#define BUFSIZE_L 8000
#define BUFSIZE_R 8000
unsigned int inbuffer_L[BUFSIZE_L];
unsigned int inbuffer_R[BUFSIZE_R];

int* input_samples_L = (int*)inbuffer_L;
int* input_samples_R = (int*)inbuffer_R;


unsigned int buf_ptr_L = 0;
unsigned int buf_ptr_R = 0; //这部分是将input输入的左右声道数据存到缓存区inbuffer和inbuffer2中


#define nr 8000
#define nh 128
#define mu 0.001 //对于函数lms的相关定义

static void McASPIsr(void)
{
// unsigned int sample, status;
unsigned int sample_L,sample_R, status;

IntEventClear(SYS_INT_MCASP0_INT);

status = McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS);

if(status & MCASP_TX_STAT_CURRSLOT_EVEN)
{
// 读取右通道数据
sample_R = InputSample();
inbuffer_R[buf_ptr_R] = sample_R;
buf_ptr_R = (buf_ptr_R +1 )%BUFSIZE_R; //缓存了sample_R
input_samples_R = (int*)&inbuffer_R[buf_ptr_R];
}
else
{
// 读取左通道数据
sample_L = InputSample();
inbuffer_L[buf_ptr_L] = sample_L;
buf_ptr_L = (buf_ptr_L + 1) % BUFSIZE_L;
input_samples_L = (int*)&inbuffer_L[buf_ptr_L];
}

int i, j;
unsigned int sum;
unsigned int error[nr];
unsigned int x[nh];
unsigned int h[nh];
unsigned int output[nr];
// unsigned int *y = (unsigned int *)output;

for (i = 0; i < nr; i++) {
// 更新延迟线 x
for (j = nh-1; j > 0; j--) {
x[j] = x[j-1];
}
x[0] = input_samples_L[i];
// x[0] = inbuffer_L[i];
// 计算当前输出值
sum = 0.0;
for (j = 0; j < nh; j++) {
sum += h[j] * x[i-j+nh-1];
}
output[i] = sum;

// 更新误差值
error[i] = input_samples_R[i];
// error[i] = inbuffer_R[i];
// 更新滤波器的权重系数
for (j = 0; j < nh; j++) {
h[j] = h[j] + mu * error[i] * x[i-j+nh-1];
}
}

if(status & MCASP_TX_STAT_CURRSLOT_EVEN)
{
// 输出右声道数据
OutputSample((int)error[i]);
}
else
{
// 输出左声道数据
OutputSample((int)error[i]);
}
}