完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用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个回答
|
|
可能的原因是在链表DMA方式读取和发送数据BUFF时,数据没有正确地被传递给FIR滤波器。以下是一些可能导致该问题的原因和解决方法:
1. 链表DMA设置错误:确保DMA设置正确,包括数据传输方向、源和目标地址等。 2. 数据类型转换错误:在将L/R数据除以2的31次方转换为浮点数之前,确保数据类型正确,并根据FIR库的要求进行正确的数据类型转换。 3. FIR滤波器参数设置错误:确保FIR滤波器的通频带、阻带和二倍频程衰减等参数设置正确,并与实际要求相匹配。 4. FIR滤波器初始化错误:确保正确地初始化FIR滤波器,包括设置滤波器系数和其他必要的初始化操作。 5. 数据缓冲区设置错误:确保数据缓冲区大小足够容纳需要滤波的数据,并且数据被正确地存储和读取。 6. 数据处理顺序错误:确保数据被正确地传递给FIR滤波器,并且滤波器的输出数据被正确地存储和发送。 通过仔细检查上述可能的问题,并进行逐个排查,可以找到导致FIR输出前40个数据都是"0"的具体原因。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
377 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
536 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
540 浏览 0 评论
950 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1403 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11762 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:48 , Processed in 0.744845 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号