通过前几次的通信过程仿真,学会使程序有很好的通用性,例如只要改定义的参数L、M、N等即可完成,这样可以更快地对比不同参数下的仿真效果。还更了解了一些自带函数的涵义,让程序可以简单易懂一些。
整个调制过程如下,其中调制方式可以自己挑选,例如QAM,PSK,DPSK,PAM调制方式,这些调制方式在前几章都有学习。这里采用的信道也是之前仿真过的多径衰落信道,此模型采用的二径。
代码如下:
%% OFDM过程 clear all;clc;close all; N=64; %%每行符号数 L=4; %%L行并行运输 M=16; %%多进制 t0=0;t1=8; %%信道的前两径时延 ESNO=200; %%单位dBD snr=10.^(ESNO/10); %%转换成单位线性值 x=randi([0 M-1],N,L); %%待调制信号 x1=qammod(x,M); %%结果PAM,PSK,DSPK,QAM均可 x2=ifft(x1); %%IFFT代替载波的实现 x3=[x2(N*(3/4)+1:end,:);x2]; %%补CP x4=reshape(x3,1,L*N*(5/4)); %%并串转换 s_pow=norm(x4).^2/(L*N*(5/4)); %%这里是符号的平均功率,而不是每一个采样点 sigma=sqrt(s_pow/(2*snr)); %%根据线性值的信噪比和信号功率求出噪声功率 h=sigma*(randn(1,2)); %%这里假设的是二径衰落信道 y1=[zeros(1,t0) x4(1:end-t0)*h(1)]+[zeros(1,t1) x4(1:end-t1)*h(2)]; y2=reshape(y1,N*(5/4),L); %%串并转换 y3=y2([N*(1/4)+1:end],:); %%去CP y4=fft(y3); %%FFT还原 %% 信道均衡 h1=[h(1) zeros(1,7) h(2)]; H1=fft(h1,N).'; y5=y4./H1; z=qamdemod(y5,M); %% 结果分析 xx12=reshape(x',L*N,1); x12=reshape(x1',L*N,1); y12=reshape(y5',L*N,1); z12=reshape(z',L*N,1); figure; subplot(311); stem(abs(x12),'fill');hold on;stem(abs(y12),'-rs');title('幅度验证'); legend('已调信号x1','接收处理信号y5'); subplot(312); stem(angle(x12),'fill');hold on;stem(angle(y12),'-rs');title('相位验证'); legend('已调信号x1','接收处理信号y5'); subplot(313); stem(abs(xx12),'fill');hold on;stem(abs(z12),'-rs');title('调制验证'); legend('调制信号x','解调信号z');
由于例如QAM这类仿真不仅需要幅度验证,还需相位验证,所以在结果分析中给出了这两种比较。也给出了待调制信号和解调信号的验证关系。当然,还可以比较M相同时,不同信噪比下的误码率,[如之前的做法相似]
8QAM:
8DPSK:
8ASK:
这里说明很容易出现相位完全对称情况,那并不是无码,而是因为-pi和+pi
几种常见的调制方式大致结束了。下面要从调制信号的高阶累积量出发,来识别待处理的盲信号的调制方式;从参数估计的一些方法,来估计待处理信号的一些参数,例如载波频率和符号速率等。