该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
clear;
clc;
SNR=10; % 信噪比
fl=128; % 设置FFT长度
Ns=6; %设置一个祯结构中OFDM信号的个数
para=128;%设置并行传输的子载波个数
sr=250000; %符号速率
br=sr.*2;% 每个子载波的比特率
gl=32; %保护时隙的长度
SNRdB=0:0.5:3;%信噪比范围
declen=40;%译码深度
SNRnum=length(SNRdB);%信噪比数目
iter=10;%迭代次数
for i=1:SNRnum
for j=1:iter
%----------------卷积码开始----------------
trel=poly2trellis(9,[561 753]);%卷积码(2,1,9)网格图,约束条件9
siglen=100000;
msg=randint(siglen,1);
encode=convenc(msg,trel,0);%从0状态开始卷积码
%----------------卷积码结束-------------------
Signal=encode;
length(Signal)
%Signal=rand(1,para*Ns*2)>0.5;%产生0,1 随即序列,符号数为para*Ns*2
for i=1:para
for j=1:Ns*4
SigPara(i,j)=Signal(i*j);%串并变换
end
end
length(SigPara)
%QPSK调制,将数据分为两个通道
for j=1:Ns*2
ich(:,j)=SigPara(:,2*j-1);
qch(:,j)=SigPara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1); %频域数据变时域
y=ifft(x);
ich2=real(y); %I信道取变换后的实部
qch2=imag(y); %信道取变换后的虚部
%插入保护间隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%并串变换
ich4=reshape(ich3,1,(fl+gl)*Ns*2);
qch4=reshape(qch3,1,(fl+gl)*Ns*2);
%形成复数发射数据
TrData=ich4+qch4.*sqrt(-1);
length(TrData)
%接收机
%加入高斯白噪声
ReData=awgn(TrData,SNR,'measured');
%ReData=TrData;
%接收端
%移去保护间隔
idata=real(ReData);
qdata=imag(ReData);
idata1=reshape(idata,fl+gl,Ns*2);
qdata1=reshape(qdata,fl+gl,Ns*2);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%FFT
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReIChan=real(ry);
ReQChan=imag(ry);
ReIchan=ReIChan/kmod;
ReQchan=ReQChan/kmod;
%QPSK逆映射
for j=1:Ns*2
RePara(:,2*j-1)=ReIChan(:,j);
RePara(:,2*j)=ReQChan(:,j);
end
ReSig=reshape(RePara,1,para*Ns*4);
length(ReSig)
%符号抽样判决
Resig=ReSig>0.5;
length(Resig)
parti=0:.15:.9;%设置量化等级划分
codebk=0:7;%设输入等级
[x,qcode]=quantiz(Resig,parti,codebk);%量化,准备维特比判决
decode=vitdec(qcode',trel,declen,'cont','soft',3);%维特比译码,量化级数=2^3
length(decode)
length(msg)
[errorbit,errorrate(j)]=biterr(decode(declen+1:end),msg(1:end-declen));%计算本次的信噪比【误码 误码率】=比较(比特数与总比特数)
end
BER(i)=sum(errorrate)/iter;%求平均信噪比
end
subplot(3,1,1),stem(ReSig(1:100)),grid minor;
title('resignal');
xlabel('x'),ylabel('y');
subplot(3,1,2),stem(Signal(1:100)),grid;
title('signal')
subplot(3,1,3),stem(Resig(1:100)),grid;
title('signal')