#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define num 1000
#define iter_num 1000
#define EbNo_start 0
#define EbNo_end 20
#define pi 3.141592
double awgn(double power);
void main()
{
int i=0,iter=0,db=0;
double qpsk_ber=0, a=1/sqrt(2);
FILE *fp1 = fopen("QPSK_BER.txt", "wt");
double *bit_stream = (double *)calloc(num, sizeof(double));
double *QPSK_symbol_re = (double *)calloc(num, sizeof(double));
double *QPSK_symbol_im = (double *)calloc(num, sizeof(double));
double *signal = (double*)calloc(num, sizeof(double));
for(db=EbNo_start; db<EbNo_end; db++)
{
double error=0;
double noise_power=pow(10,-1*(double)db/10)/2;
printf("EbNo : %d [dB]\t",db);
for(iter=0;iter<iter_num;iter++){
for(i=0;i<num;i++)
{
bit_stream[i]=rand()%2;
}
for(i=0;i<num/2;i++){
if(bit_stream[2*i]==0&&bit_stream[2*i+1]==0){
QPSK_symbol_re[i]=a+awgn(noise_power)/sqrt(2);
QPSK_symbol_im[i]=a+awgn(noise_power)/sqrt(2);
}
else if(bit_stream[2*i]==0&&bit_stream[2*i+1]==1){
QPSK_symbol_re[i]=-a+awgn(noise_power)/sqrt(2);
QPSK_symbol_im[i]=a+awgn(noise_power)/sqrt(2);
}
else if(bit_stream[2*i]==1&&bit_stream[2*i+1]==1){
QPSK_symbol_re[i]=-a+awgn(noise_power)/sqrt(2);
QPSK_symbol_im[i]=-a+awgn(noise_power)/sqrt(2);
}
else if(bit_stream[2*i]==1&&bit_stream[2*i+1]==0){
QPSK_symbol_re[i]=a+awgn(noise_power)/sqrt(2);
QPSK_symbol_im[i]=-a+awgn(noise_power)/sqrt(2);
}
}
for(i=0;i<num/2;i++){
if(QPSK_symbol_re[i]>0 && QPSK_symbol_im[i]>0){
signal[2*i]=0;
signal[2*i+1]=0;
}
else if(QPSK_symbol_re[i]<=0 && QPSK_symbol_im[i]>0){
signal[2*i]=0;
signal[2*i+1]=1;
}
else if(QPSK_symbol_re[i]<=0 && QPSK_symbol_im[i]<=0){
signal[2*i]=1;
signal[2*i+1]=1;
}
else if(QPSK_symbol_re[i]>0 && QPSK_symbol_im[i]<=0){
signal[2*i]=1;
signal[2*i+1]=0;
}
}
for(i=0;i<num;i++){
if(!(bit_stream[i]-signal[i]==0)) error++;
}
if( iter % (iter_num/10) ==0 )
printf(">");
}
qpsk_ber = (double)error/(num*iter_num);
printf("\t%lf\n",qpsk_ber);
fprintf(fp1,"%lf\n",qpsk_ber);
}
fclose(fp1);
}
double awgn(double power)
{
double x=0,tmp1,tmp2;
tmp1=(double)rand()/(double)RAND_MAX;
while(tmp1==0) tmp1=(double)rand()/(double)RAND_MAX;
tmp2=(double)rand()/(double)RAND_MAX;
x=sqrt((-2*log(tmp1))) *cos(2*pi*tmp2) * sqrt(power);
return x;
}
qpsk.zip_QPSK_qpsk c code
版权申诉
37 浏览量
2022-09-23
12:15:41
上传
评论
收藏 843B ZIP 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- Delphi优质学习资源和工具.txt
- Rust优质资源和工具.txt
- Kotlin优质资源和工具.txt
- OpenCASCADE入门(2)-openCasCade7.6.0版本的exe方式安装,vs2017环境配置,编译和使用draw
- ACM(Association for Computing Machinery,计算机协会)相关的资源.txt
- 个能够从 YouTube 上抓取信息的 Python 网络爬虫,你可以使用 Python 的 Requests 库来进行网络请求
- 学生管理系统示例代码.rar
- music search and download. - 全网音乐搜索和下载
- Maven项目管理分析实列教程.txt
- VBA代码实现excel自动导出到PPT
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈