页数:297页文件大小:4.56 MB来源: MATLAB实验教程ppt课件
本课件面向通信原理课程,以21个实例演示随机过程仿真、低通抽样定理、脉冲编码调制、增量调制、哈夫曼编码与数字基带信号,并延伸到模拟调幅解调、2ASK/2FSK/2PSK/OFDM数字调制,以及线性分组码与扩频系统。
MATLAB中的Communication Toolbox提供了很多进行通信系统仿真的实用函数。在通信原理课程中有很多实际的问题都可通过MATLAB仿真给出形象、生动、直观的演示。本章通过通信原理课程中所涉及的基本概念及知识点,以信号传输过程为顺序,讲述了MATLAB在随机过程仿真、信号的模数转换(抽样、量化、编码),数据压缩,信号的基带传输,信号的频带传输,信号的最佳接收,差错控制编码,扩频通信等方面的应用和仿真过程及方法。
知识架构
1.实验目的
1)相关函数的性质设为平稳随机过程,则它的自相关函数具有如下主要性质。综上,相关函数表述了随机过程的几乎所有数字特征,因而以上性质有明显的实用意义。
2)随机过程的频谱特性对任意的确定功率信号f(t),它的功率谱密度可表示为
3.仿真思路在(−1/2,1/2)内产生一个均匀分布的随机数N=1000的离散时间序列,计算该序列的自相关,定义为同时,用计算Rx(m)的离散傅里叶变换(DFT)即可求出序列{xn}的功率
4.程序代码1)主程序echo onN=1000;t=1:1:51;M=50;s=-0.5:0.02:0.5;Rx_av=zeros(1,M+1);Sx_av=zeros(1,M+1);for j=1:10,%取10次实现的整体平均X=rand(1,N)-1/2;%在-1/2和1/2之间均分布的随机变量Rx=Rx_est(X,M);%本次实现的自相关系数Sx=fftshift(abs(fft(Rx)));%本次实现的功率谱,fftshift函数将0频谱移到序列中间Rx_av=Rx_av+Rx;%自相关系数之和Sx_av=Sx_av+Sx;%功率谱之和end;Rx_av=Rx_av/10; %自相关系数的整体平均Sx_av=Sx_av/10; %功率谱的整体平均%随后是绘图命令subplot(2,1,1);plot(t,Rx_av)axis([0,50,-0.01,0.09]);subplot(2,1,2);plot(s,Sx_av)axis([-0.5,0.5,0,0.14]);2)求自相关的函数function [Rx]=Rx_est(X,M)%该函数用于求随机序列的相关性,变量放在X中,只计算Rx(0)到Rx(M),注意,程序中的%Rx(m)实际放的是自相关函数Rx(m-1),因为Matlab的下标是从1开始,而自相关函数%序列的下标从0开始。N=length(X);Rx=zeros(1,M+1);for m=1:M+1,For n=1:N-m+1,Rx(m)=Rx(m)+X(n)*X(n+m-1);end;Rx(m)=Rx(m)/(N-m+1);end;5.运行结果与分析图3.1为随机过程的自相关函数。由该图可看出,该序列在0附近有一定相关性,随着m取值的增大,自相关函数近似为0。这正反映了题目中“独立同分布”序列性质。图3.1随机过程的自相关函数
图3.2为随机序列的功率谱密度曲线。该曲线是一条波动较小的曲线,考虑到只取了50点FFT,近似认为该序列的功率谱为恒定值,所以该序列构成的随机过程可以认为是平稳的。结合前面自相关函数的曲线,该结论符合理论知识中关于平稳随机过程的论述。图3.2随机过程的功率谱密度
6.思考题
1.实验目的
证抽样不引起信号失真。抽样定理告诉人们:一个频带限制在fm赫兹以内的时间连续函数x(t),如果以Ts≤1/(2fm)的间隔进行等间隔时间抽样,则所得的样值可以完全地确定原信号x(t)。这就是低通型抽样定理的内容。根据所处理的信号不同,抽样定理分为低通型抽样定理和带通型抽样定理。低通型抽样定理是带通型抽样定理的基础。本例重点阐述低通型抽样定理。抽样的过程是将输入的模拟信号与抽样信号相乘而得到样值信号的过程。通常抽样信号是一个周期为Ts的周期脉冲信号,抽样后得到的信号为抽样序列。理想抽样信号定义如下。
其中,fs=1/Ts,称为抽样速率。因此抽样后信号为低通信号的抽样定理可以从频域来理解,抽样后信号的频谱是原信号的频谱平移nfs后叠加而成的,因此如果频谱不发生重叠,通过低通滤波器可以滤除原信号。如果抽样速率低于2fm,则抽样后信号频谱发生混叠,不能无失真地恢复原始信号。
3.仿真思路信号x(t)为其波形如图3.3所示。图3.3信号x(t)的波形
要注意的是,该波形图只是为了表示信号的时间和幅度关系,所以未标明单位。首先用解析法编制MATLAB程序求出信号x(t)的幅度谱,然后用数值法编制MATLAB程序,根据抽样定理求出该信号的幅度谱,并比较两者的差别。经过分析,信号x(t)可以变换为如下形式。根据傅里叶基本变换对及变换性质,可得其傅里叶变化为
下面就根据式(3-11)编写解析法的程序。至于数值法的程序,先要根据抽样定理确定一些参数。根据图3.3中波形比较平滑的特点,可以大致估计该信号的带宽正比于信号持续时间的倒数,信号持续时间为4,所以其带宽为0.25,为了安全起见,将带宽值扩大10倍,即取为2.5。由采样定理,奈奎斯特频率为5,即采样间隔为0.2。有了这些基本参数后就可以进行程序的编制了。首先在一个更宽的范围[−4,4]内按上面的分析进行采样,之后用FFT做傅里叶变换。其中计算傅里叶变换时需要确定一个频率分辨率,这里根据0.25这个值,取为0.01。
4.程序代码2)主程序%参数设置ts=0.2;fs=1/ts;df=0.01;f1=[-2.5:0.001:2.5];%根据采样定理进行抽样x=[zeros(1,10),[0:0.2:1],ones(1,9),[1:-0.2:0],zeros(1,10)];%对采样信号进行FFT[X,x,df1]=fftseq(x,ts,df);X1=X/fs;f=[0:df1:df1*(length(x)-1)]-fs/2;%解析法计算信号幅度谱y=4*(sinc(2*f1)).^2-(sinc(f1)).^2;%绘图指令subplot(2,1,1)plot(f1,abs(y));xlabel('f')title('解析法求得的x(t)幅度谱')subplot(2,1,2)plot(f,fftshift(abs(X1)));xlabel('f')title('根据采样定理(数值法)求得的x(t)幅度谱')2) FFT算法程序function [M,m,df]=fftseq(m,ts,df)fs=1/ts;%确定输入变量的情况if nargin == 2n1=0;elsen1=fs/df;endn2=length(m);%确定FFT的计算次数n=2^(max(nextpow2(n1),nextpow2(n2)));%序列的FFTM=fft(m,n);m=[m,zeros(1,n-n2)];5.运行结果与分析图3.4为仿真结果。从仿真结果可以看出,根据抽样定理求出的幅度谱与解析法求出的精确解本一致,其主瓣和主要旁瓣与精确解非常吻合,只是一些幅度很小的拖尾与精确解有细微差别,但这些很小的误差可以忽略不计。这个仿真证明了抽样定理的正确性。6.思考题
图3.4信号幅度谱仿真图
1.实验目的
2)量化每个信号样值量化成2L个幅度电平之一,L是样值量化后的二进制位数。对于均匀量化器,输出电平标定为对应的输入信号幅度范围是(k−1)Δ≤x≤kΔ,这里的Δ是步长,它的值是量化范围与量化级数的商。图3.5 PCM系统原理框图
话音信号通常是小信号出现的概率大,大信号出现的概率小。在均匀量化器的整个信号动态范围内,各电平具有相等的间隔大小,而量化误差与量化间隔是成正比的,这样就造成了对于小信号和大信号具有相同的量化误差,因此,小信号的量化信噪比小,大信号的量化信噪比大,达不到CCITT规定的在信号的动态范围为40dB时,信号的量化信噪比要大于26dB的要求。为提高小信号时的量化信噪比,压缩比特速率,采用非均匀量化是十分必要的。非均匀量化一般采用压扩的方法来实现。
所谓压扩,即压缩与扩张,压缩是将经量化的样值信号先进行非线性变换,使原来的输入信号的动态范围变小,压缩器对小信号增益大,而对大信号则增益小,再将压缩器输出的信号进行均匀量化,从而使小信号的量化信噪比得到改善,收端在译码后用扩张器恢复原抽样信号。常用的压缩特性曲线有A律对数压缩和μ律对数压缩两种。设压缩前的信号为x,压缩后的信号为y。则A律压缩特性曲线公式为:
A律特性中的A为压缩参数,A的大小直接与压缩效果有关。设在直角坐标中x轴与y轴分别表示输入信号和输出信号的取值域,并假定输入信号和输出信号的最大取值是±V,现把x轴的区间(0,V)不均匀地分成8段,分段的规律是每次都以1/2取段,如图3.6所示。然后,每段再均匀地分为16等分,每一等分就为一个量化级。在0~V范围内共有128个量化级,但各段上的量化级是不均匀的。这样,对输入信号就形成了一个不均匀量化方案。这个方案对弱信号时的量化级分得细,对强信号分得粗。
图3.6A律13折线图y轴也要进行分段,将y轴的区间(0,V)均匀地分为8段,每段再均匀地分成16等分,所以y轴是均匀地分成128级,每个量化段为V/128。
第1、2段的斜率相同,因此可连成一条直线,所以实际上是7条直线,上述分析是正方向的,在负方向上也有与正方向对称的一组折线。考虑负向第1、2段与正向1、2段具有相同的斜率,因此可把它们并成一条折线。于是得到13段折线,如图3.6所示。由图可见,第1、2段斜率最大,越往后斜率越小,因而13折线连成的曲线是逼近对数曲线的,具有压扩作用。经过压缩再均匀量化的信号,小信号量化间隔小,大信号量化间隔大,从而小信号的量化噪声小,大信号的量化噪声大,统一起来能达到CCITT规定的信号动态范围40dB时,量化信噪比大于26dB的要求。
3)编码编码器根据PCM编码规则将量化值数字化。编码方法多种多样的,现有编码方法中,按编码的速度大致可分为低速编码和高速编码两大类。通信中一般都采用第二类。编码器的种类可以归结为3种:逐次比较型、折叠级联型和混合型。经过信道传输的二进制码按照与上面3步相反的逆过程进行解码、扩张和滤波得到输出信号。3.仿真思路1)连续信号的均匀量化产生一个幅度为1、频率ω=1的正弦波。采用均匀PCM方案,将其进行8级和16级量化。在同一
坐标系内绘出原始信号和量化信号的曲线。将两种情况得到的SQNR进行比较。2)离散信号的均匀量化特性及均匀PCM按照PCM系统原理框图的流程,首先确定输入信号,输入信号分连续和离散两种情况;接着,根据均匀量化的公式写出均匀量化函数,对连续信号和离散序列分别进行均匀量化;得到量化值的同时采用比较排序的方法做均匀PCM编码。产生一个零均值、方差为1的高斯随机变量序列,序列长度为500。用均匀量化找出当量化级的数量为64时的SQNR。求出该序列的前5个值、相应的量化值和相应的码字。
3) A律压缩特性曲线用13折线近似A律压缩特性曲线方法如下,归一化输入x∈[−1,1],归一化输出y∈[−1,1],压缩特性关于原点成奇对称,以下仅考虑第一象限情况。平均等分成8区间,x的区间为[0,1/128]、[1/128,1/64]、[1/64,1/32]、[1/32,1/16]、[1/16,1/8]、[1/8,1/4]、[1/4,1/2]、[1/2,1]。对应的y区间为[0,1/8]、[1/8,2/8]、[2/8,3/8]、[3/8,4/8]、[4/8,5/8]、[5/8,6/8]、[6/8,7/8]、[7/8,1]。各区间端点相连,构成A律13折线近似压缩特性曲线。4)离散信号的非均匀量化特性及非均匀PCM对于非均匀PCM,总体的步骤与均匀量化及均匀PCM相同。但有一点不同,那就是在量化前要先进行A律压缩。
产生一个零均值、方差为1的高斯随机变量序列,序列长度为500。对其进行64电平的A律非线性量化,画出量化误差和输入输出关系曲线,并求SQNR。4.程序代码1)连续信号的均匀量化的主程序t=[0:0.01:10];a=sin(t);[sqnr8,aquan8,code8]=u_pcm(a,8);[sqnr16,aquan16,code16]=u_pcm(a,16);sqnr8%N=8时的信号量化噪声比sqnr16%N=16时的信号量化噪声比%信号波形及其量化后的曲线plot(t,a,'-',t,aquan8,'-.',t,aquan16,'-',t,zeros(1,length(t)));legend('信号波形','8电平量化','16电平量化','Location','SouthEast')2)离散信号的均匀量化的主程序a=randn(1,500);n=64;b=-2.5:.01:2.5;[sqnr,a_quan,code]=u_pcm(a,64);[sqnr,a_quan1,code1]=u_pcm(b,64);sqnr %信号的量化信噪比a(1:5) %输入值a_quan(1:5) %量化值code(1:5,:) %码字subplot(2,1,1);plot(b,a_quan1); %量化器输入-输出波形图title('量化器输入-输出波形图')subplot(2,1,2);plot(a-a_quan);%量化误差波形图title('量化误差')3) A律压缩特性曲线clear allClose all;%清除所有记录dx=0.01;%定义x的间距x=-1:dx:1;A=87.56;%定义参数A的值为87.56fori=1:length(x)%对数压缩器输入-输出幅度特性,x是输入的幅值ifabs(x(i))﹤1/A%y是输出的幅值ya(i)=A*x(i)/(1+log(A));elseya(i)=sign(x(i))*(1+log(A*abs(x(i))))/(1+log(A));endendfigure(1)%画出折线近似A律plot(x,ya,'k.:');title('A LAW')xlabel('x');ylabel('y');grid onhold on%定义X,Y的量化步长xx=[-1,-1/2,-1/4,-1/8,-1/16,-1/32,-1/64,-1/128,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1];yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1];plot(xx,yy,'r');%画出A律压缩特性stem(xx,yy,'b-.');4)离散信号的非均匀量化的主程序a=randn(1,500);b=-3:.01:3;[sqnr,a_quan,code]=Ala_pcm(a,64,87.6);[sqnr1,a_quan1,code1]=Ala_pcm(b,64,87.6);sqnr%信号的量化信噪比a(1:5)%输入值a_quan(1:5)%量化值code(1:5,:)%码字subplot(2,1,1);plot(b,a_quan1);title('量化器输入输出关系');subplot(2,1,2);plot(a-a_quan);title('量化误差');5) A律PCM编码程序function [sqnr,a_quan,code]=Alaw_pcm(a,n,A)amax=max(abs(a));y=Alaw(a,A);[sqnr,y_q,code,amax]=u_pcm(y,n);a_quan=invAlaw(y_q,A);a_quan=amax*a_quan;sqnr=20*log10(norm(a)/norm(a-a_quan));6)量化及PCM编码程序function [sqnr,a_quan,code]=u_pcm(a,n)amax=max(abs(a));a_quan=a/amax;b_quan=a_quan;d=2/n;q=d.*[0:n-1];q=q-((n-1)/2)*d;%量化值的计算Fori=1:na_quan(find((q(i)-d/2 <= a_quan) & (a_quan <= q(i)+d/2)))=...q(i).*ones(1,length(find((q(i)-d/2 <= a_quan) & (a_quan <=q(i)+d/2))));b_quan(find( a_quan==q(i) ))=(i-1).*ones(1,length(find(a_quan==q(i) )));enda_quan=a_quan*amax;%PCM编码nu=ceil(log2(n));code=zeros(length(a),nu);for i=1:length(a)Forj=nu:-1:0if ( fix(b_quan(i)/(2^j)) == 1)%fix(x)对x向0取整的函数code(i,(nu-j)) = 1;b_quan(i) = b_quan(i)-2^j;endendend%SQNR的计算sqnr=20*log10(norm(a)/norm(a-a_quan));%norm(a)求a的均方根值7) A律对数压缩特性函数function y=Alaw(x,A)a=max(abs(x));x=x/a;indx=find(abs(x)<=1/A);if~isempty(indx)y(indx)=A/(log(A)+1)*abs(x(indx)).*sign(x(indx));endindx=find(abs(x)>1/A);if~isempty(indx)y(indx)=1/(log(A)+1)*(1+log(abs(x(indx))*A)).*sign(x(indx));end8) A律对数压缩特性的逆function x=invAlaw(y,A)indx = find(abs(y) <= 1/(log(A)+1));if~isempty(indx)x(indx) = (log(A)+1)/A*abs(y(indx)).*sign(y(indx));endindx = find(abs(y) > 1/(log(A)+1));if~isempty(indx)x(indx) =1/A * exp(abs(y(indx)) / (1/(log(A)+1))-1) .* sign(y(indx));end5.运行结果与分析1)连续信号均匀量化在图3.7中,虚线代表8电平量化的情况,实折线代表16电平量化的情况,显然,16电平量化折线更加逼近原信号波形,这说明随着量化电平数的增加,量化结果更好。但随之而来的是计算复杂度的增加。图3.7连续信号不同电平均匀量化
2)离散信号64电平均匀量化以下是对长度为500的高斯随机变量序列64电平均匀量化和均匀PCM的结果,图3.8中绘制了量化器的输入输出关系及量化误差,表3-1中给出了信噪比以及5组具体的输入值、量化值、码字。表3-1离散信号均匀量化及均匀PCM结果从图3.8中可以看出量化器输入输出关系近似
本页表格在源课件中以图片形式呈现,源文件未提取到表体数据,未作数值还原,建议对照原图补充完整表格内容。
一条直线,这正体现了均匀量化的特点。表3-1中选了5个具体的输入值及与其对应的量化值和码字,从中也可以看出量化误差的情况。图3.8离散信号64电平均匀量化及量化误差
本页表格在源课件中以图片形式呈现,源文件未提取到表体数据,未作数值还原,建议对照原图补充完整表格内容。
3) A律压缩特性曲线图3.9为A律压缩特性曲线。从运行结果可以看出采用非均匀量化,量化器随输入信号的大小采用不同的量化间隔,大信号采用大的量化间隔,小信号采用小的量化间隔,可以以较少的量化电平数达到输入动态范围的要求。4)离散信号A律64电平非均匀量化以下是对长度为500的高斯随机变量序列64电平非均匀量化和非均匀PCM的结果,图3.10中同样绘制了量化器的输入输出关系及量化误差,表3-2中也给出了信噪比以及5组具体的输入值、量化值、码字。
本页表格在源课件中以图片形式呈现,源文件未提取到表体数据,未作数值还原,建议对照原图补充完整表格内容。
图3.9 A律压缩特性曲线从图3.10中可以看出,对同样的离散信号进行64电平量化,非均匀量化器输入输出关系与图
3.8中均匀量化器输入输出关系明显不同,图3.10中量化器输入输出关系曲线的折线正是其非均匀的体现,在零附近比均匀量化更趋近于直线,表明其对小信号信噪比有改善。但从第二个图中可以看出,在某些值的量化误差较大,这是由于对于大信号采用非均匀量化的结果。具体的结果见表3-2。表3-2离散信号非均匀量化及均匀PCM结果
本页表格在源课件中以图片形式呈现,源文件未提取到表体数据,未作数值还原,建议对照原图补充完整表格内容。
图3.10离散信号64电平非均匀量化及量化误差
从表3-2中可以看出量化误差较大,信噪比明显达不到要求,造成此结果的原因是表中所列的几个输入值在这个题目中都属于较大的幅值信号,从图3.10中可以看出,误差小、信噪比理想的量化值在零附近,即输入幅值很小。6.思考题
本页表格在源课件中以图片形式呈现,源文件未提取到表体数据,未作数值还原,建议对照原图补充完整表格内容。
1.实验目的
系数为1。当前样值与预测器输出的前一样值进行比较,如果其差值大于零,则发1码,如果小于零,则发0码。3.仿真思路增量调制系统框图如图3.11所示,其中量化器是一个零值比较器,根据输入的电平极性,输出为δ,预测器是一个单位延迟器,其输出为前一个采样时刻的解码样值,编码器也是一个零值比较器,若其输入为负值,则编码输出为0,否则输出为1。解码器将输入1、0符号转换为δ,然后与预测值相加后得到解码样值的输出,同时也作为预测器的下一个输入。
图3.11增量调制系统框图根据图3.11建立数学关系,编程中采用循环结构来模拟仿真采样时刻向前推进,并建立前后采样时刻样值间的关系。已知输入信号为x(t)=sin2π50t+0.5sin2π150t增量调制的采样间隔为1ms,量化阶距为δ=0.4,
单位延迟器初始值为0。建立仿真模型并求出前20个采样时刻的编码输出序列以及解码样值波形。4.程序代码Ts=1e-3;%采样间隔t=0:Ts:20*Ts;%仿真时间序列x=sin(2*pi*50*t)+0.5*sin(2*pi*150*t);%信号delta=0.4;%量化阶距D(1+length(t))=0;%预测器初始状态For k=1:length(t)e(k)=x(k)-D(k);%误差信号e_q(k)=delta*(2*(e(k)>=0)-1);%量化器输出D(k+1)=e_q(k)+D(k);%延迟器状态更新codeout(k)=(e_q(k)>0);%编码输出endsubplot(3,1,1);plot(t,x,'-o');axis([0 20*Ts,-2 2]);hold on;subplot(3,1,2);stairs(t,codeout);axis([0 20*Ts,-2 2]);%解码端Dr(1+length(t))=0;%解码端预测器初始状态Fork=1:length(t)eq(k)=delta*(2*codeout(k)-1);%解码xr(k)=eq(k)+Dr(k);Dr(k+1)=xr(k);%延迟器状态更新endsubplot(3,1,3);stairs(t,xr);hold on;%解码输出subplot(3,1,3);plot(t,x);%原信号5.运行结果与分析程序执行结果如图3.12所示。最上面的是信号原图,中间的是输出的增量调制信号,最下面的是解码后的波形。从图中原信号和解码结果对比来看,在输入信号变化平缓的部分,编码器输出1、0交替码,相应的解码结果以正负阶距交替变化,形成颗粒噪声,称空载失真;在输入信号变化过快的部分,解码信号因不能跟上信号的变化而引起斜率过载失真。量化阶距越小,则空载失真就越小,但是容易发生过载失真;反之,若量化阶距增大,则斜率过载失真减小,但空载失真增大。如果量化阶距能够根据信号的变化缓急自适应调整,则可以兼顾优化空载失真和过载失真,这就是自适应增量调制的思想。
图3.12增量调制运行结果6.思考题
1.实验目的
Huffman编码算法及步骤如下。设信源S的信源空间为其中:现用有r个码符号的码符号集对信源S中的每一个符号si(i=1,2,…,q)进行编码。编码的步骤如下。
这个新信源称为S信源的第一次缩减信源s1。
(5)当缩减过程进行到第m(m>1)次缩减时,如m次缩减信源sm含有的符号数{q−[(r−1)m]}正好等于码符号集的码符号数r,则表明编码过程已进行到最后一步,信源只剩下最后r个符号。将这最后r个符号分别用码符号a1,a2,…,ar表示。从最后一级缩减信源开始,沿着码符号授予的线路,向前返回,就得出每个信源符号所对应的码符号序列,完成编码的全过程。3.仿真思路假设一信源的字符集为X={x1,x2, … ,x6},相应的概率向量为P={0.3,0.1,0.21, 0.09,0.05,0.25}。首先将概率向量P中的元素进行排序,
P={0.3,0.25,0.21,0.1,0.09,0.05}。然后根据Huffman编码算法得到Huffman树状图如图3.13所示,编码之后的树状图如图3.14所示。图3.13树状图图3.13编码树由图3.14可知x1、x2、x3、x4、x5、x6的码字依次分别为11、10、00、010、0111、0110。平均码长:因此,可以利用MATLAB将Huffman编码算法编写成函数文件huffman,实现对具有概率向量P的离散无失真信源的Huffman编码,并得到其码字和平均码长。4.程序代码function [h,l]=huffman(p)if (length(find(p<0))~=0)error(‘Not a prob,negative component’); %判断是否符合概率分布的条件endif (abs(sum(p)-1)>10e-10)error('Not a prob.vector,component do not add to 1')endn=length(p);fori=1:n-1%对输入的概率进行从大到小排序forj=i:nifp(i)<=p(j)x=p(i);p(i)=p(j);p(j)=x;endendendq=p;m=zeros(n-1,n);fori=1:n-1[q,l]=sort(q);m(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endfori=1:n-1c(i,:)=blanks(n*n);end%以下计算各个元素的码字c(n-1,n)='0';c(n-1,2*n)='1';for i=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))...-(n-2):n*(find(m(n-i+1,:)==1)));c(n-i,n)='0';c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='1';for j=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,...n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));endendfor i=1:nh(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))~=32));endl=sum(p.*ll);%计算平均码长5.运行结果与分析在命令窗口中,只需调用函数文件huffman,计算结果如下。p=[0.30,0.10,0.21,0.09,0.05,0.25];[h,l]=huffman(p)h =%输出各个元素码字11100001001110110l =2.3800 %输出平均码长由仿真结果可知,编码正确,平均码长为2.38。利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。6.思考题
1.实验目的
制的不同电平信号,称为数字基带信号。在某些情况下,数字基带信号可以直接传输,称为数字信号基带传输。基带信道对所传输信号的电波形的要求如下。
字基带信号以使数字信息变换为适合于给定信道传输特性的频谱结构,又称为数字信息的码型转换问题。不同的码型有不同的优点,这里先给出码型表示二元序列的结果,然后再逐一介绍其优点和不足之处。1)单极性非归零码波形用电平1来表示二元信号中的1,用电平0来表示二元信号中的0,电平在整个码元的时间里不变,记为NRZ码。单极性非零码的优点是实现简单,但由于含有直流分量,在带限信道中传输不利,另外当出
现连续的0或连续的1时,电平长时间保持一个值,不利于提取时间信息以便获得同步。2)单极性归零码波形它与单极性非归零码的不同处在于输入二元信息为1时,给出的码元前半周期为1,后半周期为0,输入0则完全相同。单极性归零码频繁跳变,易于提取定时同步信息,直流分量少,性能要优于单极性非归零码。3)双极性非归零码波形它与单极性非归零码类似,用电平1表示二元信号中的1,用电平−1来表示二元信号0。双极性非归零码在0、1信息等概时没有直流分量,这是它相比
单极性非归零码的优点。但是当出现连续的0或连续的1时,电平长时间保持在一个值,仍然具有不利于提取定时同步信息的缺点。4)双极性归零码波形此种码型比较特殊,它使用前半周期为1,后半周期为0来表示信息1;前半周期为−1,后半周期为0来表示0。因此它具有3个电平,严格说来是一种三元码(电平1,0,−1)。双极性归零码包含了丰富的时间信息,每一个码元都有一个跳变沿,便于接收方定时。同时对随机信号,信息1和0出现的概率相同,所以此种码元几乎没有直流分量。
3.仿真思路用实验原理介绍的编码规则对二元信息序列100110000101进行相应的编码并输出编码后的波形,同时求出该波形的功率谱,根据功率谱分析不同基带码型在传输时的特点。4.程序代码1)单极性非归零码function y=snrz(x)%本函数实现将输入的一段二进制代码编为相应的单极性非归零码输出%输入x为二进制码,输出y为编好的码%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示
grid=300;t=0:1/grid:length(x);for i=1:length(x)%计算码元的值if(x(i)==1),%如果信息是1for j=1:grid,%该码元对应的点值取1y((i-1)*grid+j)=1;endelsefor j=1:grid,%反之,信息为0,码元对应点值取0y((i-1)*grid+j)=0;endendEndy =[y,x(i)];%为了画图,注意要将y序列加上最后一位M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%确定x轴和y轴的显示范围%采用了title命令来实现标记出各码元对应的二元信息title('1 0 0 1 1 0 0 0 0 1 0 1单极性不归零信号');subplot(2,1,2);w=-90:0.05:90;z=fftshift(abs(fft(y)));plot(w,z);title('单极性不归零信号幅度谱');axis([-5,5,0,1600]);2)单极性归零码function y = srz(x)%本函数实现将输入的一段二进制代码编为相应的单极性归零码输出%输入x为二进制码,输出y为编好的码grid=300;t=0:1/grid:length(x);%给出相应的时间序列for i=1:length(x)%进行码型变换if(x(i)==1)%若输入的信息是1for j=1:grid/2y(grid/2*(2*i-2)+j)=1;%定义前半时间值为1y(grid/2*(2*i-1)+j)=0;%定义后半时间值为0endelsefor j=1:grid/2%反之,输入信息为0y(grid*(i-1)+j)=0;%定义所有时间值为0endendendy =[y,x(i)];%为了画图,注意要将y序列加上最后一位M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);title('1 0 0 1 1 0 0 0 0 1 0 1单极性归零信号');subplot(2,1,2);w=-90:0.05:90;z=fftshift(abs(fft(y)));plot(w,z);title('单极性归零信号幅度谱');axis([-5,5,0,1600]);3)双极性非归零码function y=dnrz(x)%本函数实现将输入的二进制代码编为相应的双极性非归零码输出%输入x为二进制码,输出y为编好的码grid=300;t=0:1/grid:length(x)for i=1:length(x)%计算码元的值if(x(i)==1)%如果信息是1for j=1:grid%该码元对应的点值取1y((i-1)*grid+j)=1;endelsefor j=1:grid %反之,信息为0,码元对应点值取-1y((i-1)*grid+j)=-1;endendendy =[y,x(i)];%为了画图,注意要将y序列加上最后一位M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);title('1 0 0 1 1 0 0 0 0 1 0 1双极性不归零信号');subplot(2,1,2);w=-90:0.05:90;z=fftshift(abs(fft(y)));plot(w,z);title('双极性不归零信号幅度谱');axis([-5,5,0,1600]);4)双极性归零码function y = drz(x)%本函数实现将输入的二进制代码编为相应的双极性归零码输出%输入x为二进制码,输出y为编好的码grid=300;t=0:1/grid:length(x);%定义相应的时间序列for i=1:length(x)%进行编码if(x(i)==1)%若输入的信息是1for j=1:grid/2y(grid/2*(2*i-2)+j)=1;%定义前半时间值为1y(grid/2*(2*i-1)+j)=0;%定义后半时间值为0endelsefor j=1:grid/2%反之,输入信息为0y(grid/2*(2*i-2)+j)=-1;%定义所有时间值为-1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0endendendy =[y,x(i)];%为了画图,注意要将y序列加上最后一位M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用了title命令来实现标记出各码元对应的二元信息title('1 0 0 1 1 0 0 0 0 1 0 1双极性归零信号');subplot(2,1,2);w=-90:0.05:90;z=fftshift(abs(fft(y)));plot(w,z);title('双极性归零信号幅度谱');axis([-5,5,0,1600]);5.运行结果与分析单极性不归零信号的码型及功率谱密度图如图3.15所示。单极性归零信号的码型及功率谱密度图如图3.16所示。双极性不归零信号的码型及功率谱密度图如图3.17所示。双极性归零信号的码型及功率谱密度图如图3.18所示。图3.15单极性不归零信号图3.16单极性归零信号
图3.17双极性不归零信号图3.18双极性归零信号
由仿真的结果图可以看到由不同的编码规则得到的4种不同码型的码型图。其特点与前述一致,由其功率谱可见,单极性不归零信号具有很大的直流分量且在抽样点上(−0.5和0.5)没有定时提取脉冲;单极性归零信号的直流分量要远远小于单极性不归零信号的直流分量,且在每个抽样点上有定时提取脉冲;双极性不归零信号没有直流分量但其幅度谱功率较大,也没有定时提取脉冲;双极性归零信号幅度谱功率小,且有很频繁跳变的定时脉冲序列。因此,从传输恢复及定时提取的角度来讲,双极性归零信号的性能最好。
6.思考题
1.实验目的
常用的满足或部分满足以上传输特性的码有AMI码、HDB3码、PST码、双相码、Milelr码、CMI码等。最常用的是AMI码和HDB3码。AMI码是传号交替反转码,是PCM24路的传输码型。编码规则如下:代码中的0仍变换为传输码的0,代码中的1交替地变换为传输码的+1−1,…。AMI码的主要缺点是连“0”码太多,影响定时时钟的提取。HDB3码的全称为三阶高密度双级性码,是在AMI码基础上为克服长连“0”难以提取定时信息而改进的一种码型。HDB3码改进的基本思想是:不让AMI码的连“0”太多,当连续出现4个“0”
码时,则人为地添加破坏脉冲,用V表示;为保证无直流,V脉冲应正负交替插入;同时人为添加的破坏脉冲还应与信码有严格区别,以便在接收端能正确恢复原信息。1) HDB3码的编码规则
B与前一个非“0”码反极性;当相邻V之间有奇数个传号时,用000V代替。2) HDB3码的译码原理先找到破坏脉冲V,再找到附加脉冲,然后将其去掉,即凡连续出现两个同极性的脉冲时,后一个脉冲一定是破坏脉冲,译码时先把它变为0;其次是每发现一个破坏脉冲,即从该破坏脉冲往前数至第3个码元位,如有脉冲,必然是附加脉冲,也应变为0;最后经过全波整流,便能恢复原信息。3.仿真思路
4.程序代码1) AMI码的编码Xn=[1 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0];%输入单极性码yn=xn;%输出yn初始化num=0;%计数器初始化for k=1:length(xn)if xn(k)==1num=num+1;%“1”计数器if num/2 == fix(num/2)%奇数个1时输出-1,进行极性交替yn(k)=1;elseyn(k)=-1; endendend%AMI码的解码,对AMI码全波整流即可实现解码decodeAMI=abs(yn);2) HDB3码的编码num=0;%连零计算器初始化yn=yn;%输出初始化sign=0;%极性标志初始化为0V=zeros(1,length(yn));%V脉冲位置记录变量B=zeros(1,length(yn));%B脉冲位置记录变量for k=1:length(yn)if yh(k) == 0num=num+1;%连0个数计算if num == 4 %如果4连0num=0; %计数器清零yh(k)=1*yh(k-4);%让0000的最后一个0改变为与前一个非零符号相同极性的符号V(k)=yh(k);%V脉冲位置记录if yh(k) == sign%若当前V符号与前一个V符号的极性相同yh(k)=-1*yh(k);%则让当前V符号极性反转,yh(k-3)=yh(k);%添加B符号,与V符号同极性B(k-3)=yh(k);%B脉冲位置记录V(k)=yh(k);%V脉冲位置记录yh(k+1:length(yn))=(-1)*yh(k+1:length(yn));end%并让后面的非零符号从V符号开始再交替变化sign=yh(k);%记录前一个V符号的极性endelsenum=0;%当前输入为1,则连0计数器清零endendre=[xn',yn',yh',V',B'];%结果输出:xn,AMI,HDB3,V&B符号3) HDB3码解码input=yh;%HDB3码输入decode=input;%输出初始化sign=0;%极性标志初始化for k=1:length(yh)if input(k)~=0if sign==yh(k)%如果当前码与前一个非零码的极性相同decode(k-3:k)=[0 0 0 0];%则该码判为V码并将*00V清零endsign=input(k);%极性标志endenddecode=abs(decode);%整流error=sum([xn'-decode']);%解码的正确性检验,作图figure(1);stairs([0:length(xn)-1],xn);axis([0 length(xn)-2 2]);title('Xn的单极性不归零波形');figure(2);subplot(2,1,1);stairs([0:length(xn)-1],yn);axis([0 length(xn)-2 2]);title('AMI码的编码波形');subplot(2,1,2);stairs([0:length(xn)-1],decodeAMI);axis([0 length(xn)-22]);title('AMI码的解码波形');figure(3);subplot(2,1,1);stairs([0:length(xn)-1],yh);axis([0 length(xn)-2 2]);title('HDB3码的编码波形');subplot(2,1,2);stairs([0:length(xn)-1],decode);axis([0 length(xn)-22]);title('HDB3码的解码波形');5.运行结果与分析Xn的单极性不归零波形如图3.19所示。Xn编为AMI码的波形及其解码波形如图3.20所示。Xn编为HDB3码的波形及其解码波形如图3.21所示。原始信号、AMI码、HDB3码的幅度谱如图3.22所示。图3.19、图3.20、图3.21和图3.22为仿真得到的曲线。图中分别给出了输入信号Xn、HDB3编码以及HDB3码解码波形。可以从图中清晰地看出仿真结果和理论分析的结果一致,解码后的波形与输入信号码形一致,成功地进行了HDB3码的编码与解码。由HDB3码的波形图可以看出,波形为正与波形为负的个数几乎一样多,即使0、1不等概
的时候,整个波形中不包含直流分量,且无长连0现象,便于定时信息的提取。HDB3码的编解码都很简单,适合作为基带信号的传输码型。由信号的幅度谱可以看出,AMI码和HDB3码的幅度谱中的直流分量明显要小于原始信号幅度谱中的直流分量,且HDB3码的幅度谱更均匀。这使得AMI码和HDB3码从幅度谱的角度更适合在信道中传输。图3.19Xn的单极性不归零波形
图3.20图3.21图3.22原始信号、AMI码、HDB3码的幅度谱
6.思考题
1.实验目的
模拟量,数字调制的调制信号是离散的数字量。若基带信号为m(t),则幅度调制信号一般可表示成:设调制信号m(t)的频谱为M(ω),根据上式不难得到已调信号的频谱:由以上表示式可见,对于幅度已调信号,在波形上,它的幅度随基带信号变化而呈正比变化;在频谱结构上,它的频谱完全是基带信号频谱结构在频域内的简单搬移。线性调制的一般模型如图3.23所示:它由一个相乘器和一个频率响应为H(ω)的带通滤波器组
成。AM包络检波法解调模型如图3.24所示。图3.23图3.243.仿真思路
1)主程序echo ont0=0.15;%信号m(t)ts=0.001;%采样间隔fc=250;%载频a=0.85;%调制指数fs=1/ts;%采样频率t=[0:ts:t0];%时间取值df=0.25;m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];%信号c=cos(2*pi*fc.*t);%载波m_n=m/max(abs(m));%单位化信号[M,m,df1]=fftseq(m,ts,df);%傅里叶变化f=[0:df1:df1*(length(m)-1)]-fs/2;%频率向量u=(1+a*m_n).*c;%已调信号[U,u,df1]=fftseq(u,ts,df);%傅里叶变化env=env_phas(u);%包络检波dem1=2*(env-1)/a;signal_power=spower(u(1:length(t)));%已调信号的功率noise_power=signal_power/100;%噪声功率noise_std=sqrt(noise_power);noise=noise_std*randn(1,length(u));r=u+noise;%添加噪声[R,r,df1]=fftseq(r,ts,df);env_r=env_phas(r);%包络检波dem2=2*(env_r-1)/a;%有噪声时的解调信号pausesubplot(2,1,1)plot(t,m(1:length(t)))axis([0 0.15-2.1 2.1])xlabel('时间')title('消息信号')pauseclfsubplot(2,1,1)plot(t,u(1:length(t)))axis([0 0.15-2.1 2.1])xlabel('时间')title('已调信号')subplot(2,1,2)plot(t,env(1:length(t)))xlabel('时间')title('已调信号的包络')pauseclfsubplot(2,1,1)plot(t,dem1(1:length(t)))xlabel('时间')title('解调后的信号')subplot(2,1,2)plot(t,dem2(1:length(t)))xlabel('时间')title('有噪声的解调后的信号')pauseclfsubplot(2,1,1)length(m)plot(f,fftshift(abs(M)));axis([-400,400,0,150]);title('原始信号的幅度谱')subplot(2,1,2)plot(f,fftshift(abs(U)));axis([-400,400,0,100]);title('已调信号的幅度谱');2)傅里叶变换函数function[M,m,df]=fftseq(m,ts,df)fs=1/ts;if nargin==2%检测参数个数n1=0;elsen1=fs/df;endn2=length(m);n=2^(max(nextpow2(n1),nextpow2(n2)));M=fft(m,n);m=[m,zeros(1,n-n2)];df=fs/n;3)求信号功率的函数function p=spower(x)%求信号功率的函数p=(norm(x)^2)/length(x);4)包络检波函数function [v,phi]=env_phas(x,ts,f0)if nargout==2z=loweq(x,ts,f0);phi=angle(z);endv=abs(hilbert(x));5)求信号希尔伯特变换的函数function x1=loweq(x,ts,f0)t=[0:ts:ts*(length(x)-1)];z=hilbert(x);x1=z.*exp(-j*2*pi*f0*t);5.运行结果与分析原始的消息信号如图3.25所示。图3.25原始的消息信号已调信号及其包络如图3.26所示。图3.26已调信号及其包络
利用上面的方法可以实现基带信号的频带传输,实现调制过程,通过包络检波的方式可以恢复原始信号,加入噪声后恢复出来的信号有较明显的失真。从此实验可以看到噪声对信号的影响。由信号的频谱及已调信号的频谱可以看出,已调信号与原始信号的频谱具有相似的频谱形状,只是频谱搬移到载频fc=250附近,因此幅度调制是线调制;另外,已调信号在载频位置有一个很大的载波脉冲,便于同步解调时的载波提取。因此,除了包络检波波外,幅度调制还可以采用相干解调法解调。原始信号的频谱及已调信号的频谱如图3.27所示。有噪声的解调后的信号如图3.28所示。
6.思考题
1.实验目的
频率远高于输入信号,根据抽样定理,抽样频率必须至少大于两倍的载波频率才能正确地恢复信号,因此对高频信号的模拟仿真效率低、速度慢。为了加速模拟仿真,一般使用基带仿真,也称为低通对等方法。基带仿真使用带通信号的复包络。去掉双边带调制的一边就得到单边带调制。依据所保留的边带是上边还是下边,可以分为USSB和LSSB两种不同的方式。双边带调幅所产生的上下两个边带包含的信息相同,所以只需要传输其中任意一个边带就可以了。将DSB信号中的某一个边带去除,所得到的就是单边带调制信号。单边带信号的突出优势是节约
了传输频带。另外,对于话音信号的单边带解调,可以不用恢复载波相位,甚至接收机的本地载波与发射机的发送载波之间存在少量频率差,话音信号的解调输出失真也不大。设基带信号以傅里叶级数表示为:则以为载波的双边带输出是:其中,第一项为上边带,第二项为下边带。将第一项从中分离出来,就得到单边带(上边带)的调
制输出,即相应地,下边带调制输出为:解调就是从调制信号中提取消息信号。对于常规幅度调制(AM),一般用包络检波进行解调。在这种解调方式中,接收机对载波频率和相位精度的了解是无关紧要的,所以解调过程相对简单。对于DSB-AM调制和SSB-AM调制,用相干解调的方法,要求在接收机中有一个与载波同频同相的信号。DSB-AM调制和SSB-AM调制的相干解调:先将其与一个同频同相的正弦载波信号进行混频,然后将混频结果通过一个低通滤波器来实现。接收机中产生所需要的正弦波振荡器,为本地振荡器。
在实际的话音单边带通信机中,一般采用一个高稳定度的晶体振荡器或频率合成器来产生本地解调载波,而不需要像双边带的解调那样需要用锁相环来恢复载波,这就大大降低了单边带接收机的技术复杂度和成本。3.仿真思路在利用MATLAB进行调制/仿真时,既可以采用自定义函数进行调制/仿真,也可以调用MATLAB所提供的函数进行仿真。本例利用自定义函数进行调制/仿真。4.程序代码1)主程序
t0=0.15;%信号持续时间ts=0.001;%采样时间间隔Fc=250;%载波频率Fs=1/ts;%采样频率df=0.3;%频率分辨率t=[0:ts:t0];%时间矢量m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];c=cos(2*pi*Fc*t);%载波信号b=sin(2*pi*Fc*t);ussb=m.*c-imag(hilbert(m)).*b;%上边带调制信号lssb=m.*c+imag(hilbert(m)).*b;%下边带调制信号[M,m,dfl]=fft_seq(m,ts,df);%傅里叶变化M=M/Fs;[U,ussb,dfl]=fft_seq(ussb,ts,df);U=U/Fs;[L,lssb,dfl]=fft_seq(lssb,ts,df);f=[0:dfl:dfl*(length(m)-1)]-Fs/2;%频率矢量subplot(2,2,1);plot(t,ussb(1:length(t)));%上边带调制信号title('上边带调制信号');subplot(2,2,2);plot(t,lssb(1:length(t)));title('下边带调制信号');%下边带调制信号subplot(2,2,3);plot(f,abs(fftshift(U)));title('上边带调制信号频谱');%上边带调制信号频谱subplot(2,2,4);plot(f,abs(fftshift(U)));title('下边带调制信号频谱');%下边带调制信号频谱2) fft_seq函数%注意:调用傅里叶变换函数fft_seq,此函数原代码如下。function[M,m,df]=fft_seq(m,ts,df)%[M,m,df]=fft_seq(m,ts,df)%[M,m,df]=fft_seq(m,ts,)%M为输入序列m的傅里叶变换,ts为抽样间隔,输入df为频率分辨率%输出序列m按要求的频率分辨率df进行补零后的序列%输出df为最终的频率分辨率fs=1/ts;if nargin==2, n1=0;else, n1=fs/df;endn2=length(m);n=2^(max(nextpow2(n1),nextpow2(n2)));M=fft(m,n);m=[m,zeros(1,n-n2)];df=fs/n;5.运行结果与分析由图3.29可见,幅度谱随基带信号变化而成正比地变化;在频谱结构上,它的频谱是基带信号频谱结构在频域内的简单搬移。幅度调制又称为线性调制。但应注意:这里的“线性”并不是已调信号与调制信号之间符合线性变换关系。事实上,任何调制过程都是一种非线性的变换过程。而且单边带调制信号所占频谱的宽度是双边带的一半,节省了频谱资源。是一种频谱利用率较高的传输方式。
6.思考题
1.实验目的
2)双边带DSB-AM调制信号的相干解调调制信号与接收机本地振荡器所产生的正弦信号相乘,就可以得混频器输出信号为:其傅里叶变换为:可见混频器的输出由一个低频分量和±fc处的两个高频分量组成。将y(t)通过带宽为W的低通滤波器,高频分量被滤除,而与消息信号成正比的低频分量被解调。如果调制相位φc未知,则需使用Costas环解调方法来恢复接收信号的相位信息。Costas环如图3.30所示。
图3.30Costas环解调3.仿真思路假设消息信号如右。用信号m(t)以DSB-AM方式调制载波所得到的已调制信号记为u(t)。设t0=0.15s,fc=250Hz。比较消息信号与已调信号,并绘制它们的频谱。
调制信号接收机本地振荡器所产生的正弦信号cos(2πfct)相乘,可得混频器输出为:傅里叶变换为:将y(t)通过带宽为W的低通滤波器,高频分量被滤除,而与消息信号成正比的同相分量被解调。绘出消息信号的时域,频域曲线。4.程序代码1)双边幅度调制t0=0.15;ts=0.001;%信号持续时间Fc=250;%采样时间间隔Fs=1/ts;%载波频率
df=0.3;%采样频率t=[0:ts:t0];%时间矢量m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];c=cos(2*pi*Fc.*t);%载波信号u=m.*c;%调制信号[M,m,dfl]=fft_seq(m,ts,df);%傅里叶变换M=M/Fs;[U,u,dfl]=fft_seq(u,ts,df);U=U/Fs;[C,c,df1]=fft_seq(c,ts,df);f=[0:dfl:dfl*(length(m)-1)]-Fs/2;%频率矢量subplot(2,2,1);plot(t,m(1:length(t)));title('未调制信号');subplot(2,2,2); plot(t,u(1:length(t)));title('已调制信号');subplot(2,2,3); plot(f,abs(fftshift(M)));title('未调制信号频谱');subplot(2,2,4); plot(f,abs(fftshift(U)));title('已调制信号频谱');2)傅里叶变换函数fft-seqfunction[M,m,df]=fft_seq(m,ts,df)fs=1/ts;if nargin==2 n1=0;else n1=fs/df;endn2=length(m);n=2^(max(nextpow2(n1),nextpow2(n2)));M=fft(m,n);m=[m,zeros(1,n-n2)];df=fs/n;3)相干解调t0=0.15;%信号持续时间ts=1/1500;%采样时间间隔Fc=250;%载波频率Fs=1/ts;%采样频率df=0.3;%频率分辨率t=[0:ts:t0];%时间矢量m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];c=cos(2*pi*Fc.*t);%载波信号u=m.*c;%调制信号y=u.*c;%混频[M,m,dfl]=fft_seq(m,ts,df);%傅里叶变换M=M/Fs;%缩放[U,u,dfl]=fft_seq(u,ts,df);U=U/Fs;[Y,y,dfl]=fft_seq(y,ts,df);Y=Y/Fs;f_cutoff=150;%滤波器截止频率,也可用MATLAB的工具FDATOOL设计n_cutoff=floor(150/dfl);%设计滤波器f=[0:dfl:dfl*(length(m)-1)]-Fs/2;%频率矢量H=zeros(size(f));H(1:n_cutoff)=2*ones(1,n_cutoff);H(length(f)-n_cutoff+1:length(f))=2*ones(1,n_cutoff);DEM=H.*Y;%滤波器输出频谱dem=real(ifft(DEM))*Fs;%滤波器的输出subplot(2,2,1);plot(t,m(1:length(t)));title('未调制信号');subplot(2,2,2);plot(t,dem(1:length(t)));title('解调信号');subplot(2,2,3);plot(f,abs(fftshift(M)));title('未调制信号频谱');subplot(2,2,4);plot(f,abs(fftshift(DEM)));title('已调制信号频谱');5.运行结果与分析图3.31是发射信号调制仿真得到的曲线。由图可以看出调制增大了信号的发射功率,提高了发射功率的利用率。图3.32是对接收信号进行解调得出的频谱曲线。解调信号与未调信号形状非常相似,频谱形状基本相同,能很好地把信号恢复出来。所以,利用DSB-AM对发射信号进行调制是成功的,它使人们能合理使用频带资源,提高了信噪比,降低了误码率,提高了通信质量。6.思考题
图3.31图3.321.实验目的
3)二进制相移键控的基本原理二进制相移键控是载波的相位随着二进制数字基带信号而变化,而振幅和频率保持不变。2PSK信号的时域表达式为:若g(t)是幅度为1持续时间为Ts的矩形脉冲,则在一个码元间隔内有:这种以载波的不同相位直接表示相应二进制数字信号的调制方式,通常称为绝对相移方式。4)频谱分析原理先对信号x(t)采样得到采样序列x(n),然后对
信号进行N点的FFT变换,N要大于等于采样点数。序列进行FFT后:若采样频率为fs,则频率分辨率为:Δ=fs/N频率分辨率表征了采样序列进行FFT后,相邻两条谱线之间的间隔。对信号进行FFT后,找出幅度最大的一条谱线所在的位置,然后通过f=k⋅Δ计算出信号频率。3.仿真思路因为MATLAB的操作对象是数组,本身不能产生连续的信号,因此假设信号持续了10秒,每个二进制信号持续1秒,对信号从0时刻开始每间隔0.01秒进行采样,则从0.01秒起一共有1000个采样点,
采样频率为100,采样时间为0.01,这些采样点与10个二进制信号映射,假设采样信号用数组m表示,则每100个点表示一个二进制信号,也就是每个信号持续了1秒。由此用plot命令可以画出连续的信号。进行调制时,在试验中为了便于观察信号的变化,故将载波频率f1和f2取得比较小,试验中f1=1,f2=2。因此载波cos2πft当t=1时,两个载波分别表示1秒内一个完整的余弦波和两个余弦波这样的两个载波。进行2ASK调制时,只需把基带采样信号m与载波信号一一对应相乘就可以了。
进行2FSK时,因为“0”和“1”对应不同的载波,这里想到用一个开关函数来区分0和1,因此这里用cos0.5πm和sin 0.5πm来充当开关函数,在m=1时,cos0.5πm = 0,sin 0.5πm =1,当m=0时,cos0.5πm =1,sin 0.5πm = 0。这样只需要在两个开关函数后乘上对应的载波,然后相加就可以实现2FSK的调制了。进行2PSK时,首先用2*m−ones(1,length(m))将0和1映射成为−1和1,这样将信号与载波一一对应相乘就可以实现2PSK。进行谱分析时,先对基带信号m、2ASK、2FSK、2PSK信号进行FFT变换,试验中采样信号长度为
1000,这里采用N=1000点的FFT,然后找出变换后信号幅度最大的点所在位置,计算出对应的频率。试验中,Δ=0.01,给出的图中画出的计算过的f和对应的信号傅里叶变换的幅度。鉴于基带信号一般是只含有直流分量和少数的低频分量和傅里叶变换的共轭性质,因此给出0到0.5fs的频谱。其他的给出了0到3的频谱。对于PSK,信号的相位增加了π。由于PSK相当于把原始基带信号中的0映射成为了−1,故可以将PSK看成是两倍的ASK信号减去一个长度为采样长度N的载波信号。故psk=2ask-ones(1,N),对此式做傅里叶变换,可得PSK信号的频谱生成图。
4.程序代码1)主程序clcclear allclose all%产生比特信号fs=100;%采样频率ts=1/fs;t=0.01:ts:10;a=[1 0 1 1 0 0 1 1 0 1];m=a(ceil(t));subplot(411);plot(t,m)title('产生十比特二进制比特序列');axis([0,10,-1.5,1.5]);%*************调制************%f1=1;%载波频率f2=2;tzxh1=cos(2*pi*f1*t);tzxh2=cos(2*pi*f2*t);%2FSK调制情况下另一载波%**************2ASK调制************%ask=m.*tzxh1;subplot(412);plot(t,ask)title('2ASK调制波形');axis([0,10,-1.5,1.5]);%**************2FSK调制************%fsk=cos(m*(pi/2)).*tzxh1+sin(m*(pi/2)).*tzxh2;subplot(413);N=length(m1);k=0:N-1;f=k/10;f=f-(N-1)/20;figure(1);subplot(2,1,1); plot(f,m1);axis([-5,5,0,600]);title('基带信号的幅度谱');subplot(2,1,2); plot(f,abs(ask1));title('2ASK信号的幅度谱');axis([-5,5,0,300]);figure(2);subplot(2,1,1); plot(f,abs(fsk1));title('2FSK信号的幅度谱');axis([-5,5,0,300]);subplot(2,1,2);plot(f,abs(psk1));title('2PSK信号的幅度谱');axis([-5,5,0,300]);2) PSK信号频谱由ASK信号和载波信号频谱叠加而成clcclear allclose all%产生比特信号fs=100;%采样频率ts=1/fs;N=1000;k=0:N-1;f=k*fs/N;t=0.01:ts:10;a=[1 0 1 1 0 0 1 1 0 1];m=a(ceil(t));f1=1;tzxh1=cos(2*pi*f1*t);ask=m.*tzxh1;m1=2*m-ones(1,N);psk=m1.*tzxh1;Y1=fft(2*ask,N);Y2=fft(-tzxh1,N);Y3=Y1+Y2;Y4=fft(psk,N);plot(f,Y1,'-. b'); hold onplot(f,Y2,'--r'); hold onplot(f,Y3,'*-g'); hold onplot(f,Y4,'>-k')axis([0 3-600 600])legend('2*2ASK信号频谱Y1','载波频谱Y2','Y1+Y2','PSK信号频谱')xlabel('f');grid on5.运行结果与分析图3.33和图3.34分别画出了基带信号和频带信号的时域图和部分频域图。从图3.33可以看出,用单极性不归零码表示的基带信号正确地调制成了载波频率为1和2的ASK信号,FSK信号和PSK信号。图3.33调制信号从图3.34可以看出,对于基带信号,频谱幅度比较高的都集中在低频内,符合基带信号频谱
图3.34已调信号的频谱图
特征;对于2ASK信号,幅度最大的点出现在频率为1的位置,也符合试验中的参数;对于2FSK信号,幅度最大和次大的频率分别在频率为1和2的位置,故也符合试验中的参数。对于2PSK信号,通过计算载波频率f1所在的点的2倍ASK信号和长度为N的直流信号的傅里叶变换的差值,即2×(299.41+18.837i)−(499.01+31.395i)=99.8100+6.2790i,而PSK在载波f1处的傅里叶变换为99.803+6.2791i。然后在PSK的傅里叶变换中找这个差值就可以确定载波的频率,通过验证可以得到试验结果符合要求。
从下图可以看出,PSK信号的频谱完全可以由2倍的ASK信号和载波信号的频谱相减得到。对应的载波频率f1的谱线幅度是6.思考题
1.实验目的
图3.36 2ASK信号产生的原理框图假设二进制信源{bn}的序列值为1或0,发送滤波器的冲击响应为g(t),则二进制序列经过发送成形滤波器后的基带信号与载波相乘,即可得到2ASK信号:式中:g(t)是持续时间为Ts的矩形脉冲,ωc为载波频率,bn为二进制数字。若令则有
2ASK信号的解调方式有相干解调和包络检波的非相干解调两种。2)相干解调相干解调也称为同步解调,其原理是从接收信号中提取离散的载波分量,使得所恢复的载波与接收的信号同频同相,然后再将恢复载波与接收信号相乘,经过低通滤波器后,消除二倍频分量,最后再对信号经过采样判决即可恢复出所发送的数据信号。其结构图如下图所示。
当发送信息比特位为“1”时,输入的2ASK信号为Acosωct,则经过相干解调后的输出信号为y(t)=A + nc(t),这里A为信号幅度,nc(t)为输出信号中的噪声成分。当发送信息比特为“0”时,输入的信号为“0”,则输出信号为y(t)=nc(t)。因此判决电平取A/2,大于A/2判为“1”码,小于A/2判为“0”码。3)非相干解调非相干解调主要利用包络检波,原理简单。其优点是:不需要载波提取电路,实现简单。其结构图如下图所示。
假设接收端的信号为r(t),其中V1(t)和V0(t)分别为发送“1”和“0”的接收信号包络,应该在它们的眼图最大睁开处进行周期性抽样,然后送给判决器进行判决输出。对于这种解调方式,其误比特率近似值为:4) 2ASK信号的功率谱和带宽由于二进制振幅键控信号是随机的、功率型的信号,故研究频谱特性时,应该讨论它的功率谱密度。设s(t)是单极性随机矩形脉冲序列,且0、1出现是等概的,则2ASK信号的功率谱密度为:
3.仿真思路利用MATLAB仿真产生序列值为“0”、“1”的单极性不归零的基带脉冲序列,然后对此输入信号进行2ASK调制,生成适合信道传输的调制波形,最后对调制波形进行解调恢复原始信号,仿真得出相应波形。4.程序代码1)主程序clear allglobal dt t f df N T%全局变量close allN=2^20;dt=0.001;%ms
df=1/(N*dt);%kHzT=N*dt;%截短时间Bs=N*df/2;%系统带宽t=linspace(-T/2,T/2,N);%时域横坐标f=linspace(-Bs,Bs,N)+eps;%频域横坐标fm=1;%模拟基带信号频率为1kHzfc=2;%正弦载波信号频率为2kHzmt=cos(2*pi*fm*t);%模拟基带信号m(mt>0)=1;%发送比特m(mt<0)=0;c=cos(2*pi*fc*t);%正统载波信号s=m.*c;%DSB-SC AM已调信号S=T2F(t,s);基带信号n=awgn(s,20);%AWGN信号噪声r=s+n;%接收信号y=r.*c;Lpfil=LPF(fc);%低通滤波器Y=T2F(y);yrt=real(F2T(Lpfil.*Y));yr=yrt-mean(yrt);yr(yr>0)=1;%发送比特yr(yr<0)=0;subplot(3,1,1)plot(t,m,’LineWidth’,1.2)title('输入信号');axis([-1,+1,-0.2,1.2*max(m)])xlabel('t (ms)')ylabel('s(t) (V)')subplot(3,1,2)plot(t,s,'LineWidth',1.2)title('2ASK调制后波形');axis([-1,+1,1.2*min©,1.2*max©])xlabel('t (ms)') ylabel('s(t) (v)')subplot(3,1,3) plot(t,yr,'LineWidth',1.2)axis([-1,+1,-0.2,1.2*max(yr)])title(['2ASK解调后波形'])xlabel('t (ms)') ylabel('s(t) (V)')subplot(2,1,1);[M,d_NRZf]=T2F(m,d_NRZ(1:length(m)));%信号频谱函数plot(M,10*log10(abs(d_NRZf).^2/Ts));axis([-2 2-50 20]);xlabel('输入信号功率谱密度(dB/Hz)');[f,s_2askf]=T2F(t,s); %信号频谱函数subplot(2,1,2); plot(f,10*log10(abs(s_2askf).^2/Ts));axis([-fc-4 fc+4-50 20]);xlabel('2ASK功率谱密度(dB/Hz)');2)傅里叶变换函数T2Ffunction [f,sf]=T2F(t,st)dt=t(2)-t(1);T=t(end);df=1/T;N=length(st);f=-(N/2)*df:df:(N/2)*df-df;sf=fft(st);sf=T/N*fftshift(sf);3)子程序F2Tfunction x=F2T(X)globaldtdftfTNX=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end4)子程序LPFfunction y=LPF(fc);%实现低能的频域形式global dt df N t f TBs=N*df/2;%系统带宽x1=(Bs-fc/2)*N/(2*Bs);x2=(Bs+fc/2)*N/(2*Bs);y=zeros(1,N);y(x1:x2)=1;5.运行结果与分析由图3.40可以直观地看到将MATLAB产生的输入数字信号经过2ASK调制解调系统,可以无失真地恢复出原始信号。这是一种简单的数字调制解调系统,有利于实现基带数字信号与频带数字信号之间的相互变换。图3.40 2ASK调制及解调后的信号2ASK信号的功率谱密度是由相应的单极性数字基带信号功率谱密度形状不变平移至±fc处形成的,所以2ASK信号的功率谱密度由连续谱和离
散谱两部分组成。它的连续谱取决于数字基带信号基本脉冲的频谱;它的离散谱是位于±fc处的一对频域冲激函数,这意味着2ASK信号中存在着可作载频同步的载波频率fc的成分,如图3.41、图3.42所示。2ASK信号的带宽是单极性数字基带信号带宽的两倍。当数字基带信号的基本脉冲是矩形不归零脉冲时,fs=1/Ts。6.思考题
图3.41图3.421.实验目的
已调波形,而这个可以用受矩形脉冲序列控制的开关电路对两个不同的独立的频率源f1、f2进行选通,原理如图3.43所示。2FSK信号的解调也有非相干和相干两种。FSK信号可以看成是用两个频率源交替输出得到的,所以FSK接收机由两个并联的ASK接收机组成。原理如图3.44所示。图3.432FSK调制原理图
图3.44 2FSK信号的解调3.仿真思路运用MATLAB编程实现FSK调制解调过程,并且输出其调制后的波形,画出频谱、功率谱密度图,并比较各种调制的误码率情况,讨论其调制效果。
二进制频移键控已调信号的时域表达式为:二进制频移键控的调制器可以采用模拟信号调频电路来实现,但更容易的实现方法是图3.46中所示的键控法,两个独立的载波发生器的输出受控于输入的二进制信号,按照输入1或0分别选择一个载波作为输出。图3.46 2FSK信号调制器
4.程序代码Fc=10;%载频Fs=40;%系统采样频率Fd=1;%码速率N=Fs/Fd;df=10;numSymb=25;%进行仿真的信息代码个数M=2;%进制数SNRpBit=60;%信噪比SNR=SNRpBit/log2(M);seed=[12345 54321];numPlot=15;x=randsrc(numSymb,1,[0:M-1]);%产生25个二进制随机码figure(1)stem([0:numPlot-1],x(1:numPlot),'bx');title('二进制随机序列')xlabel('Time');ylabel('Amplitude');%调制y=dmod(x,Fc,Fd,Fs,'fsk',M,df);numModPlot=numPlot*Fs;t=[0:numModPlot-1]./Fs;figure(2)plot(t,y(1:length(t)),'b-');axis([min(t) max(t)-1.5 1.5]);title('调制后的信号')xlabel('Time');ylabel('Amplitude');%在已调信号中加入高斯白噪声randn('state',seed(2));y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'db');figure(3)plot(t,y(1:length(t)),'b-');axis([min(t) max(t)-1.5 1.5]);title('加入高斯白噪声后的已调信号')xlabel('Time'); ylabel('Amplitude');%相干解调figure(4)z1=ddemod(y,Fc,Fd,Fs,'fsk/eye',M,df);title('相干解调后的信号的眼图')figure(5)stem([0:numPlot-1],x(1:numPlot),'bx');hold on;stem([0:numPlot-1],z1(1:numPlot),'ro'); hold off;axis([0 numPlot-0.5 1.5]);title('相干解调后的信号原序列比较')legend('原输入二进制随机序列','相干解调后的信号')xlabel('Time'); ylabel('Amplitude');%非相干解调figure(6)z2=ddemod(y,Fc,Fd,Fs,'fsk/eye/noncoh',M,df);title('非相干解调后的信号的眼图')figure(7)stem([0:numPlot-1],x(1:numPlot),'bx'); hold on;stem([0:numPlot-1],z2(1:numPlot),'ro'); hold off;axis([0 numPlot-0.5 1.5]);title('非相干解调后的信号')legend('原输入二进制随机序列','非相干解调后的信号')xlabel('Time'); ylabel('Amplitude');%误码率统计[errorSym ratioSym]=symerr(x,z1);figure(8)simbasebandex([0:1:5]);title('相干解调后误码率统计')[errorSym ratioSym]=symerr(x,z2);figure(9)simbasebandex([0:1:5]);title('非相干解调后误码率统计')%滤除高斯白噪声Delay=3;R=0.5;PropD=0;[yf,tf]=rcosine(Fd,Fs,'fir',R,Delay);[yo2,to2]=rcosflt(y,Fd,Fs,'filter',yf);%加入高斯白噪声后的已调信号和经过升余弦滤波器后的已调信号t=[0:numModPlot-1]./Fs;figure(10)plot(t,y(1:length(t)),'r-');hold on;plot(to2,yo2,'b-');%滤除带外噪声hold off;axis([0 30-1.5 1.5]);xlabel('Time');ylabel('Amplitude');legend('加入高斯白噪声后的已调信号','经过升余弦滤波器后的已调信号')title('升余弦滤波前后波形比较')eyediagram(yo2,N);title('加入高斯白噪声后的已调信号的眼图')5.运行结果与分析上述程序的运行结果如图3.47、图3.48、图3.49、图3.50、图3.51、图3.52、图3.53、图3.54、图3.55和图3.56所示。6.思考题
图3.47图3.48图3.47是二进原始信号图3.48是2FSK调制后的信号
图3.49图3.50图3.49是相干解调后信号的眼图图3.50是相干解调后的信号
图3.51图3.52图3.51是非相干解调后的信号的眼图图3.52是非相干解调后的信号
图3.53图3.54图3.53是相干解调后的误码率统计图3.54是升余弦滤波后的波形比较
图3.55图3.56图3.55是加入高斯白噪声后的已调信号图3.56是加入高斯白噪声后的已调信号的眼图
1.实验目的
绝对相移是利用载波的相位(指初相)直接表示数字信号的相移方式。二进制相移键控中,通常用相位0和π来分别表示“0”或“1”。2PSK已调信号的时域表达式为:这里,S(t)与2ASK及2FSK时不同,为双极性数字基带信号,即:式中:g(t)是高度为1,宽度为Tb的门函数。因此,在某一个码元持续时间Tb内观察时,有2PSK信号的调制方框图如图3.58所示。图(a)是产生2PSK信号的模拟调制法框图;图(b)是产生2PSK信号的键控法框图。
图3.58 2PSK调制器框图就模拟调制法而言,与产生2ASK信号的方法比较,只是对S(t)的要求不同,因此2PSK信号可以看成是双极性基带信号作用下的DSB调幅信号。而就键控法来说,用数字基带信号S(t)控制开关电路,选择不同相位的载波输出,这时S(t)为单极性NRZ或双极性NRZ脉冲序列信号均可。2PSK信号属于DSB信号,它的解调不再能采用
包络检测的方法,只能进行相干解调,其方框图如图3.59所示。图3.59 2PSK信号接收系统方框图工作原理简要分析如下。不考虑噪声时,带通滤波器输出可表示为:y(t)=cos(ωct+ϕn)。式中:ϕn为2PSK信号某一码元的初相。ϕn=0时,代表数字“0”;ϕn=π时,代表数字“1”。与同步载波cosωct相乘后,输出为:
经低通滤波器滤除高频分量,得解调器输出为:根据发端产生2PSK信号时ϕn(0或π)代表数字信息(“1”或“0”)的规定,以及收端x(t)与ϕn的关系的特性,抽样判决器的判决准则为:其中x为x(t)在抽样时刻的值。由于2PSK信号实际上是以一个固定初相的末调载波为参考的,因此,解调时必须有与此同频同相的同步载波。如果同步载波的相位发生变化,
如0相位变为π相位或π相位变为0相位,则恢复的数字信息就会发生“0”变“1”或“1”变“0”的现象,从而造成错误的恢复。这种因为本地参考载波倒相,而在接收端发生错误恢复的现象称为“倒π”现象或“反向工作”现象。绝对移相的主要缺点是容易产生相位模糊,造成反向工作。这也是它实际应用较少的主要原因。解决该问题的方法是采用相对移相调制。3.仿真思路如果信号为:
现用调相将其调制到载波f(t)=fc(t)上,下面通过画出调相信号的时域波形频域波形来介绍调相波(t0=0.25s,fc=50Hz)。4.程序代码echo ont0=0.25;%信号持续时间tz=0.0005;%抽样周期fc=200;%载波频率kf=50;fz=1/tz;t=[0:tz:t0];%时间序列df=0.25;m=zeros(1,501);fori=1:1:125%前125个点值为对应标号m(i)=i;endfori=126:1:375m(i)=m(125)-i+125;%中间250个点值成下降趋势,线性方程如语句中endfori=376:1:501%最后125个点值用另一条直线方程m(i)=m(375)+i-375;endm=m/50;%将信号值幅度变至要求[M,m,df1]=fftseq(m,tz,df);%傅里叶变换M=M/fz;f=[0:df1:df1*(length(m)-1)]-fz/2;fori=1:length(t)%便于进行相位调制和作图mn(i)=m(i);endu=cos(2*pi*fc*t+mn);%相位调制[U,u,df1]=fftseq(u,tz,df);%傅里叶变换U=U/fz;%频率压缩pause;subplot(2,1,1)plot(t,m(1:length(t)))axis([0 0.25-3 3]);xlabel('时间')title('信号波形');subplot(2,1,2)plot(t,u(1:length(t)))axis([0 0.15-2.1 2.1]);xlabel('时间')title('调相信号的时域波形');pausesubplot(2,1,1)plot(f,abs(fftshift(M)))xlabel('频率');title('信号频谱')subplot(2,1,2)plot(f,abs(fftshift(U)))title('调相信号的频谱');xlabel('频率')5.运行结果与分析时域波形如图3.60所示,从图中可以看出由于信号的波形是渐变的,已调信号的波形不是太明显,而若用突变的波形来调制就会得到变化明显的已调波形。调相信号的频谱如图3.61所示。在这里调相的频谱变化类似于调幅,这是因为调相是窄带调相,其频谱类似于调幅的频谱。6.思考题
图3.60三角波调相波形图3.61三角波调相的频谱图
1.实验目的
载波信号。MASK已调信号的表示式为:式中,s(t)为M进制数字基带信号。实现M电平调制的原理框图如图3.62所示,与2ASK系统非常相似,不同的只是基带信号由二电平变为多电平。为此,发送端增加了2−M电平变换器,将二进制信息序列每k个分为一组(k=log2M),变换为M电平基带信号,再送入调制器。相应地,在接收端增加了M−2电平变换器。多进制数字幅度调制信号的解调可以采用相干解调方式,也可以采用包络检波方式,原理与2ASK的相同。由于采用多电平,因而要求调制器为线性调制器,即已调信号幅度应与输入基带信号幅度成正比。
图3.62M进制幅度调制系统原理框图3.仿真思路数字调制包括数模转换和模拟调制两部分,如图3.63所示。数模转换技术将接收到的数字信号转化为模拟信号,再完成调制。一般来说,数字信号可以组成一个有限的码符集,在通信工具箱中,映射点的个数被称为M元数。数模转换算法需为每个映射点找到不同的模拟信号集,由模拟信号集组成信号空间,映射点对应的所有模拟信号集被称为点
集。数字解调过程是数字调制的逆过程,包括模拟解调和模数转换。模拟信号解调后再数字化就得到解调的数字信号。数字调制涉及3个频率,即载波信号频率Fc、抽样频率Fs和波特率Fd。为能正确解调,频率之间应满足Fs>Fc>Fd。1) MASKM元幅度键控调制包含MASK映射和模拟幅度调制两部分。MASK映射将输入的数字码符映射到区间[−x,x],数字码符取值范围是[0,M−1]区间内的整数。输出信号的幅值分别为[−x,x]的(M−1)等分点。注意:M必须是2k,k是一个正整数,图3.64所示为M元数为2、4和8的点集。
图3.63数字调制过程图3.64 2、4和8点集MASK映射
2) MQASKMQASK是数字调制使用得最多的一种方法。它一般将输入的数字码符映射成为同相和正交的两个独立分量,然后用模拟QAM法对它们进行调制;在接收方,接收的信号被解调为同相和正交信号,从它们映射过程中恢复原始信号。有许多种方法可将输入信号映射成同相和正交分量。通信工具箱为MQASK提供3种方案,即平面直角点集、圆点集和用户定义任意点集。在本程序中使用平面直角点集。平面直角点集QASK具有规则的方形点集结构,平面直角点集的关键数字是元数M,通信工具箱限制平面直角点集为2k,k是一个正整数。
3)数字带通调制/解调函数dmod和ddemod格式一:y=dmod(x,Fc,Fd,Fs,'ask',M)。功能:输出M-ASK调制信号,M-ASK的元数由参数M指定,输入数字信号范围为[0,M−1]的整数,输出信号y的大小是输入信号x大小的Fs/Fd倍。使用modmap('ask',M)命令可画出平面星座图。格式二:y=dmod(x, Fc, Fd, Fs,'qdsk',M)。功能:输出以平面直角点集表示的QASK调制信号,QASK的元数为参数M,输入数字信号的范围为[0,M−1],输出信号y的大小是输入信号x大小的Fs/Fd倍。使用modmap('qask',M)命令可画出平面星座图。
格式三:z=ddemod(y,Fc,Fd,Fs,'ask',M)。功能:解调M-ASK调制信号,输出数字信号为[0,M−1]范围的整数。格式四:z= ddemod(y,Fc,Fd,Fs,'qask',M)。功能:解调M-QASK调制信号,输出数字信号为[0,M−1]范围的整数。4.程序代码M=16;%设置M的数目Fc=4;%载波频率Fd=1;%信号采样速率Fs=16;%采样速率%正交MASK调制解调x1=randint(50,1,M);%产生随机信号y1=dmod(x1,Fc,Fd,Fs,'qask',M);%使用M元QASK调制方式y1noisy=awgn(y1,10, 'measured');%向信号y1添加高斯白噪声z1=ddemod(y1noisy,Fc,Fd,Fs, 'qask',M);%解调信号y1noisy%非正交MASK调制解调y2=dmod(x1,Fc,Fd,Fs, 'ask',M);%使用M元ASK调制方式y2noisy=awgn(y2,10, 'measured');%向信号y2添加高斯白噪声z2=ddemod(y2noisy,Fc,Fd,Fs, 'ask',M);%解调信号y2noisy%绘图t=0.1:0.1:5;subplot(3,1,1);%绘制原信号的图plot(t,x1);title('未调制信号');subplot(3,1,2);%绘制正交调制后的信号图plot(y1noisy);title('正交调制后的信号');subplot(3,1,3);%绘制非正交调制后的信号图plot(y2noisy);title('非正交调制后的信号');figuresubplot(2,1,1);plot(t,x1);title('未调制信号');subplot(2,1,2);%绘制解调后的信号图plot(t,z1, 'r*-',t,z2, 'go-');title('调制解调后的信号比较');legend('正交调制解调后信号', '非正交调制解调后信号');figuremodmap('qask',M);%绘制16Q-ASK星座图figuremodmap('ask',M) ;%绘制16ASK星座图5.运行结果与分析从图3.65的仿真结果可以看出,正交调制后的信号比非正交调制后的信号受信道中高斯白噪声的影响要小,衰减也小,因此,16QASK信号的抗噪声能力优于16ASK,常被用于在频带受限的信道中传输信息。从图3.66的仿真结果可以看出,与经非正交调制解调后的信号相比,经正交调制解调后的信号更逼近原始信号,因此,16QASK调制解调的性能要优于16ASK调制解调的性能。
从图3.67和图3.68的仿真结果可以看出,16QASK信号的星座图为矩形,I(t)和Q(t)为双极性四电平信号,相邻电平的距离相等;16ASK信号的星座图为直线型,相邻电平的距离不相等。6.思考题
图3.65调制前、后的信号
图3.66调制/解调前、后的信号
图3.67 16QASK星座图图3.68 16ASK星座图1.实验目的
在接收端,输入信号分成N个支路,分别用N个子载波混频和积分,恢复出N个子信号,再经过并串变换和常规QAM(或QPSK)解调就可以恢复出数据。由于子载波的正交性,混频和积分电路可以有效地分离各个子信道。2) OFDM系统中的FFT/IFFT对图3.69中的输出s(t)在T=mTs内进行离散化得到:
将这些分量在Δt时间内进行低通滤波,即进行D/A变换,则又可以恢复为原来的模拟信号s(t)。将fn=fc+nΔf带入上式得到:而大括号内正是序列d(n)=a(n)+jb(n)的离散傅里叶反变换IDFT。可见,图3.69的框内部分可用IDFT来实现,取IDFT输出的实部,再经D/A变换和重建(平滑)滤波又可恢复成原来的模拟信号s(t),经上变频即可送入信道进行传输。由于只传IDFT输出的实部,在接收端(下变频之后)则须以Δt/2时间间隔进行采样,并进行ZN点DFT才能恢复出原来的数据。同理,在接收端如图3.70所示,框内
部分也可以用DFT模块来代替。图3.69 OFDM系统发送端的调制部分
图3.70 OFDM系统接收端的解调部分3.仿真思路根据TS36.211协议具体系统的描述,此OFDM
系统采用如图3.71所示的结构。可分为信号源、调制、串并转换、IFFT模块、并串转换、加入CP、去掉CP、FFT模块、解调等。用MATLAB来仿真OFDM系统,主要目的就是完成系统框图中的各单元的功能,最后进行结果分图3.71 OFDM系统的仿真框图
图3.72用matlab实现OFDM系统的流程图析,确定仿真后的系统性能如何。根据系统仿真结构图,可以画出程序实现流程图,图3.72是用MATLAB程序实现OFDM系统的流程图。根据文中建立的OFDM系统的数学模型,主程序主要分以下几个部分:产生信源数据、产生OFDM信号、OFDM信号通过噪声信道、接收端的OFDM信号的恢复、系统性能的评价。4.程序代码1)主程序%定义部分初始变量para=128;并行信道的个数fftlen=128; FFT变换的长度noc=128;仿真过程中所使用的载波数
nd=6;每一次循环中OFDM码字的个数ml=2;使用QPSK调制方式sr=250000;符号速率br=sr.*ml;比特速率gilen=32;保护间隔的长度%产生信源数据seldata=rand(1,para*nd*ml)>0.5;paradata=reshape(seldata,para,nd*ml);%产生OFDM信号%QPSK modulation[ich,qch]=qpskmod(paradata,para,nd,ml);kmod=1/sqrt(2);ich1=ich.*kmod;qch1=qch.*kmod;%IFFTx=ich1+qch1.*i;y=ifft(x);ich2=real(y);qch2=imag(y);%OFDM信号通过噪声信道[ich4,qch4]=comb(ich3,qch3,attn);[ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd);%接收端的OFDM信号的恢复%FFTrx=ich5+qch5.*i;ry=fft(rx); % fft : built in functionich6=real(ry); % real : built in functionqch6=imag(ry); % imag : built in function%QPSK demodulationich7=ich6./kmod;qch7=qch6./kmod;[demodata]=qpskdemod(ich7,qch7,para,nd,ml);% Parallel to serial conversiondemodata1=reshape(demodata,1,para*nd*ml);%计算误码率%计算误码率noe2=sum(abs(demodata1-seldata));nod2=length(seldata);%计算平均误码率noe=noe+noe2;nod=nod+nod2;%计算误字率ifnoe2~=0eop=eop+1;elseeop=eop;endeop;nop=nop+1;end%计算误码率per=eop/nop;ber=noe/nod;2) QPSK调制仿真子程序function [demodata]=qpskdemod(idata,qdata,para,nd,ml)demodata=zeros(para,ml*nd);demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0;demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;3)产生加性高斯白噪声的仿真子程序function [iout,qout] = comb (idata,qdata,attn)iout = randn(1,length(idata)).*attn;qout = randn(1,length(qdata)).*attn;iout = iout+idata(1:length(idata));qout = qout+qdata(1:length(qdata));4)插入CP的仿真子程序function [iout,qout]= giins(idata,qdata,fftlen,gilen,nd);idata1=reshape(idata,fftlen,nd);qdata1=reshape(qdata,fftlen,nd);idata2=[idata1(fftlen-gilen+1:fftlen,:); idata1];qdata2=[qdata1(fftlen-gilen+1:fftlen,:); qdata1];iout=reshape(idata2,1,(fftlen+gilen)*nd);qout=reshape(qdata2,1,(fftlen+gilen)*nd);5)去掉CP的仿真子程序function [iout,qout]= girem(idata,qdata,fftlen2,gilen,nd);idata2=reshape(idata,fftlen2,nd);qdata2=reshape(qdata,fftlen2,nd);iout=idata2(gilen+1:fftlen2,:);qout=qdata2(gilen+1:fftlen2,:);6)QPSK解调的仿真子程序function [demodata]=qpskdemod(idata,qdata,para,nd,ml)demodata=zeros(para,ml*nd);demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0;demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;5.运行结果与分析图3.73为OFDM子载波采用QPSK调制方式的I-channel信号,图3.74为OFDM子载波采用QPSK调制方式的Q-channel信号。从图中验证了调制的正确性,由于QPSK是在M=4时的调相技术,它规定了4种载波相位,分别为45°、135°、225°、315°。由图3.75可以看出,随着信噪比的增加,误码率接近于零。6.思考题OFDM子载波采用QPSK调制方式的I-channel信号与OFDM子载波采用QPSK调制方式的Q-channel信号有什么不同?是如何相互作用的?
图3.73OFDM子载波采用QPSK调制方式的同相、正交信道信号
图3.74OFDM子载波采用QPSK调制方式的解调相位
图3.75OFDM子载波采用QPSK调制方式的仿真误码率
1.实验目的
在基带传输中一个很重要的问题是码间串扰及误码率的计算,基带传输系统的总误码率为:若已知这两个条件就可以直接计算出该系统的误码率。但通常噪声的方差是不容易知道的。为了计算误码率就需要根据系统的框图按照误码率的原始定义Pe=传输的错误码元数/总码元数。
为此,需要计算错误的码元个数,在接收端采用匹配滤波或相关接收时可以对错误码元进行计数。回顾一下最佳接收理论中的极大似然比法则,则:在判决时加入一个计数器使得问题有望解决。本例根据以上理论分析采用一个理想化的模型对基带系统的误码率进行仿真。
3.仿真思路将数字基带传输系统中码型变换部分抽去,将基带系统的框图建模如下图所示。其中,信道信号采用均匀随机数,两个高斯随机数发生器给信道引入了加性噪声,将接收滤波器与抽样判决合并成检测器,然后通过对比输入信源记下差错的个数,最后计算误码率。用Monte Carlo仿真估计Pe,并且画出Pe与SNR的对比图。先仿真产生随机变量r0和r1,它们构成了检测器的输入。首先产生一个等概率出现并且互为统计独立的二进制0和1的序列。
为了实现这一点,使用一个产生范围在(0,1)内的均匀随机数发生器,如果产生的随机数在(0,0.5)以内,二进制源的输出就是0,否则就是1。利用两个高斯噪声发生器产生加性噪声分量n0和n1,它们的均值是0,方差是(E为信号能量)。为了方便,可以将信号能量归一化到1而改变方差。
4.程序代码1)主程序SNRindB1=0:1:12;SNRindB2=0:0.1:12;for i=1:length(SNRindB1),%根据仿真模型计算误码率smld_err_prb(i)=smldPe(SNRindB1(i));end;%根据理论公式计算误码率for i=1:length(SNRindB2),SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(SNR));end;semilogy(SNRindB1,smld_err_prb,'*');%绘制仿真模型的误码率holdsemilogy(SNRindB2,theo_err_prb);%绘制根据理论计算的误码率legend(‘仿真值’,‘理论值’);xlabel('SNR');ylabel('Pe');2)仿真模型的误码率计算函数function [p]=smldPe(snr_in_dB)E=1;%能量归一化SNR=exp(snr_in_dB*log(10)/10);%将dB值转换为实际比值sgma=E/sqrt(2*SNR);%噪声方差N=10000;%产生二进制信源for i=1:N,temp=rand;%生成(0,1)间均匀分布的10000个值if (temp<0.5),dsource(i)=0;%小于0.5的值取为0elsedsource(i)=1;%大于0.5的值取为1endend;%检测器及误码率计算numoferr=0;%将错误计数器置0for i=1:N,%匹配滤波输出的值,即监测器的输入值if (dsource(i)==0),r0=E+gngauss(sgma);r1=gngauss(sgma);%信源为0的情况elser0=gngauss(sgma);r1=E+gngauss(sgma);%信源为1的情况end;if (r0>r1),decis=0;%上支路输出大于下支路输出判决为0elsedecis=1;%下支路输出大于上支路输出判决为0end;if (decis~=dsource(i)),numoferr=numoferr+1;end;end;p=numoferr/N;%误码率计算3)高斯随机噪声函数function [gsrv1,gsrv2]=gngauss(m,sgma)if nargin == 0,m=0; sgma=1;%如果输入变量缺失,则均值为0,方差为1elseif nargin == 1,sgma=m; m=0;%如果输入变量只有一个,则均值为0,方差为输入值end;u=rand;z=sgma*(sqrt(2*log(1/(1-u))));%Rayleigh分布的计算u=rand ;gsrv1=m+z*cos(2*pi*u);gsrv2=m+z*sin(2*pi*u);4) Q函数function [y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));5.运行结果与分析右图为仿真得到的曲线:图3.78图3.78给出了在不同的信噪比SNR下,传输N=10000个比特时的仿真结果。可以看到仿真结果与理论值之间的一致性。注意到图中N=10000个数据比特的仿真能够可靠地估计出差错概率在Pe=0.001以下;换句话说,用N=10000个数据比特,在对Pe的可靠估计下应该至少有10个差错。此外,注意到仿真值和理论值在低信噪比下完全一致,而在高信噪比下一致性稍差,这是由于引入的高斯噪声在高信噪比下远大于E,对于本题程序给出的“择大判决”法干扰增强,从而使判决错误增多。
6.思考题
1.实验目的
下面以简单的(7,3)汉明码为例进行说明。以每3位信息比特作为一组进行编码,即输入编码器的信息位长度k=3,完成编码后的输出编码器的长度为n=7,显然监督位长度为(n−k)=4位,编码效率为η=k/n=3/7。1)编码方程设输入的信息码元位为:U=(U0,U1,U2) (3-76)输出的码组为:C=(C0,C1,C2,C3,C4,C5,C6) (3-77)输出码组中信息位为:C0=U0,C1=U1,C2=U2 (3-78)
2)监督方程组若将式(3-80)中后4位监督方程组改写为:(3-81)将上述线性方程改为矩阵形式为:(3-82)
3.仿真思路
Q=[1 1 1 1;0 1 1 1;1 1 0 1];G=[eye(k) Q];P=Q';H=[P eye(n-k)];msg=[1 1 1]%信息比特code=mod(msg*G,2)%进行编码%在信道传输中出现错误,任意取一个码字发生错误,在这里取第二位码字发生错误code(2)=~code(2);recd=code%接收信号syndrome=mod(recd*H',2);%接收端计算校正子%寻找错误位置find=0;for i=1:nif ~finderrvect=zeros(1,n);errvect(i)=1;search=mod(errvect*H',2);if search==syndromefind=1;index=i;%index指示错误码位置endendendcorrectedcode=recd;correctedcode(index)=mod(recd(index)+1,2)msg_decoded=correctedcode;%纠正错误msg_decoded=msg_decoded(1:3)%去除校验位5.运行结果与分析:
从仿真结果可以看到输入码组、编码后的码组、接收信号及纠错后的码组信息,并得到译码结果为msg_decoded=[1 1 1],与输入信息比特相同。因此在本例中,利用线性分组码就能得到正确的译码结果,同时可以初步看到(7,3)码能纠正一位随机错误。6.思考题
(2)汉明码是的线性分组码,其最小距离为3,且有一个很简单的奇偶校验矩阵。奇偶校验矩阵是的矩阵,除去全0序列外,用长为m的全部序列作为它的列。例如,对于m=3,有一个(7,4)的码,它的奇偶校验矩阵用规则形式表示是:据此有:根据以上理论求(15,11)汉明码的全部码字,并验证它的最小距离等于3。
1.实验目的
因此,这种编码器是一种有限状态机的结构,在其中的每一个时刻,输出序列不但与输入序列关,而且与编码器的状态有关,这个状态是由编码器的前(L−1)k0个输入决定的。下图给出了k0=2,n0=3和L=4的一种卷积码的方框图。
通常,用卷积码的生成序列来定义卷积码,记为g1,g2,…,gn。一旦给定了生成序列,卷积码就被唯一确定了。3.仿真思路当信息序列为1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1时,求上图所示的卷积编码器的输出。该信息序列的长度是17,它不是k0=2的倍数。因此,现在补一个额外的0就足够了,这样长度就为18。于是就有了下面的信息序列:1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0
现在,因为有:可得n0=3和L=4,因此输出序列的长度是:(18/2+4−1)*3=36为了确保编码器从全0状态开始,并且回到全0状态,要求在输入序列的起始和末尾都添加(L−1)k0个0。因此,上述序列就变为:0 0 0 0 00 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0利用函数cnv_encd.m,求得输出序列为:0 0 0 0 0 11 0 1 1 1 1 1 0 1 0 1 1 1 0 0 1 1 0 1 0 0 1 0 0 1 1 1 11 14.程序代码1)主程序k0=2;g=[0 0 1 0 1 0 0 1;0 0 0 0 0 0 0 1;1 0 0 0 0 0 0 1];input=[1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1];output=cnv_encd.m(g, k0,input);2)函数cnv_encd.mfunction output=cnv_encd(g,k0,input)% Check to see if extra zero-padding is necessary.if rem(length(input),k0) > 0input=[input,zeros(size(1:k0-rem(length(input),k0)))];endn=length(input)/k0;%判断g的大小if rem(size(g,2),k0) > 0error('Error, g is not of the right size.')end%确定l和n0l=size(g,2)/k0;n0=size(g,1);% add extra zerosu=[zeros(size(1:(l-1)*k0)),input,zeros(size(1:(l-1)*k0))];% Generate uu, a matrix whose columns are the contents of% conv. encoder at various clock cycles.u1=u(l*k0:-1:1);for i=1:n+l-2u1=[u1,u((i+l)*k0:-1:i*k0+1)];enduu=reshape(u1,l*k0,n+l-1);%确定输出output=reshape(rem(g*uu,2),1,n0*(l+n-1));5.运行结果与分析0 0 0 0 0 1 1 0 1 1 1 1 1 0 1 0 1 11 0 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 16.思考题reshape函数有什么作用?1.实验目的
下图为一个数字扩频通信系统的基本方框图。其中信道编码器、信道解码器、调制器和解调器是传统数字通信系统的基本构成单元。在扩频通信系统中除了这些单元外,还应用了两个相同的伪随机序列发生器,分别作用在发送端的调制器和接收端的解调器上。这两个序列发生器产生伪随机噪声(PN)二值序列,在调制端将传送信号在频域进行扩展,在解调端解扩该扩频发送信号。
目前最常用的是DS、FH及FH/DS系统。本例所做的仿真是关于DS系统在干扰条件下的误码率性能仿真,换句话说,即DS系统的抗干扰性能仿真。下图为DS系统的原理框图。
与基带传输系统的仿真类似,本题的仿真也是从实际的系统框图中抽象出一个仿真模型,然后进行Monte Carlo仿真。将仿真模型图与DS系统原理框图对比,可以发现仿真中抽去了调制解调部分,但并不影响所期望的对DS系统的抗干扰性能的仿真,反而使得仿真模型更加简化,仿真更加容易实现。仿真模型图中用一个均匀随机数发生器(RNG)产生某个二进制信息符号(±1)的序列。每个信息比特重复Lc次,相应于每个信息比特的PN码片数。所得的序列乘以由另一个均匀高RNG产生的PN序列c(n),这样信源序列成为了扩频序列。
将方差为的高斯白噪声和形式为的正弦干扰加到这个扩频序列上。解扩器完成与PN序列的互相关,并在构成每信息比特的Lc个信号样本上求和。将相加器的输出再送到检测器判决是否出错,差错计数器对检测器的输出错误进行计数,最后完成误码率的计算。选取3组不同幅度的正弦干扰进行仿真并对比无正弦干扰的情况,选取Lc=20。还有一点需要注意的是,每次仿真中需对信号幅值进行加权以满足仿真所需的SNR。
4.程序代码1)主程序:%参数设置,码片数、正弦干扰的幅度、正弦干扰的角频率Lc=20;A1=3;A2=6;A3=12;A4=0;w=1;%设置存在正弦干扰情况下的仿真的信噪比范围SNRindB=0:2:30;for i=1:length(SNRindB),%对3组不同幅值的正弦干扰计算误码率smld_err_prb1(i)=ds_smld(SNRindB(i),Lc,A1,w);smld_err_prb2(i)=ds_smld(SNRindB(i),Lc,A2,w);smld_err_prb3(i)=ds_smld(SNRindB(i),Lc,A3,w);end;%设置无正弦干扰情况下的仿真的信噪比范围SNRindB4=0:1:8;for i=1:length(SNRindB4),%计算无正弦干扰的误码率smld_err_prb4(i)=ds_smld(SNRindB4(i),Lc,A4,w1);end;%绘图指令semilogy(SNRindB,smld_err_prb1,'-*');hold onsemilogy(SNRindB,smld_err_prb2,'-*');semilogy(SNRindB,smld_err_prb3,'-*');semilogy(SNRindB4,smld_err_prb4,'-o');hold offxlabel('SNR(dB)');ylabel('Pe');title('DS系统误码率仿真');2) DS_smld程序function [p]=ds_smld(snr_in_dB, Lc, A, w)%计算信号的幅度加权值snr=10^(snr_in_dB/10);sgma=1;Eb=2*sgma^2*snr;E_chip=Eb/Lc;%Monte Carlo仿真次数N=10000;%错误计数器置0num_of_err=0;%生成信源for i=1:N,% Generate the next data bit.temp=rand;if (temp<0.5),data=-1;elsedata=1;end;%生成码片for j=1:Lc,repeated_data(j)=data;end;%生成PN序列for j=1:Lc,temp=rand;if (temp<0.5),pn_seq(j)=-1;elsepn_seq(j)=1;end;end;%对信源进行扩频trans_sig=sqrt(E_chip)*repeated_data.*pn_seq;%高斯白噪声noise=sgma*randn(1,Lc);%正弦干扰n=(i-1)*Lc+1:i*Lc;interference=A*sin(w*n);%信号加噪得到接收端信号rec_sig=trans_sig+noise+interference;%解扩temp=rec_sig.*pn_seq;decision_variable=sum(temp);%检测误码if (decision_variable<0),decision=-1;elsedecision=1;end;%计数器在检测器检到错误时加1if (decision~=data),num_of_err=num_of_err+1;end;end;%误码率计算p=num_of_err/N;选取3组不同幅度的正弦干扰进行仿真并对比无正弦干扰的情况,选取Lc=20。还有一点需要注意的是,每次仿真中需对信号幅值进行加权以满足仿真所需的SNR。5.运行结果与分析下图为DS系统误码率的仿真曲线:
从上图中可以看到,在存在正弦干扰的情况下,达到所能接受的误码率不要太高的信噪比,与没有正弦干扰的情况相比,差别不大。因此,DS系统对加性正弦干扰有一定的抑制作用。在没有正弦干扰的情况下,较小的信噪比即可达到理想的误码率,但仍然存在一定的干扰,这部分干扰就是高斯白噪声造成的。6.思考题
1.实验目的
的方框图。图3.86说明了一个FH信号的示意图。图3.85 FH扩频系统的方框图
图3.86一个FH信号的例子在接收端有一个完全相同的PN序列发生器,它是与接收信号同步的,用来控制频率合成器的输出。通过频率合成器的输出与接收信号混频,然后由发射端引入的伪随机频率在解调中被移去。这样即可以利用FSK解调出最后所得信号。
现在考虑一个FH系统,其中用二进制FSK传输数字信息。频率跳变是每比特跳一次。解调和检测是非相干的。在AWGN道上,这样的系统的差错概率是:每比特能量可以表示为Eb=PsTb=Ps/R,其中Ps是平均信号功率,R是比特率。有其中是宽带干扰的平均功率,W为可用的信道带宽。因此,假设就能将SNR表示为:式中,W/R是处理增益;是FH扩频信号的干扰冗余度。
假设部分频带干扰来自某一干扰台,干扰台挑选a,以使其对通信系统的效果是最佳的。在采用二进制FSK调制和非相干检测的未编码慢跳频系统中,传输频率在频带W内选成了均匀概率的。这样,接收信号将以概率a被干扰,而以(1-a)不被干扰。当被干扰时,差错概率是而当不被干扰时,信号检测假定是无差错的,其中因此,平均差错概率是:干扰台的最好a的取值为:
对于最坏情况下的部分频带干扰,相应的差错概率是:3.仿真思路通过Monte Garlo仿真,说明一个使用二进制FSK并受到最坏部分频带干扰破坏的FH数字通信系统的性能。仿真系统的方框图如图3.87所示。用均匀随机数发生器(RNG)产生某个二进制信息序列,它作为FSK调制器的输入,FSK调制器的输出受到概率a的加性高斯噪声亏损,0<a≤1。用第二
个均匀RNG来决定这个加性高斯噪声何时亏损信号以及何时不亏损信号。在有噪声时,假定传输为0的情况下,检测器的输入是:式中;φ是信道相移;n1c、n1s、n2c和n2s代表加性噪声分量。在没有噪声时有:所以在检测器中没有差错发生。每个噪声分量的方差是为简单起见,置φ = 0并将J0归一化到1,那么,所以在部分频带干扰存在的情况下
图3.87 Monte Garlo仿真:部分频带干扰下的二进制FSK系统的模型
4.程序代码1)主程序rho_b1=0:5:35;%rho每比特能量(dB),用于计算仿真误码率rho_b2=0:0.1:35;%rho每比特能量(dB),用于计算理论误码率For i=1:length(rho_b1),smld_err_prb(i)=ss_pe96(rho_b1(i));%计算仿真误码率end;For i=1:length(rho_b2),temp=10^(rho_b2(i)/10);%dB值与数值转换if (temp>2)theo_err_rate(i)=1/(exp(1)*temp);%当rho数值>2时的理论误码率elsetheo_err_rate(i)=(1/2)*exp(-temp/2);%当rho数值≤2时的理论误码率end;end;semilogy(rho_b1,smld_err_prb,'*');%画仿真误码率图hold onsemilogy(rho_b2,theo_err_rate,‘-’);%画理论误码率图2)仿真模型的误码率计算函数function[p]=ss_pe96(rho_in_dB)%计算仿真误码率函数rho=10^(rho_in_dB/10);%dB值与数值转换Eb=rho;%每比特能量If (rho>2),%计算当rho>2时ɑalpha=2/rho;elsealpha=1;%计算当rho<2时ɑend;sgma=sqrt(1/(2*alpha));%噪声方差N=10000;%传输比特数for i=1:N,%生成信号序列temp=rand;if (temp<0.5)data(i)=1;elsedata(i)=0;end;end;for i=1:N,%生成接受信号if (data(i)==0),rlc(i)=sqrt(Eb);rls(i)=0;r2c(i)=0;r2s(i)=0;elserlc(i)=0;rls(i)=0;r2c(i)=sqrt(Eb);r2s(i)=0;end;if (rand<alpha),%依据干扰概率给接受信号添加噪声rlc(i)=rlc(i)+gngauss(sgma);rls(i)=rls(i)+gngauss(sgma);r2c(i)=r2c(i)+gngauss(sgma);r2s(i)=r2s(i)+gngauss(sgma);end;endnum_of_err=0;fori=1:N,%检测并计算误码个数r1=rlc(i)^2+rls(i)^2;%检测器的第一输入变量r2=r2c(i)^2+r2s(i)^2;%检测器的第二输入变量if(r1>r2),decis=0;elsedecis=1;end;if (decis~=data(i)),num_of_err= num_of_err+1;end;end;p= num_of_err/N;3)高斯随机噪声函数function[gsrv1,gsrv2]=gngauss(m,sgma)Ifnargin==0,m=0;sgma=1;%如果输入变量缺失,则均值为0,方差为1elseifnargin==1,sgma=m;m=0;%如果输入变量只有一个,则均值为0,方差为输入值end;u=rand;z=sgma*(sqrt(2*log(1/(1-u))));%瑞利分布计算u=rand;gsrv1=m+z*cos(2*pi*u);%同相分量gsrv2=m+z*sin(2*pi*u);%正交分量5.运行结果与分析由仿真结果图3.88可知,在给出在最坏部分频带干扰下,其差错率随成反比减小。图3.88 Monte Garlo仿真:6.思考题
本章小结本章通过21个例子,以信号传递过程为顺序,讲述了通信原理课程的核心知识脉络,并讲述了MATLAB在通信过程各个方面仿真的实例和方法。本章是进一步学习移动通信和通信理论仿真及研究的基础。
Thanks书山有路勤为径,学海无涯苦作舟。好好学习,天天向上
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}