📄 ifft_modulation0.h
字号:
/* IFFT modulation */
void DSP_ifft16x32(const short *w, int nsamp, int *x, int *y);
void IFFT_Modulation(short *buffer_QAM,short *signal,short *Lfm_Data,int *x,int buffer_QAM_len)
{
unsigned int i,j;
int A;
int N_symbol;
struct _complex data[120];
int Num=Fs*Ts;
double K=B/Ts;
int max;
A=QAM_buffer_len%data_per_symbol;
if(A==0) N_symbol=floor((float)buffer_QAM_len/(float)data_per_symbol);
else N_symbol=floor((float)buffer_QAM_len/(float)data_per_symbol)+1;
for(i=0;i<data_per_symbol;i++)
{
data[i].x=0;
data[i].y=0;
}
for(j=0;j<N_symbol;j++)
{
for(i=0;i<FFT_Size;i++)
{
x[2*i]=0;
x[2*i+1]=0;
}
for(i=0;i<data_per_symbol;i++)
{
data[i].x=buffer_QAM[2*(data_per_symbol*j+i)];
data[i].y=buffer_QAM[2*(data_per_symbol*j+i)+1];
//data[i].x=10000;
//data[i].y=10000;
}
for(i=Carrier_Start;i<Carrier_Start+data_per_symbol;i++)
{
x[2*i]=data[i-Carrier_Start].x;
x[2*i+1]=data[i-Carrier_Start].y;
}
for(i=0;i<data_per_symbol;i++)
{
x[2*(FFT_Size-Carrier_Start-1-i)]=data[i].x;
x[2*(FFT_Size-Carrier_Start-1-i)+1]=-data[i].y;
}
DSP_ifft16x32(w,FFT_Size,x,y);
/*for(i=0;i<2048;i++) y[i]=10*x[2*i];
rfft(y,NX,SCALE);*/
for(i=0;i<CP_len;i++)
{
signal[(FFT_Size+CP_len)*j+i+3764]=x[2*(i+FFT_Size-CP_len)];
}
for(i=CP_len;i<FFT_Size+CP_len;i++)
{
signal[(FFT_Size+CP_len)*j+i+3764]=x[2*(i-CP_len)];
}
}
for(i=0;i<2000;i++)
{
signal[i]=0;
}
for(i=0;i<Num;i++)
{
Lfm_Data[i]=(int)(cos(2*pi*i*F_start/Fs+pi*K*pow(i,2)/pow(Fs,2))*10000);
}
for(i=2000;i<2882;i++)
{
signal[i]=Lfm_Data[i-2000];
}
for(i=2882;i<3764;i++)
{
signal[i]=0;
}
for(i=34484;i<35484;i++)
{
signal[i]=0;
}
max=signal[3764];
for(i=3764;i<34484;i++)
{
if(abs(signal[i])>max)
{
max=abs(signal[i]);
}
}
for(i=3764;i<34484;i++)
{
signal[i]=((double)signal[i]/max)*10000;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -