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.

[参考译文] MSP432P401R:FIR 滤波的性能问题

Guru**** 2589265 points
Other Parts Discussed in Thread: BOOSTXL-AUDIO

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623667/msp432p401r-performance-issues-with-fir-filtering

器件型号:MSP432P401R
主题中讨论的其他器件:BOOSTXL-AUDIO

您好!

我正在开发用于实时音频处理的 DSP 应用、并且遇到了 FIR 滤波性能问题。 我的设置的工作原理是根据计时器对 ADC14进行采样、进行滤波、然后将输出写入 DAC。 当没有完成滤波时(本质上是采样、然后立即回放样本)、应用就能完美工作、但是当我添加滤波功能时、系统似乎无法跟上。

是否有人可以查看我是否做了错误的事情、或将我指向一些示例代码? 这是作为演示开发的、因此我宁愿手动实施它、而不是使用内置的 DSP 库。

//定点 FIR 服务例程
Int16_t FIR (const uint8_t M、const int16_t* fir、int16_t* buffer、
uint8_t* buffer_index、const int16_t x){

uint8_t i;// cefir int8_t buffer p;
// index =


* buffer =/index * buffer_t =*、* buffer_t =*、* int8_t buffer =*、*、int_t buffer *、int8、int_index = t*、buffer_t =*、buffer =*、
//将缓冲区换行并更新

为(acac=0、p=*buffer_index、i=0;i<M;i++){
if (p<0){p += M;}//将缓冲区索引
acc +=((int32_t) fif[i])*(((int32_t) buffer[p]);//mac




= 0x3fc);如果结果为0x3f acc =饱和;/c = 0x3f acc)

否则、如果(ACC <-0x40000000){
ACC =-0x40000000;
}

(* buffer_index)++;//递增缓冲
区返回的最旧单元格索引(int16_t)(ACC >> 16);//将结果截断
}

//计时器和 ADC 例程
void TA0_N_IRQHandler (void){
if (timer_A0)(cc14_eCC14>eCC11[eout_unc
);//将 dac 例程写入到全局 CC8314_eCC14_eQTL (void) //稍后更新为结果 DWT

//需要为 ADC 触发更新 CCR[0]*/
TIMER_A0->CCR[0]+= GLOBAL_PERIOD;
TIMER_A0->CCR[1]+= GLOBAL_PERIOD;

TIMER_A0->CCTL[1];
=~CCIFG;}


void ADC14_IRQHandler (void

)=GLOBAL (void 14)/CCTL[1]&= CCTL[1];}}void ADC14_MCL[void ADC14
(void (void)= ADC14 (void)= ADC14 (void)(void)(void (void)(void

CS->KEY = CS_KEY_VAL;//Unlock CS 寄存器

CS->CTL0 =
CS_CTL0_DCOEN |
CS_CTL0_DCORSEL_5;//选择48MHz 时钟速度

CS->CTL1 =
CS_CTL1_SELS _3 |
CS_CTL1_SELM_3;//使用 DCOCLK 作为 MCLK、SMCLK + HSMCLK 的源

CS->KEY = 0; //重新锁定 CS 寄存器
} 

我包括了这样的情况、即我不执行任何滤波、但当我向计时器中断添加 FIR 服务例程时、会发生故障。 当我将滤波器输出返回到不是写入样本的值时、它甚至会失败(将滤波器输出转移到虚拟值、并无论如何将原始样本写入 DAC)。

谢谢、

Thomas