📄 qpsk_noise.c
字号:
////////////////////////////////////////////
#include "stdio.h" //
#include "math.h" //
#include "malloc.h" //
#include "stdlib.h" //
#include "time.h" //
//
#include "parameter.h" //
////////////////////////////////////////////
float gngausscos(float);
void qpsk_noise(float *a,float b)
{
short i;
float sgma,snr;
snr=pow(10,b/10);
sgma=sqrt(3/(snr*2));
// printf("%f,",snr);
i=0;
for(i=0;i<fra_long*3;i++)
{
// if (i==1536)
// printf("CC");
a[i]=a[i]+gngausscos(sgma);
printf("%f,",gngausscos(sgma));
}
}
/*
float sgma,snr;
float s00[2]={1,0},s01[2]={0,1},s11[2]={-1,0},s10[2]={0,-1},add[2],r[2],c[4];
for(i=0;i<fra_long*2;i=i+2)
{
snr=pow(10,b/10);
sgma=(sqrt(2/snr))/2;
add[0]=gngausscos(sgma);
add[1]=gngausscos(sgma);
if((a[i]==0)&&(a[i+1]==0))
for(j=0;j<2;j++)
r[j]=add[j]+s00[j];
else if((a[i]==0)&&(a[i+1]==1))
for(j=0;j<2;j++)
r[j]=add[j]+s01[j];
else if((a[i]==1)&&(a[i+1]==0))
for(j=0;j<2;j++)
r[j]=add[j]+s10[j];
else
for(j=0;j<2;j++)
r[j]=s11[j]+add[j];
c[0]=r[0]*s00[0]+r[1]*s00[1];
c[1]=r[0]*s01[0]+r[1]*s01[1];
c[2]=r[0]*s10[0]+r[1]*s10[1];
c[3]=r[0]*s11[0]+r[1]*s11[1];
//-----------------------------------------------check
if((c[0]>c[1])&&(c[0]>c[2])&&(c[0]>c[3]))
{
a[i]=0;
a[i+1]=0;}
else if((c[1]>c[0])&&(c[1]>c[2])&&(c[1]>c[3]))
{
a[i]=0;
a[i+1]=1;}
else if((c[2]>c[0])&&(c[2]>c[1])&&(c[2]>c[3]))
{
a[i]=1;
a[i+1]=0;}
else
{
a[i]=1;
a[i+1]=1;}
}*/
////////////////////////////////////////////////////////////////////////
float gngausscos(float sgma)
{ float u=0.0,m,z=0,h=0;
m=rand();
u=m/32768;
z=2*log(1/(1-u));
z=sqrt(z);
z=sgma*z;
m=rand();
u=m/32768;
h=cos(2*pi*u);
h=z*h;
return h;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -