您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 求助DSP库中fir参数的意思
本帖共有3831个阅读者
发表帖子 发表投票 回复主题
求助DSP库中fir参数的意思
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
10信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

不要在一个帖子里问连着跟帖问其他的问题,不一定看得见,要有新问题可以新发帖子问。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2011/9/6 16:22:06
songsongyu(论坛新手)
songsongyu
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:294
积分:30
注册时间:2011/7/27
11信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我在process()中使用这个函数进行fir,请问可以吗?我感觉效果不是很好,请问应该怎么做?

void Process_Data(void)
{


fir_fr16(sChannel0LeftIn, sChannel0LeftOut, 48, &stateL0);
fir_fr16(sChannel1LeftIn, sChannel1LeftOut, 48, &stateL1);
fir_fr16(sChannel0RightIn, sChannel0RightOut, 48, &stateR0);
fir_fr16(sChannel1RightIn, sChannel1RightOut, 48, &stateR1);

}


EX_INTERRUPT_HANDLER(Sport0_RX_ISR)
{
// confirm interrupt handling
*pDMA1_IRQ_STATUS = 0x0001;

// copy input data from dma input buffer into variables
sChannel0LeftIn = sRxBuffer1[INTERNAL_ADC_L0];
sChannel0RightIn = sRxBuffer1[INTERNAL_ADC_R0];
sChannel1LeftIn = sRxBuffer1[INTERNAL_ADC_L1];
sChannel1RightIn = sRxBuffer1[INTERNAL_ADC_R1];

// call function that contains user code
Process_Data();    

// copy processed data from variables into dma output buffer
sTxBuffer1[INTERNAL_DAC_L0] = sChannel0LeftOut;
sTxBuffer1[INTERNAL_DAC_R0] = sChannel0RightOut;
sTxBuffer1[INTERNAL_DAC_L1] = sChannel1LeftOut;
sTxBuffer1[INTERNAL_DAC_R1] = sChannel1RightOut;
}

// FIR Filter Initialization
void Init_Filter(void)
{
int i;

for (i=0; i<TAPS; i++)
{
  coef[i] = 0x02AB;  // 1/48 in fract16 format
}

fir_init(stateL0, coef, delayL0, TAPS, 0);
fir_init(stateL1, coef, delayL1, TAPS, 0);
fir_init(stateR0, coef, delayR0, TAPS, 0);
fir_init(stateR1, coef, delayR1, TAPS, 0);
}


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/9/7 19:50:37
毛毛(论坛新手)
毛毛
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:125
积分:5
注册时间:2011/9/6
12信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你这个程序这样写是有问题的, fir_fr16()函数格式如下

void fir_fr16(const fract16 input[],fract16 output[],int length,fir_state_fr16 *filter_state)
而你的程序中
      fir_fr16(sChannel0LeftIn, sChannel0LeftOut, 48, &stateL0);
sChannel0LeftIn,sChannel0LeftOut只是一个变量。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/9/7 22:56:56
songsongyu(论坛新手)
songsongyu
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:294
积分:30
注册时间:2011/7/27
13信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

写错了,是这样写的

fir_fr16(&sChannel0LeftIn, &sChannel0LeftOut, 48, &stateL0);

运行后发现只是声音小了点。并没用起到消噪的效果。

运行debug----view----plot----new-----sChannel0LeftIn发现图形没什么变化,显示的并不是输入音频信号的波形是怎么回事呢?


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/9/8 9:41:42
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
14信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你将你需要滤波的数据fill到buffer中,单独调用那个FIR滤波代码,进行滤波,看滤波后的波形是否有变化,如果有的话,就检查你现在的代码哪个地方有问题。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/9/10 11:22:09
15
2
2/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154612 Call, 1 Queries, Processed in 0.031250 second(s),