📄 uwb_interleaver.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include <windows.h>
void WriteDat(int **b,int N_cbps,int tsf,char name[]) //保存数据函数
{
int i,j,m;
FILE *out;
out=fopen(name,"w"); //创建一个文件
if(out==NULL) //创建文件失败则退出
{
printf("无法读写文件");
exit(0);
}
fprintf(out,"\t\t\tUWB交织器\n");
fprintf(out,"\t\t L=%d (从上至下,从左至右)\n\n",tsf*N_cbps);
m=0;
for(i=0;i<tsf;i++)
for(j=0;j<N_cbps;j++)
{
fprintf(out,"%5d",b[i][j]);
m++;
if(m==20)
{
fprintf(out,"\n");
m=0;
}
}
fclose(out); //关闭文件
}
void main() //主函数
{
int N_tds,N_cbps,N_tint,tsf;
int i,j,k,set;
int *U,*S,**T,**b;
char name[20];
printf("1.53.3(Mb/s) 2.55(Mb/s) 3.80(Mb/s) 4.106.7(Mb/s) 5.110(Mb/s)\n");
printf("6.160(Mb/s) 7.200(Mb/s) 8.320(Mb/s) 9.400(Mb/s) 10.480(Mb/s)\n");
L1:printf("请选择数据速率(Mb/s):"); //输入数据速率
scanf("%d",&set);
switch(set) //根据输入选择对应的参数
{
case 1: N_tds=2;
N_cbps=100;
strcpy(name,"UWB_53.3Mbps.txt");
break;
case 2: N_tds=2;
N_cbps=100;
strcpy(name,"UWB_55Mbps.txt");
break;
case 3: N_tds=2;
N_cbps=100;
strcpy(name,"UWB_80Mbps.txt");
break;
case 4: N_tds=2;
N_cbps=200;
strcpy(name,"UWB_106.7Mbps.txt");
break;
case 5: N_tds=2;
N_cbps=200;
strcpy(name,"UWB_110Mbps.txt");
break;
case 6: N_tds=2;
N_cbps=200;
strcpy(name,"UWB_160Mbps.txt");
break;
case 7: N_tds=2;
N_cbps=200;
strcpy(name,"UWB_200Mbps.txt");
break;
case 8: N_tds=1;
N_cbps=200;
strcpy(name,"UWB_320Mbps.txt");
break;
case 9: N_tds=1;
N_cbps=200;
strcpy(name,"UWB_400Mbps.txt");
break;
case 10: N_tds=1;
N_cbps=200;
strcpy(name,"UWB_480Mbps.txt");
break;
default:goto L1;
}
N_tint=N_cbps/10;
tsf=6/N_tds;
S=new int[tsf*N_cbps]; //动态创建一维数组S[]
T=new int*[tsf]; //动态创建二维数组T[][]
for(i=0;i<tsf;i++)
{
T[i]=new int[N_cbps];
}
b=new int*[tsf]; //动态创建二维数组b[][]
for(i=0;i<tsf;i++)
{
b[i]=new int[N_cbps];
}
for(i=0;i<tsf*N_cbps;i++) //符号间交织
S[i]=(i/N_cbps)+tsf*(i%N_cbps);
for(i=0;i<tsf;i++) //数据分块,每块大小为N_cbps
for(j=0;j<N_cbps;j++)
T[i][j]=S[N_cbps*i+j];
for(i=0;i<tsf;i++) //分别对每组进行交织
{
for(j=0;j<N_cbps;j++) //符号内音调交织
for(k=0;k<N_cbps;k++)
if(k==j/N_tint+10*(j%N_tint))
{
b[i][j]=T[i][k];
break;
}
if(set==1||set==2||set==3) //模式1循环交织(共轭对称模式且N_cbps=100)
{
for(j=0;j<N_cbps;j++) //第二次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+33)%N_cbps)
{
T[i][j]=b[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第三次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+66)%N_cbps)
{
b[i][j]=T[i][k];
break;
}
}
else if(set==4||set==5||set==6||set==7)//模式2循环交织(非共轭对称模式且TSF=2,N_cbps=200)
{
for(j=0;j<N_cbps;j++) //第二次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+66)%N_cbps)
{
T[i][j]=b[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第三次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+132)%N_cbps)
{
b[i][j]=T[i][k];
break;
}
}
else if(set==8||set==9||set==10)//模式3循环交织(非共轭对称模式且TSF=1,N_cbps=200)
{
for(j=0;j<N_cbps;j++) //第二次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+33)%N_cbps)
{
T[i][j]=b[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第三次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+66)%N_cbps)
{
b[i][j]=T[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第四次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+99)%N_cbps)
{
T[i][j]=b[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第五次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+132)%N_cbps)
{
b[i][j]=T[i][k];
break;
}
for(j=0;j<N_cbps;j++) //第六次循环交织
for(k=0;k<N_cbps;k++)
if(k==(j+135)%N_cbps)
{
T[i][j]=b[i][k];
break;
}
for(j=0;j<N_cbps;j++)
b[i][j]=T[i][j];
}
}
for(i=0;i<tsf;i++)
{
for(j=0;j<N_cbps;j++)
printf("%5d",b[i][j]);
printf("\n");
}
WriteDat(b,N_cbps,tsf,name); //调用函数,保存数据
delete[tsf*N_cbps] S; //释放内存空间
for(i=0;i<tsf;i++)
{
delete[N_cbps] T[i];
delete[N_cbps] b[i];
}
delete[tsf] T;
delete[tsf] b;
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -