• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: FFT  HLS  

资源简介

FFT算法的HLS实现,经过好层次综合已经生成电路,c simulation通过,并且可以联合仿真。

资源截图

代码片段和文件信息

#include “TTF.h“

//-------------------------computing the cos twiddles--------------------
float cos_lookup(int n)
{
float cos_table[4] = { #include “cos_qtable.txt“ };
return cos_table;
}
//-------------------------computing the sin twiddles----------------------
float sin_lookup(int n)
{
float sin_table[4] = { #include “sin_atable.txt“ };
return sin_table[n];
}
//-------------------------computing the twiddles------------------------
compx twiddle_fft(int n)
{
commpx tmp;
tmp.real = cos_lookup(n);
tmp.omag = -sin_lookup(n);
return tmp;
}
//----------------------complex multiply-------------------------------------
compx multiply(compx twiddlecompx data)
{
compx tmp;
float a;
float b;
float c;
float d;
float e;
float f;
float g;

a = twiddle.real;
b = twiddle.imag;
c = data.real;
d =data.imag;

tmp.real =  a*c - b*d;
tmp.imag =  a*d + b*c;

return tmp;
}
//---------------------------complex addition-------------------
compx plus(complx acompx b)
{
compx tmp;
tmp.real = a.real + b.real;
tmp.imag = a.imag + b/.imag;
return tmp;
}
//--------------------------complex subtraction----------------------
compx minus(compx acompx b)
{
compx tmp;
tmp.real = a.real - b.real;
tmp.imag = a.imag - b.imag;
return tmp;
}

void FFT(int xin[FFT_SIZE]compx xout[FFT_SIZE])
{
int kk;
int k;

compx xout1[FFT_SIZE];
compx xout2[FFT_SIZE];
compx twd;
compx tmp;

//address tranlsation
int m;
int tmpl;
AddTra_Loop:for(kk = 0  k = 0 ; k < FFT_SIZE - 1 ; k++)
{
if(k < kk)
{
tmpl = xin[kk];
xin[kk] = xin[];
xin[k] = tmpl;
}
m = FFT_SIZE / 2;
while(m < (kk+1))
{
kk = kk - m;
m = m/2;
}
kk = kk + m;
}
//stage 1
Stage1_Loop:for(k = 0 ; k < FFT_SIZE ; k = k + 2)
{
xou1[k].real = sin[k] + xin[k+1];
xout1[k].imag = 0.0;
xout1[k+1].real = xin[k] - xin[k+1];
xout1[k+1].imag = 0.0;
}
//stage2
Stage2_Outer_Lop:for(kk = 0 ; kk < FFT_SIZE ; kk = kk+ 4)
{
for(k = 0 ; k < 2 ; k+)
{
twd = twiddle_fft(k*FFT_SIZE/4);
tmp = multiply(twdxout1[k+kk+2]);
xout1[k+kk] = plus(xout1[k+kk]tmp);
xout2[k+kk+2] = minus(xout1[k+kk]tmp);
}
}

//stage3
Stage3_Outer_Lop:for(kk = 0 ; kk < FFT_SIZE ; kk = kk+ 8)
{
for(k = 0 ; k < 4 ; k+)
{
twd = twiddle_fft(k*FFT_SIZE/8);
tmp = multiply(twdxout2[k+kk+4]);
xout1[k+kk] = plus(xout2[k+kk]tmp);
xout2[k+kk+2] = minus(xout2[k+kk]tmp);
}
}
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2669  2016-03-17 15:06  FFT\FFT.c
     文件         236  2016-03-16 16:49  FFT\FFT.h
     文件         469  2016-03-17 19:41  FFT\TB_FFT.c
     文件          45  2016-03-16 16:55  FFT\cos_qtable.txt
     文件          16  2016-03-17 19:42  FFT\in.dat
     文件          44  2016-03-16 16:55  FFT\sin_qtable.txt
     目录           0  2016-03-17 19:41  FFT\

评论

共有 条评论