内容发布更新时间 : 2024/12/23 4:14:40星期一 下面是文章的全部内容请认真阅读。
模块划分
Bpsk调制模块 Bpsk解调模块 输入输出模块
模块功能设计
Bpsk调制模块包括: 基带数据产生模块 单双极性变换模块 FFT模块
功率信号幅值单位转换模块 加载波模块
Bpsk解调模块包括: 产生高斯白噪声模块 去载波模块 低通滤波器模块 判决模块 FFT模块
误码率计算模块
输入输出模块包括: 数据输入模块 数据读取模块 数据输出模块
绘图模块OnPaint() 图形界面模块
二、 详细设计
(一) 资源项目
程序文件
头文件
(二)Bpsk调制模块
★基带数据产生模块
int* CTools::BaseDataPut(long length) { int* nBaseDataBit; nBaseDataBit = (int*)malloc(length*sizeof(int)); srand((unsigned)time(NULL)); for (long i = 0; i ★单双极性变换模块 int *pnget = NULL;//单双变换后数据 pnget = (int*)malloc(m_nNumOfBase*sizeof(int)); for (i = 0; i < m_nNumOfBase; i++) { pnget[i] = 1-m_pBaseData[i]*2; }//单双极性变换 ★FFT模块 float *CTools::fft(float *y, long n, long *len) { //傅立叶变换; //len:返回补0以后数据长度的一半; //函数输出:fft变换后的数据,长度为len; //若失败,则返回一个空指针(NULL) long i, j, k, m, i1, i2, i3, i4, n1, n2, n4; float a, e, cc, ss, xt, t1, t2; float *x; long temp_n; ////////////////////////////////// //自动补零 temp_n=1; while(temp_n x=(float *)malloc(temp_n*sizeof(float)); if (!x) return NULL; for (i=0;i if(temp_n>n) { for (i=n;i //////////////////////////// //开始做fft运算 for (j=1, i=1;i<32;i++) { m=i; j=2*j; if(j==temp_n) break; } n1=temp_n-1; for (j=0, i=0;i } k=temp_n/2; while(k<(j+1)) { j=j-k; k=k/2; } j=j+k; } for (i=0;i for (k=2;k<=m;k++) { n4=n2; n2=2*n4; n1=2*n2; e=float(6.283185307179596/n1); for (i=0;i } } } *x=float(fabs(*x)); *(x+temp_n/2)=float(fabs(*(x+temp_n/2))); for (i=1;i x=(float *) realloc(x, (temp_n/2)*sizeof(float)); *len=temp_n/2; if(!x) { free(x); return NULL; } else { return x; } ★功率信号幅值单位转换模块 double CTools::TransformUnit(double dRecPower) { double dPower; dPower = pow(10, (dRecPower - 30) / 10); return dPower; } ★加载波模块 float* pfModData = NULL;//调制数据 pfModData=(float*)malloc(m_nNumOfScan*sizeof(float)); for (i = 0; i < m_nNumOfScan; i++) { j = long(i*m_nNumOfBase/m_nNumOfScan); *(pfModData+i) =*(pnget+j)*dPa*cos(2*PI*m_dSimRf*i/m_dSampleFreq); //A*cos(wc*t)=A*cos(2*Pi*f*t) } (二) Bpsk解调模块 ★产生高斯白噪声模块