• 音频数字低通滤波与带进位除法优化


    16Khz采样频率,12Bit采样精度,经过ADPCM压缩解压缩算法后,听到一些低噪,通过硬件排除(一声道直接将mic经过运放后到耳放输出,判断进入AD的声音OK),认为问题来之AD采样内部噪声。

    优化思路:

    1、ADC经过16KHz的Timer进行DMA到SampBuf[32];

    2、在DMA中断,将SampBuf每相邻两个数据进行一次均值滤波,那么32个数据可以求31次,所以

    ===>     增加一个16bit的变量PreSamp,用于存储SampBuf[32-1],将最后的数据保存,用于衔接后一次DMA中断的第一组均值的第一个数据,即PreSamp,SampBuf[0];

    新增变量为静态变量,初值设为0即可。这样数据才会连续,不会出现每32个数据丢一个数据的bug;

    3、将数据编解码;

    4、启动DAC DMA的Timer中断,进行数据传输;

     5、OK


    附:均值滤波算法(计算结果存储为整数型适用

    static uint16_t EndSampVal = 0;
    #if 0
    PsamBuff[0] = (int16_t)(((EndSampVal + SampBuff[0])/2.0)+0.5)-2040;  
    	EndSampVal = SampBuff[BUFFSIZE-1];
    			
    	for(i=1;i<BUFFSIZE;i++)
    	{	
    	PsamBuff[i]=(int16_t)(((SampBuff[i-0]+SampBuff[i])/2.0)+0.5)-2040;			
    	}
    #else
    	PsamBuff[0] = (int16_t)((EndSampVal + SampBuff[0] + 1)>>1)-2040; 
    	EndSampVal = SampBuff[BUFFSIZE-1];
    			
    	for(i=1;i<BUFFSIZE;i++)
    	{	
    		PsamBuff[i]=(int16_t)((SampBuff[i-0]+SampBuff[i]+ 1)>>1)-2040;	
    	}
    #endif
    


    上面两种的计算结果是一致的,对于两个数据的四舍五入的算法优化,后面部分为优化部分,避免浮点运算的巨大计算量,提高计算效率。 即两个数的带进位除法可以通过分子加1,再除与分母来替代。当然保留的数据位整数型数据,非浮点数据;如果需要为浮点数据,该方法不能使用。



  • 相关阅读:
    服务器基础知识
    web服务器与应用服务器
    QGraphics
    对话框Dialog
    信号和槽
    nginx 杂记
    go语言nsq源码解读八 http.go、http_server.go
    go语言nsq源码解读七 lookup_protocol_v1.go
    go语言nsq源码解读六 tcp.go、tcp_server.go
    go语言nsq源码解读五 nsqlookupd源码registration_db.go
  • 原文地址:https://www.cnblogs.com/pangblog/p/3271391.html
Copyright © 2020-2023  润新知