%本程序用于OFDM基本原理的仿真,数据采用QPSK调制 clear all; close all; clc; SubCarryN=128;%子载波数 fftLen=128;%FFT长度为128 SymbN=6;%一帧中OFDM符号个数 GuardLen=32;%保护时隙的长度 SNR=50;%信噪比取值,dB为单位 SignalLen=SubCarryN*SymbN*2;%输入比特序列长度=子载波数x每载波符号数x每符号比特数 Signal=round(rand(1,SignalLen));%输出待调制的二进制比特流 for i=1:SubCarryN for j=1:SymbN*2 ParaBitSig(i,j)=Signal(i*j);%串并转换为行数SubCarryN,列数2*SymbN end end %进行QPSK数据调制,将数据分为两个通道 for j=1:SymbN ich(:,j)=ParaBitSig(:,2*j-1);%同相分量 qch(:,j)=ParaBitSig(:,2*j);%正交分量 end kmod=1./sqrt(2); ich0=ich.*2-1; qch0=qch.*2-1; ich1=ich0.*kmod; qch1=qch0.*kmod; x=ich1+qch1.*sqrt(-1);%产生复信号 y=ifft(x);%通过傅里叶反变换,将频域数据转换为时域数据 ich2=real(y);%I信道取变换后的实部 qch2=imag(y);%Q信道取变换后的虚部 %插入保护间隔 ich3=[ich2(fftLen-GuardLen+1:fftLen,:);ich2]; qch3=[qch2(fftLen-GuardLen+1:fftLen,:);qch2]; %并串转换 ich4=reshape(ich3,1,(fftLen+GuardLen)*SymbN); qch4=reshape(qch3,1,(fftLen+GuardLen)*SymbN); %形成复数发射数据 TrData=ich4+qch4.*sqrt(-1); %接收机部分 %加入高斯白噪声 ReData=awgn(TrData,SNR,'measured'); %接收端 %移去保护时隙 idata=real(ReData); qdata=imag(ReData); idata1=reshape(idata,fftLen+GuardLen,SymbN); qdata1=reshape(qdata,fftLen+GuardLen,SymbN); idata2=idata1(GuardLen+1:GuardLen+fftLen,:); qdata2=qdata1(GuardLen+1:GuardLen+fftLen,:); %FFT Rex=idata2+qdata2*sqrt(-1); ry=fft(Rex); %QPSK解调 ReIChan=real(ry); ReQChan=imag(ry); ReIChan1=ReIChan/kmod; ReQChan1=ReQChan/kmod; ReIChan0=(ReIChan1+1)/2; ReQChan0=(ReQChan1+1)/2; %QPSK逆映射 for j=1:SymbN RePara(:,2*j-1)=ReIChan0(:,j); RePara(:,2*j)=ReQChan0(:,j); end ReSig=reshape(RePara',1,SubCarryN*SymbN*2); %符号抽样判决 Resig=ReSig>0.5; %画图
2014a
完整代码或代写加1564658423