水声通信系统的建模和仿真-正交幅度调制(OFDM)-MATLAB
作者:互联网
OFDM
前言
通过前几次的通信过程仿真,学会使程序有很好的通用性,例如只要改定义的参数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
三、总结
几种常见的调制方式大致结束了。下面要从调制信号的高阶累积量出发,来识别待处理的盲信号的调制方式;从参数估计的一些方法,来估计待处理信号的一些参数,例如载波频率和符号速率等。
标签:仿真,OFDM,%%,reshape,建模,stem,MATLAB,信号,调制 来源: https://blog.csdn.net/QWER306306/article/details/121779964