⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.c

📁 无限冲击响应滤波器( llR )算法 由于系统对序列施加的算法
💻 C
字号:
/*********************************************************************************
*  MCPSB.C	v1.00   测试MCBSP同步串口测试的主程序	                             *
*  版权(c) 	2007-		北京合众达电子技术有限责任公司			                 *							                                 *
**********************************************************************************/
#include "type.h"
#include "codec.h"
#include "sysreg.h"
#include "mcbsp54.h"
#include "memory.h"
#include "comm.h"
#include "math.h"
#include "stdio.h"
#include "tms320.h"
#include "dsplib.h"
#include "filter.h"

HANDLE codec_command =0;
HANDLE codec_data=0;
int i;
short dataleft[2048];
short dataright[2048] ={0};
short filter_result[1280];
void delay(int period);
//实验操控:
//选择SAMPLELONG 有三个选择,1、2、3。其中1代表256。2代表512。 3代表1024。
//选择FILTERTYPE 有两个选择,0、1。其中0代表FIRFILTER。1代表IIRFILTER。
//注意,本实验和ad实验、fft实验,
//都需要通过液晶和键盘在信号发生器的设置里面修改参数以生成所需要信号。
//观察数组:dataleft为原始输入数组;filter_result为滤波后数组。
#define SAMPLELONG 3
unsigned int SampleLong =1024;

main()
{	
  
	/*设置系统时钟*/
	sys_clk(CLK160);
	
	/*打开codec数据接口*/
	codec_data = codec_open(CODEC_DATA);
	/*打开codec命令接口*/
	codec_command = codec_open(CODEC_COMMAND);
	
	/*配置系统存储器*/	
	memory_set(0x80);
#if SAMPLELONG==1
	SampleLong =256;
#endif
#if SAMPLELONG==2
	SampleLong =512;
#endif
#if SAMPLELONG==3
	SampleLong =1024;
#endif		
	/*AD设置*/		
		/*AD前向增益调整*/
		/*Note:Improper gain setting may cause filter failure. */	
		codec_lineain_gain(codec_command, 0x10);
		/*AD采样率*/
		codec_sample_rate(codec_command, ADSAMPL44K);
	delay(2000);	
	for(;;)
	{    		
		/*启动AD采样*/					
		for(i = 0;i<SampleLong;)
		{
			/* Wait for sample from handset */
	   		while (!MCBSP_RRDY(CODEC_DATA)) {};
	   		/* Read sample from and write back to handset codec */
	   		/*左通路数据*/
			dataleft[i] = *(volatile u16*)DRR1_ADDR(CODEC_DATA);
			/* Wait for sample from handset */
	   		while (!MCBSP_RRDY(CODEC_DATA)) {};
	   	/*右通路数据*/
			dataright[i] =  *(volatile u16*)DRR1_ADDR(CODEC_DATA);			
			i = i+1;
		}
		/*fir滤波处理*/
        iir_filter(dataright,SOSr,G,filter_result,SampleLong,ROUND_IIR);	
		i=0;
	}							     
}

void delay(int period)
{
    int i, j;
    
    for(i=0; i<period; i++)
    {
        for(j=0; j<0x1000; j++);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -