📄 test.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "time.h"
#include "gaussrand.h"
#include "tx_ldpc_enc.h"
#include "rx_ldpc_dec.h"
#include "tx_bit_interlve.h"
#include "rx_bitdeinterv.h"
void main()
{
char * tx_rsed_bit, * tx_ldpced_bit,* rx_ldpcdecoded_bit;
long int i,tx_rsed_bit_len,rx_bitdeinterved_bit_len,err_num=0;
double ldpc_rate,noise_var,sigma,snr;
double * rx_ldpc_llr;
double * rx_ch_llr; //比特交织用
char * tx_bitinterved_bit; //比特交织用
unsigned char channel_rate; //比特交织用 2,1
char * rx_bitdeinterved_bit; //比特交织用
clock_t start, finish; //计算时间用的
double duration; //计算时间用的
printf("input the ldpc_rate:");
scanf("%lf",&ldpc_rate);
printf("input the snr:");
scanf("%lf",&snr);
printf("input the channel_rate:"); //比特交织用
scanf("%d",&channel_rate); //比特交织用
noise_var = 1/(ldpc_rate*pow(10,snr/10));// %复信号不需要*2
sigma = sqrt(noise_var/2);
tx_rsed_bit_len = 6912;
rx_bitdeinterved_bit_len = long(tx_rsed_bit_len/ldpc_rate);
tx_rsed_bit = (char*) malloc(tx_rsed_bit_len*sizeof(char));
tx_ldpced_bit = (char*) calloc(rx_bitdeinterved_bit_len,sizeof(char));
rx_ldpcdecoded_bit = (char*) malloc(tx_rsed_bit_len*sizeof(char));
tx_bitinterved_bit = (char*) calloc(rx_bitdeinterved_bit_len,sizeof(char)); //比特交织用
rx_bitdeinterved_bit = (char*) calloc(rx_bitdeinterved_bit_len,sizeof(char)); //比特交织用
rx_ch_llr = (double*) malloc(rx_bitdeinterved_bit_len*sizeof(double)); //比特交织用
rx_ldpc_llr = (double*) malloc(rx_bitdeinterved_bit_len*sizeof(double));
srand( (unsigned)time( NULL ) );//随系统时间随机生成种子,以产生不同的随机数
for(i=0;i<tx_rsed_bit_len;i++)
// tx_rsed_bit[i]=(char)(rand()%2);
tx_rsed_bit[i]=(char)(i%2);
start = clock();
tx_ldpc_enc(tx_rsed_bit, tx_rsed_bit_len, ldpc_rate, tx_ldpced_bit); //LDPC编码
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "encode needs %f seconds\n", duration );
for(i=0;i<rx_bitdeinterved_bit_len;i++) //标准正态分布的随机噪声干扰
// rx_ldpc_llr[i]=2*tx_ldpced_bit[i]-1+sigma*gaussrand();
rx_ch_llr[i]=1-2*tx_ldpced_bit[i]+sigma*gaussrand(); //比特交织用
start = clock();
rx_ldpc_dec(rx_ch_llr, ldpc_rate, rx_ldpcdecoded_bit);//LDPC译码
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "30 frame decode needs %f seconds\n", duration );
for(i=0;i<tx_rsed_bit_len;i++)
if(tx_rsed_bit[i]!=rx_ldpcdecoded_bit[i])
err_num++;
printf("err_num = %d",err_num);
free(tx_rsed_bit);
free(tx_ldpced_bit);
free(rx_ldpcdecoded_bit);
free(tx_bitinterved_bit);
free(rx_bitdeinterved_bit);
free(rx_ch_llr);
free(rx_ldpc_llr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -