📄 test16qam.c
字号:
/*
******************************************************************
ANSI C source code
filename:
Test16QAM.c
abstract:
to test the algorithms
author:
Shen Ke
version:
V 1.0
******************************************************************
*/
#include <stdio.h>
#include "QAMSoftDem.h"
#include "time.h"
#include "math.h"
#include "stdlib.h"
void main ()
{
struct AWGN channel;
struct AWGN *ch;
int signum;
int bitlen ;
int siglen ;
int outlen;
double sig_real[2500],out_real[2500];
double sig_img[2500],out_img[2500];
double pb;
int outbit[10000];
int i,j;
int inbit[10000];
int err[5000];
FILE *fp,*fpout;
channel.ix=30323;
channel.iy=173;
channel.iz=13;
channel.snr=10; //singal SNR
channel.rate = 4;
channel.I_sigma=2*(channel.rate)*(pow(10.0,(channel.snr/10)));
channel.sigma=sqrt(1/channel.I_sigma);
ch=&channel;
j=0;
srand((unsigned)time(NULL));
s1=rand();
s2=rand();
fp = fopen("input.txt","w");
fpout = fopen("output.txt","w");
bitlen = 10000;
siglen = bitlen/4;
printf("The sigma is:%f\n",channel.sigma);
for(i=0;i<bitlen;i++)
{
inbit[i]=generate_binary_source();
if(i%4==0) {
fprintf(fp,"\n");
}
fprintf(fp,"%d",inbit[i]);
}
signum=GrayMap16QAM(inbit,bitlen,sig_real,sig_img);
awgn_channel(sig_real,sig_img,out_real,out_img,ch,siglen);
outlen=QAMDem(out_real,out_img,siglen,outbit);
printf("The result(%d bits) is :",outlen);
for(i=0;i<outlen;i++)
{
if (i%4==0) {
fprintf(fpout,"\n");
}
fprintf(fpout,"%d",outbit[i]);
}
if (bitlen!=outlen) {
printf("Wrong demodule!!");
}
else
{
for(i=0;i<bitlen;i++)
{
if (inbit[i]!=outbit[i]) {
err[j++]=outbit[i];
}
}
}
pb = (double) j/10000.0;
printf("When the snr is %f,the Pb is %f.\n",ch->snr,pb);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -