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

📄 fft_new_sc.cpp

📁 并行分块的fft实现 基于斯坦福大学Imagine模拟器开发设计的FFT并行分块实现
💻 CPP
字号:
// Modified by
// Abhishek Das
// 11/17/2001

#include "idb_streamc.hpp"

//shared files
#include "fft_new.hpp"

STREAMPROG(fft_new);

unsigned int log2( unsigned int x )
{
  unsigned int i = 0;
  x >>= 1;
  while( x ) { x >>= 1; ++i; } 
  return i;
}


streamprog fft_new( String args)
{
	// load twiddle factors
	im_stream<complex> twiddle_factors (344,im_countup);
	//im_stream<complex> twiddle_factors;
	streamLoadFile("fft_new/twiddle8c1024.vfft", "txt", "", twiddle_factors);

	// allocate space for data input
	im_stream<complex> data_in (1024,im_countup);
	// load input data
	streamLoadFile("fft_new/input.vfft", "txt", "", data_in);

	// compute some useful values
	int len = data_in.getLength();
	int half_len = len / 2;
	int pow2_len = log2(len);
  
	cout << "***** len = " << len << endl;
	cout << "***** half_len = " << half_len << endl;
	cout << "***** pow2_len = " << pow2_len << endl;

	// allocate space for data output
	im_stream<complex> data_out (1024, im_countup);

	// temporary inputs and outputs
	
	im_stream<complex> new_data_in = data_in;
	im_stream<complex> new_data_out = data_out;
	
	// loop
	int i;
	int tw_inc = 1;
	im_uc<im_int> uc_i;
	im_uc<im_int> uc_tw_inc;

	bool isEven = true;

	for (i = 0; i < pow2_len; i++)
	{
		doUnroll(2);
		uc_i=i;
		uc_tw_inc=tw_inc;
		cout << "i = " << ucRead(uc_i) << " tw_inc = " << ucRead(uc_tw_inc) << endl;

		// call kernel
		fft8c(new_data_in(0, half_len), new_data_in(half_len, len), twiddle_factors,
			uc_i, uc_tw_inc,
			new_data_out(0, len));
	
		// temporary input and output exchange location
		if(!isEven) {
			new_data_in = data_in;
			new_data_out = data_out;
		}
		else {
			new_data_in = data_out;
			new_data_out = data_in;
		}

		isEven = !isEven;
		tw_inc = tw_inc * (i < 4 ? 1 : 2);
  }

  // save and verify final output data 
  new_data_out = new_data_in(0, len, im_acc_bit_reverse);
  streamSaveFile("fft_new/output.vfft", "txt", "E", new_data_out);
  streamCompareFile("fft_new/bitrev.vfft", new_data_out, 0.005f, "a");

}


⌨️ 快捷键说明

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