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

📄 uwb_interleaver.cpp

📁 UWB交织器的实现程序。另以DOC文档附详细的算法
💻 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 + -