⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 模拟cmmb系统中ldpc译码的部分
💻 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 + -