单片机/MCU论坛
直播中

乐骞添

8年用户 1083经验值
私信 关注
[问答]

DSP21375用VISUAL DSP++5.1.1 FIR库进行滤波,FIR输出前40个数据都是\"0\"问题出在哪里?

用ADI21375做FIR滤波。软件实现方式:
用链表DMA方式读取和发送数据BUFF-  >   每一个链表完成后进入中断  ->   ADC L/R数据分离   ->  L/R数据除以2的31次方,变换成浮点数->FIR  -> L/R 数据存入DAC发送BUFF.
问题来了:
   DSP21375用VISUAL DSP++5.1.1 FIR库进行滤波,出现如图的情况,FIR输出前40个数据都是"0",不知问题出在哪里?
]
FIR 滤波器通频带是10KHZ ,阻带20K ,二倍频程衰减80DB ,滤波器80阶。
源代码:
#include
#define N NUM_SAMPLES/2
#define TAPS  80
//滤波器系数
float pm adcoeffs[TAPS+1]={
                   -0.00142993104524,-0.003289811986829,-0.005282332460651,  -0.0075069448623,
                   -0.00833784587848,-0.007776107140672,-0.005016122768101,-0.001099967770155,
                   0.003213643962488, 0.006016725367764, 0.006414789515753, 0.003780666676801,
                  -0.0007747690201561,-0.005593084934047,-0.008292796716591,-0.007474471569354,
                  -0.002894142730604,  0.00370558678562, 0.009576439183326,  0.01170483457889,
                   0.008546757383277, 0.000697116076388,-0.008783990634843, -0.01564147328494,
                   -0.01604979055559,-0.008671667639916, 0.004414367121836,  0.01793968257963,
                    0.02542079739782,   0.0218443329146, 0.006360386319139, -0.01649993681243,
                   -0.03756126656446, -0.04588317097792, -0.03271438997146, 0.004775757393522,
                    0.06159175162126,   0.1256310834033,    0.181053268937,   0.2131620859593,
                     0.2131620859593,    0.181053268937,   0.1256310834033,  0.06159175162126,
                   0.004775757393522, -0.03271438997146, -0.04588317097792, -0.03756126656446,
                   -0.01649993681243, 0.006360386319139,   0.0218443329146,  0.02542079739782,
                    0.01793968257963, 0.004414367121836,-0.008671667639916, -0.01604979055559,
                   -0.01564147328494,-0.008783990634843, 0.000697116076388, 0.008546757383277,
                    0.01170483457889, 0.009576439183326,  0.00370558678562,-0.002894142730604,
                  -0.007474471569354,-0.008292796716591,-0.005593084934047,-0.0007747690201561,
                   0.003780666676801, 0.006414789515753, 0.006016725367764, 0.003213643962488,
                  -0.001099967770155,-0.005016122768101,-0.007776107140672, -0.00833784587848,
                    -0.0075069448623,-0.005282332460651,-0.003289811986829, -0.00142993104524
};
float adinputL[N];//左声道分离后的数据输入
float adoutputL[N];//右边声道分离后的数据输入
float adinputR[N];//左声道FIR输出的数据
float adoutputR[N];//右声道的输出数据
float adstate[TAPS+1];//阶数
//*******************
下面是中断中的FIR滤波:
      for (i = 0; i < TAPS+1; i++)*(adstate+i) = 0;  
     
     //分离ADC输入左右声道的数据
     for(i=0;i

回帖(1)

王兰

2024-1-12 16:37:32
可能的原因是在链表DMA方式读取和发送数据BUFF时,数据没有正确地被传递给FIR滤波器。以下是一些可能导致该问题的原因和解决方法:

1. 链表DMA设置错误:确保DMA设置正确,包括数据传输方向、源和目标地址等。

2. 数据类型转换错误:在将L/R数据除以2的31次方转换为浮点数之前,确保数据类型正确,并根据FIR库的要求进行正确的数据类型转换。

3. FIR滤波器参数设置错误:确保FIR滤波器的通频带、阻带和二倍频程衰减等参数设置正确,并与实际要求相匹配。

4. FIR滤波器初始化错误:确保正确地初始化FIR滤波器,包括设置滤波器系数和其他必要的初始化操作。

5. 数据缓冲区设置错误:确保数据缓冲区大小足够容纳需要滤波的数据,并且数据被正确地存储和读取。

6. 数据处理顺序错误:确保数据被正确地传递给FIR滤波器,并且滤波器的输出数据被正确地存储和发送。

通过仔细检查上述可能的问题,并进行逐个排查,可以找到导致FIR输出前40个数据都是"0"的具体原因。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分