📄 fft_new_sc.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 + -