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

📄 wimax_interleaver.cpp

📁 Wimax 交织器的实现程序。。另加详细的算法
💻 CPP
字号:
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include <windows.h>

void WriteDat(int N_cbps,int *j,int set,char name2[])       //输出文本文件
 {
  int i,m=0;
  FILE *out;
  out=fopen(name2,"w");  //创建一个文件 
    if(out==NULL)           //创建文件失败则退出 
      {
       printf("无法创建文件");
       exit(0);
      }
  fprintf(out,"\t\t\tWiMax 交织器\n ");
  fprintf(out,"\t\t      数据块长度=%d bit (从左至右,从上至下)\n",N_cbps);
  for(i=0;i<N_cbps;i++)
    {
      fprintf(out,"%5d",j[i]);
      m++;
      if(m==20)
        {
         fprintf(out,"\n");
         m=0;
        }   
     }
  fclose(out);    //关闭文件 
 }
void main()
{
  int set,N_cbps,s,d=16,*m,*j,k;
  char name[5],name2[25];
  printf("说明:\n数据块长度: 32<=N_cbps<=4096\n");
  printf("1.当选择BPSK和QPSK时,N_cbps 应为16的整数倍\n");
  printf("2.当选择16QAM时,N_cbps应为32(16*2)的整数倍\n");
  printf("3.当选择64QAM时,N_cbps应为48(16*3)的整数倍\n\n");
  printf("请选择调制方式:\n1.BPSK\t2.QPSK\t3.16QAM\t4.64QAM\n");
  scanf("%d",&set);
  switch(set)   //根据调制方式选择参数S
   { 
    case 1:s=1;break;
    case 2:s=1;break;
    case 3:s=2;break;
    case 4:s=3;break;
   }
L1:printf("\n请输入数据块的长度:N_cbps="); //输入数据块长度,如有误,则重新输入
  scanf("%d",&N_cbps);
  if(N_cbps<32||N_cbps>4096)
  {printf("输入数据块长度有误,请重新输入!\n");
   goto L1;
  }
   if(s==1&&N_cbps%16!=0)
   {
	printf("输入数据块长度有误,请重新输入!\n");
	goto L1;
   }
   else if(s==2&&N_cbps%32!=0)
   {
	printf("输入数据块长度有误,请重新输入!\n");
	goto L1;
   }
   if(s==3&&N_cbps%48!=0)
   {
	printf("输入数据块长度有误,请重新输入!\n");
	goto L1;
   }
    printf("\ns=%d\n",s);
    m=new int[N_cbps];    //动态创建数组m[],用于存放第一次变换后的数据序号
    j=new int[N_cbps];     //动态创建数组m[],用于存放第二次变换后的数据序号
    for(k=0;k<N_cbps;k++)  //执行第一次变换
	{
	 m[k]=(N_cbps/d)*(k%d)+(k/d);
    }
    printf("\n");
    for(k=0;k<N_cbps;k++)    //执行第二次变换
    {
	 j[k]=s*(m[k]/s)+(m[k]+N_cbps-d*m[k]/N_cbps)%s;
     printf("%4d",j[k]);
     }
  getch();
  system("cls");     //清屏
  printf("\n\n请输入保存的文件名:");   //输入保存文本文件的名称 
  scanf("%s",name);
  switch(set)
   { 
    case 1:strcpy(name2,"WiMAX_BPSK_"); break;
    case 2:strcpy(name2,"WiMAX_QPSK_"); break;
    case 3:strcpy(name2,"WiMAX_16QAM_"); break;
    case 4:strcpy(name2,"WiMAX_64QAM_"); break;
   }
  strcat(name2,name);
  strcat(name2,".txt");
  WriteDat(N_cbps,j,set,name2);  //调用函数,保存数据到文本文件
  delete[] m;    //释放动态数组m[],j[]占据的内存空间
  delete[] j;
  getch();
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -