C++实现BPSK信号的调制解调过程课题设计报告.doc
《C++实现BPSK信号的调制解调过程课题设计报告.doc》由会员分享,可在线阅读,更多相关《C++实现BPSK信号的调制解调过程课题设计报告.doc(34页珍藏版)》请在沃文网上搜索。
1、一、总体设计采用C+实现BPSK信号的调制解调过程,给出在高斯信道下的误码率仿真曲线,并将调制信号波形与频谱、已调信号波形与频谱、解调后信号波形用图形界面显示出来。基本原理:BPSK信号调制原理二进制相移键控 BPSK(Binary Phase Shift Keying)方式一般是键控的载波相位按基带脉冲序列的规律而改变的数字调制方式,也就是说,二进制的数字基带信号 0 与 1 分别用相干调制的载波的 0 与相位的波形来表示。其表达式由公式(1-1)给出: (1-1)其中为双极性的二进制数字序列,的取值为 1,为二进制的符号间隔,基带的发送成形滤波器的冲激响应,通常具有升余弦特性;是调制载波的
2、频率,是调制载波的初始相位。用 BPSK 调制方式时,因为发送端以某一个相位作为基准,所以在接收端也一定有这样一个固定的基准相位作为参考。假如参考相位发生变化了,那么接收端恢复的信息也会出错,也就是存在“倒”现象。因此需要在接收端使用载波同步,才能够正确恢复出基带的信号。BPSK信号的调制原理框图如图2-1所示,典型波形如图2-2所示。2-1 BPSK调制原理图2-2 发送码元为1 0 0 1 1的BPSK波形BPSK信号的频谱如图2-3所示,可以计算频谱效率,所谓频谱效率是指信号传输速率与所占带宽之比。在BPSK中,信号码元为,故信号传输速率为,以频谱的主瓣宽度为传输带宽,忽略旁瓣的影响,则
3、射频带宽为2/,频谱效率为:(每赫兹) 即每赫兹带宽传输0.5b/s。注意,这里是以射频带宽计算的,若以基带带宽来计算,那就是每赫兹1 b/s。图2-3 BPSK的频谱BPSK的调制器非常简单,只要把数字信号与载波相乘即可。不过这里数字信号的“0”要用“-1”来表示(在数字通信中,符号“1”用“+1”来表示,“0”则用“-1”来表示)。由图2-3可见,BPSK波形与信息代码之间的关系是“异变同不变”,即:若本码元与前一码元相异,则本码元内BPSK信号的初相相对于前一码元内BPSK信号末相变化180;否则不变。BPSK 信号解调原理因为BPSK信号的幅度与基带信号无关,故不能用包络检波法而只能用
4、相干解调法解调BPSK信号,在相干解调过程中需要用到与接收的BPSK信号同频同相的相干载波,相干接收机模型如图2-4所示: 图2-4 BPSK相干接收机模型具体的BPSK信号解调原理框图如图2-5所示。图2-5 BPSK解调原理框图如图2-5给出了一种BPSK信号相干解调原理框图,图中经过带通滤波的信号在相乘器与本地载波相乘,在相干解调中,如何得到与接收的BPSK信号同频同相的相干载波是关键,然后用低通滤波器去除高频分量,再进行积分采样判决,判决器是按极性进行判决,得到最终的二进制信息。假设相干载波的基准相位于BPSK信号的调制载波的基准相位一致。但是,由于在BPSK信号的载波恢复过程中存在的
5、相位迷糊(phase ambiguity),即恢复的本地载波与所需的相干载波可能同相,也可能反相,这种相位关系的不确定性将会造成解调出数字基带信号与发送的数字基带信号正好相反,即1变为0,0变为1,判决器输出数字信号全部出错。这种现象称为BPSK方式的倒现象。载波同步器从BPSK信号中提取的相干载波可能与接收信号的载波同相,也可能反相,称此为相干载波的相位模糊现象。如果收到的信号与载波信号同相,则相乘为正值,积分采样后必为一大于0的值,即可判决为“1”。如果收到的信号与参考信号相反,则相乘之后必为负值,积分采样后判决为“0”,因此解调完成。具体波形如图2-6所示。图2-6 BPSK解调信号示意
6、图基本架构设计BPSK 调制解调系统的模型如图3-1所示, 调制部分包括信息源、星座映射、发送滤波器和调制器, 接收部分包括解调器、接收滤波器和抽样判决器,信道干扰为加性高斯噪声。 图3-1 BPSK信号调制解调系统框图整个发送与接收过程仿真了实际中的通信过程,单极性二进制信源经过星座映射变换为一串双极性二进制字符,再经过发送滤波器进行脉冲成形,生成原始的数字基带信号,为了发送信息,通过BPSK调制器变成数字带通信号发射,发射信号进入模拟的加性高斯白噪声信道,被接收机所接收,BPSK信号解调采用的是相干解调,用同步恢复出的载波对接收机收到的信号进行相乘,相干解调恢复出信号经过低通滤波器滤除高频
7、分量,然后依次经过接收滤波器和抽样判决器,恢复最原始的二进制序列,自此完成对数字信号的BPSK调制解调全过程。 模块划分Bpsk调制模块Bpsk解调模块输入输出模块模块功能设计Bpsk调制模块包括:基带数据产生模块单双极性变换模块FFT模块功率信号幅值单位转换模块加载波模块Bpsk解调模块包括:产生高斯白噪声模块去载波模块低通滤波器模块判决模块FFT模块误码率计算模块输入输出模块包括:数据输入模块数据读取模块数据输出模块绘图模块OnPaint()图形界面模块二、 详细设计(一) 资源项目 程序文件 头文件 (二)Bpsk调制模块基带数据产生模块int* CTools:BaseDataPut(l
8、ong length)int* nBaseDataBit;nBaseDataBit = (int*)malloc(length*sizeof(int);srand(unsigned)time(NULL);for (long i = 0; ilength; i+)*(nBaseDataBit + i) = rand() % 2;return nBaseDataBit;单双极性变换模块int *pnget = NULL;/单双变换后数据pnget = (int*)malloc(m_nNumOfBase*sizeof(int);for (i = 0; i m_nNumOfBase; i+)pnget
9、i = 1-m_pBaseDatai*2;/单双极性变换FFT模块float *CTools:fft(float *y, long n, long *len) /傅立叶变换; /len:返回补0以后数据长度的一半; /函数输出:fft变换后的数据,长度为len; /若失败,则返回一个空指针(NULL) longi, j, k, m, i1, i2, i3, i4, n1, n2, n4; floata, e, cc, ss, xt, t1, t2; float*x; longtemp_n; / /自动补零 temp_n=1; while(temp_nn) temp_n*=2; x=(float
10、 *)malloc(temp_n*sizeof(float); if(!x)return NULL; for (i=0;in) for (i=n;itemp_n;i+)*(x+i)=0; / /开始做fft运算 for (j=1, i=1;i32;i+) m=i; j=2*j; if(j=temp_n) break; n1=temp_n-1; for (j=0, i=0;in1;i+) if(ij) xt=xj; xj=xi; xi=xt; k=temp_n/2; while(k(j+1) j=j-k; k=k/2; j=j+k; for (i=0;itemp_n;i+=2) xt=xi; x
11、i=xt+xi+1; xi+1=xt-xi+1; n2=1; for (k=2;k=m;k+) n4=n2; n2=2*n4; n1=2*n2; e=float(6.283185307179596/n1); for (i=0;itemp_n;i+=n1) xt=xi; xi=xt+xi+n2; xi+n2=xt-xi+n2; xi+n2+n4=-xi+n2+n4; a=e; for (j=1;j=(n4-1);j+) i1=i+j; i2=i-j+n2; i3=i+j+n2; i4=i-j+n1; cc=float(cos(a); ss=float(sin(a); a=a+e; t1=cc*x
12、i3+ss*xi4; t2=ss*xi3-cc*xi4; xi4=xi2-t2; xi3=-xi2-t2; xi2=xi1-t1; xi1=xi1+t1; *x=float(fabs(*x); *(x+temp_n/2)=float(fabs(*(x+temp_n/2); for (i=1;itemp_n/2;i+) *(x+i)=float(sqrt(*(x+i)*(*(x+i)+ (*(x+temp_n-i)*(*(x+temp_n-i); x=(float *) realloc(x, (temp_n/2)*sizeof(float); *len=temp_n/2; if(!x) free
13、(x); return NULL; else return x; 功率信号幅值单位转换模块doubleCTools:TransformUnit(double dRecPower)doubledPower;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_n
14、NumOfScan);*(pfModData+i) =*(pnget+j)*dPa*cos(2*PI*m_dSimRf*i/m_dSampleFreq);/A*cos(wc*t)=A*cos(2*Pi*f*t)(二) Bpsk解调模块产生高斯白噪声模块void CTools:GaussionNoise(float *noise, double pSig, double fSNR, long num_of_scan)/noise:产生的噪声数据;/stddeviation:噪声的标准差;/fSNR:信噪比;/pSig:信号功率;double pNoise, stddeviation;int i,
15、 j, numofvar;double gauvar, uDx, uEx, ranvar100, sum, tempE, tempD;double mean;/初始化变量;mean=0;uEx=1.0/2.0;uDx=1.0/12.0;numofvar=20;tempE=numofvar*uEx;tempD=sqrt(numofvar*uDx);pNoise=pSig/pow(10, fSNR/10);stddeviation=sqrt(pNoise);/计算噪声标准差for (j=0;jnum_of_scan;j+)sum=0;for (i=0;inumofvar;i+)/产生均匀分布的数据
16、;ranvari=rand()/(1.0*RAND_MAX);sum=sum+ranvari;/生成高斯分布的数据;gauvar=(sum-tempE)/tempD;*(noise+j)=float(gauvar*stddeviation+mean); 去载波模块float* pfDemodData = NULL;/解调数据pfDemodData=(float*)malloc(m_nNumOfScan*sizeof(float);for(i=0; im_nNumOfScan; i+)*(pfDemodData+i)=*(pfAdd_Put+i)*cos(2*PI*m_dSimRf*i/m_dS
17、ampleFreq);低通滤波器模块void CTools:lowPassFilter(float *inData, double fln, long length)longlengthh, n, i;float*h, *outData;/解决卷积分块丢失部分数据问题longlength_reivse=(int)ceil(float)length/20000)*20000;float*inData_revise=(float*)malloc(length_reivse*sizeof(float);for (i=0;ilength;i+)*(inData_revise+i)=*(inData+i
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实现 BPSK 信号 调制 解调 过程 课题 设计 报告
