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

📄 fir4.c

📁 基于恩智浦dsp芯片的fir滤波源码
💻 C
字号:
#include <ops/custom_defs.h>

#define NROF_SAMPLES	400

void
initialize( char *a, char *b )
{
	int	i;
	
	for(i = 0; i < 8; i++)
		b[i] = i - 4;

	for(i = 0; i < 8; i++)
		a[i] = 0;                /* Prepend zeros */
		
	for(i = 8; i < NROF_SAMPLES; i++)
		a[i] = i - 24;           /* Actual data   */
		
	for(i = NROF_SAMPLES; i < NROF_SAMPLES + 8; i++)
		a[i] = 0;                /* Append zeros  */
}

/*  
 * Implementation with custom operators. 
 * Four multiplications and three additions are done with
 * one FUNSHIFT and one IFIR8II instructions.
 */
 
void
custom_ops_direct_convolution(
		char * restrict a, 
		char * restrict b,
		int  * restrict c )
{
	int	i, ib0, ib1, i0, i1, i2;
	int   * restrict ia;

	ia = (int *) a;

	/*    
	 * Copy b, in a new array called rev_b in time reversed order.
	 * ib points this array as an integer pointer.
	 * Let A = |abcd| and B = |pqrs| with where a,b,c,d,p,q,r, and s are
	 * all 8 bit integers. Then
	 * PACKBYTES(A,B) = |ds] and 
	 * PACK16LSB(A,B) = |cdrs|
	 */

	ib0 = PACK16LSB(PACKBYTES(b[7], b[6]), PACKBYTES(b[5], b[4]));
	ib1 = PACK16LSB(PACKBYTES(b[3], b[2]), PACKBYTES(b[1], b[0]));

	for(i = 0; i < NROF_SAMPLES/4 ; i++) {
	
		/*
  		 * Let A = |abcd| and B = |pqrs| where a,b,c,d,p,q,r, and s are
		 * all 8 bit integers. Then
		 * FUNSHIFT1(A,B) = |bcdp|
		 * FUNSHIFT2(A,B) = |cdpq|
		 * FUNSHIFT3(A,B) = |dpqr|
		 * 
		 * IFIR8II(A,B)   = a*p + b*q + c*r + d*s
		 */

		i0 = ia[i - 2];
		i1 = ia[i - 1];
		i2 = ia[i];

		c[0] = IFIR8II(ib0, FUNSHIFT1(i0, i1)) +
		       IFIR8II(ib1, FUNSHIFT1(i1, i2));
		c[1] = IFIR8II(ib0, FUNSHIFT2(i0, i1)) + 
		       IFIR8II(ib1, FUNSHIFT2(i1, i2));
		c[2] = IFIR8II(ib0, FUNSHIFT3(i0, i1)) + 
		       IFIR8II(ib1, FUNSHIFT3(i1, i2));
		c[3] = IFIR8II(ib0, i1)                +
		       IFIR8II(ib1, i2);

		c += 4;
	}
}

int 
main( void )
{
	char	a[8+NROF_SAMPLES], b[8];
	int 	c[NROF_SAMPLES];

	initialize( a, b );

	custom_ops_direct_convolution( a + 8, b, c );
 
	return 0;
}


⌨️ 快捷键说明

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