📄 mpsk_module.h
字号:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
//#include "rand.h"
#define PI 3.1415926
//to create Message bits , which has a length of N
Random_Bits(Message,N);
//to modulate
MPSK_Modulate(Message,Modulated_Symbol,length);
//to add AWGN_Noise
TRAN_AWGN(Modulated_Symbol,Rec_Value,length);
//to demodulate
MPSK_Demodulate(Rec_Value,DeM_Code,length);
void Random_Bits(char *,int); //to create Message Bits, which has a length of N
void MPSK_Modulate(char *,struct plural *,int,int);
void TRAN_AWGN(struct plural *,struct plural *,int);
void MPSK_Demodulate(struct plural *,char *,int);
int Bin_to_Deci(char *,int); //to change binary system to the decimal system
void Display_char(char *,int);
void Display_plural(struct plural *,int);
void Display_char(char *temp, int length,int n)
{
FILE *fp;
int i,j;
fp=fopen("check.txt","a");
for(i=0;i<length;i++)
{
if(i%n==0)
{
printf("\t");
fprintf(fp,"\t");
}
printf("%c",temp[i]);
fprintf(fp,"%c",temp[i]);
}
fclose(fp);
}
void Display_plural(struct plural *temp, int length)
{
FILE *fp;
int i;
fp=fopen("check.txt","a");
for(i=0;i<length;i++)
{
printf("%lf + %lf i\n",temp[i].real,temp[i].imag);
fprintf(fp,"%lf + %lf i\n",temp[i].real,temp[i].imag);
}
fclose(fp);
}
//产生长度为N的随机信息比特
void Random_Bits(char *Message,int N)
{
int i;
srand((unsigned int)time(NULL));
for(i=0;i<N;i++)
{
Message[i]=rand()%2;
}
}
//二进制转换函数, 将连续n个比特转换成十进制结果并返回
int Bin_to_Deci(char *temp,int n)
{
int i;
int sum=0;
for(i=0;i<n;i++)
{
if(temp[i])
{
sum += pow(2,i);
}
}
return sum;
}
//将连续n个比特进行MPSK调制,调制结果保存在Modulated_Symbol中
void MPSK_Modulate(
char *Message, //待调制的码
struct plural *Modulated_Symbol, //调制后的码
int length, //调制后码元的长度
int n //M进制可以用n个比特来表示
)
{
int i,j;
char *temp; //用来临时记录n个连续比特,以方便将它们对应转化成十进制
int value; //记录n个比特所对应的十进制数字
temp=(char *)malloc(n*sizeof(char));
if(n==4)
{
for(i=0;i<length;i++)
{
for(j=0;j<n;j++)
{
temp[j]=Message[n*i+j];
}
value=Bin_to_Deci(temp,n);
switch(value)
{
case 0:evaluate(&Modulated_Symbol[i],0);
break;
case 1:evaluate(&Modulated_Symbol[i],1);
break;
case 2:evaluate(&Modulated_Symbol[i],3);
break;
case 3:evaluate(&Modulated_Symbol[i],2);
break;
case 4:evaluate(&Modulated_Symbol[i],7);
break;
case 5:evaluate(&Modulated_Symbol[i],6);
break;
case 6:evaluate(&Modulated_Symbol[i],4);
break;
case 7:evaluate(&Modulated_Symbol[i],5);
break;
case 8:evaluate(&Modulated_Symbol[i],15);
break;
case 9:evaluate(&Modulated_Symbol[i],14);
break;
case 10:evaluate(&Modulated_Symbol[i],12);
break;
case 11:evaluate(&Modulated_Symbol[i],13);
break;
case 12:evaluate(&Modulated_Symbol[i],8);
break;
case 13:evaluate(&Modulated_Symbol[i],9);
break;
case 14:evaluate(&Modulated_Symbol[i],11);
break;
case 15:evaluate(&Modulated_Symbol[i],10);
break;
}
}
}
}
void evaluate(struct plural *temp,int value)
{
temp.real=cos((double)value/(double)16*2*PI);
temp.imag=sin((double)value/(double)16*2*PI);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -