コード例 #1
0
/* Driver program to check above functions */
int main()
{
	{
		int arr[] =   {1, 1, 1, 0, 0, 0, 0, 0};
		int n = sizeof(arr)/sizeof(arr[0]);
		printf("Count of zeroes is %d \n", countZeros(arr, n));
	}
	{
		int arr[] =   {1, 0, 0, 0, 0};
		int n = sizeof(arr)/sizeof(arr[0]);
		printf("Count of zeroes is %d \n", countZeros(arr, n));
	}
	{
		int arr[] =   {0, 0, 0};
		int n = sizeof(arr)/sizeof(arr[0]);
		printf("Count of zeroes is %d \n", countZeros(arr, n));
	}
	{
		int arr[] =  {1, 1, 1, 1};
		int n = sizeof(arr)/sizeof(arr[0]);
		printf("Count of zeroes is %d \n", countZeros(arr, n));
	}
    return 0;
}
コード例 #2
0
ファイル: iir_transform.c プロジェクト: Endruu/szakdoga
// BANDPASS
pzkContainer * t2bp(pzkContainer * pzk, real w0, real dw) {
	uint nop, noz, i;
	pzkContainer * f;
	const real dwp2 = dw / 2;
	const real w02 = w0*w0;
	complex tmp, beta, gamma, cw0;
	
	cw0.re = w0;
	cw0.im = 0;
	
	noz = 2*pzk->nextZero;
	nop = 2*pzk->nextPole;
	
	if( pzk->no_wz > 0 ) {
		noz += pzk->no_wz;
	}
	if( pzk->no_wz < 0 ) {
		nop -= pzk->no_wz;
	}
	
	f = createPzkContainer(nop, noz);
	
	f->no_wz = -pzk->no_wz;
	f->amp = pzk->amp * pow(dw, (real)(f->no_wz)+(real)countPoles(pzk)-(real)countZeros(pzk));
		
	gamma.re = 0;
	gamma.im = w0;
	if( pzk->no_wz > 0 ) {
		for( i = 0; i < pzk->no_wz; i++ ) {
			addZero(f, gamma);
		}
	}
	if( pzk->no_wz < 0 ) {
		for( i = 0; i < -pzk->no_wz; i++ ) {
			addPole(f, gamma);
		}
	}

	for( i = 0; i < pzk->nextPole; i++ ) {
		if( cisreal(pzk->poles[i]) ) {
			beta.re = dwp2 * pzk->poles[i].re;
			tmp.re = 1 - ( w02/(beta.re*beta.re) );

			if( tmp.re >= 0 ) {
				tmp.re = sqrt( tmp.re );
				gamma.im = 0;
				gamma.re = beta.re * (1 + tmp.re);
				addPole(f, gamma);
				gamma.re = beta.re * (1 - tmp.re);
				addPole(f, gamma);
			} else {
				tmp.im = sqrt( -tmp.re );
				tmp.re = 1;
				gamma = cmul2( beta.re, tmp );
				addPole(f, gamma);
			}

			f->no_wz++;
		}
		else {
			beta = cmul2(dwp2, pzk->poles[i]);	
			tmp = cdiv(cw0, beta);
			tmp = csqrt( csub2(1, cmlt(tmp, tmp)) );

			gamma = cmlt(beta, cadd2(1, tmp));
			addPole(f, gamma);
			gamma = cmlt(beta, csub2(1, tmp));
			addPole(f, gamma);
			f->no_wz += 2;
		}
	}
	
	for( i = 0; i < pzk->nextZero; i++ ) {
		if( cisreal(pzk->zeros[i]) ) {
			beta.re = dwp2 * pzk->zeros[i].re;
			tmp.re = 1 - ( w02/(beta.re*beta.re) );

			if( tmp.re >= 0 ) {
				tmp.re = sqrt( tmp.re );
				gamma.im = 0;
				gamma.re = beta.re * (1 + tmp.re);
				addZero(f, gamma);
				gamma.re = beta.re * (1 - tmp.re);
				addZero(f, gamma);
			} else {
				tmp.im = sqrt( -tmp.re );
				tmp.re = 1;
				gamma = cmul2( beta.re, tmp );
				addZero(f, gamma);
			}

			f->no_wz--;
		}
		else {
			beta = cmul2(dwp2, pzk->zeros[i]);	
			tmp = cdiv(cw0, beta);
			tmp = csqrt( csub2(1, cmlt(tmp, tmp)) );

			gamma = cmlt(beta, cadd2(1, tmp));
			addZero(f, gamma);
			gamma = cmlt(beta, csub2(1, tmp));
			addZero(f, gamma);
			f->no_wz -= 2;
		}
	}
	
	//shrink
	return f;
	
}