Пример #1
0
int posix_memalign(void **memptr, size_t alignment, size_t size) {
	if ((1 << log2_int(alignment)) != alignment) {
		return EINVAL;
	}
	*memptr = allocator_aligned_alloc(allocator_get_global(), alignment, size);
	if (!*memptr) {
		return ENOMEM;
	}
	return 0;
}
Пример #2
0
void *aligned_alloc(size_t alignment, size_t size) {
	if ((1 << log2_int(alignment)) != alignment) {
		errno = EINVAL;
		return NULL;
	}
	void* ret = allocator_aligned_alloc(allocator_get_global(), alignment, size);
	if (!ret) {
		errno = ENOMEM;
	}
	return ret;
}
Пример #3
0
//length of S[i]
int shuffle_p(int y_num,int tag_length)
{
	return 3*log2_int(tag_length)+2*log2_int(y_num);		
}
Пример #4
0
static inline int
main_fft(float *rex, float *imx, int n)
{
	int i, ip, j, k, m;
	int le, le2;
	int nd2;
	float si, sr, ti, tr, ui, ur;
	
	nd2 = n / 2;
	
	if (n <= 0 || rex == NULL || imx == NULL)
		return -1;
	/* Bit rev sorting
	 * Idea from Smith Scientist and
	 * Engineers guide to DSP
	 * second edition
	*/
	j = nd2;
	for (i = 1; i < n - 1; i++) {
		if ( i < j) {
			tr = rex[j];
			ti = imx[j];
			rex[j] = rex[i];
			imx[j] = imx[i];
			rex[i] = tr;
			imx[i] = ti;
		}
		k = nd2;
		while (k <= j) {
			j -= k;
			k >>= 1;
		}
		j = j + k;
	}
	
	m = log2_int(n);
	le = 1;
	
	for (k = 1; k <= m; k++) {					//Each stage
		le2 = le;
		le <<= 1;
		
		ur = 1;
		ui = 0;
		
		sr = cos(M_PI / le2);
		si = -sin(M_PI / le2);
		
		for (j = 1; j <= le2; j++) {				//Each SUB DFT
			for (i = j - 1; i < n; i += le) {		//Each butterfly
				ip = i + le2;				//Butterfly
				tr = rex[ip] * ur - imx[ip] * ui;
				ti = rex[ip] * ui + imx[ip] * ur;
				
				rex[ip] = rex[i] - tr;
				imx[ip] = imx[i] - ti;
				
				rex[i] = rex[i] + tr;
				imx[i] = imx[i] + ti;
			}
			tr = ur;
			ur  = tr * sr - ui * si;
			ui = tr * si + ui * sr;
		}
	}
	
	return 0;
}