实验三基于DFT的信道估计实验目的1.熟悉OFDM传输系统中基于DFT信道估计的整个设计流程,加深对导频信道的线性插值、DFT算法的理解,学习掌握DFT信道估计方法的原理。2.熟悉Matlab应用软件中用到的相关函数。二、 实验内容1、以前缀CP、2抽头信道、AWGN噪声设计的DFT算法的OFDM传输系统% channel_estimation.m%采用线性插值的LS/DFT信道估计clear all,close all,clfNfft=32;%子载波个数或传输数据个数32个%前缀个数4个Ng =Nfft/8;Nofdm=Nft+Ng,%一个OFDM符号36个数据Nsym =100;Nps= 4; %导频间隔Np=Nfft/Nps,%每个OFDM符号的导频数8个Nbps =4;M=2^Nbps;%每个调制符号的比特数modobject=modem.qammod(M,M,'SymbolOrder,gray)demod_object =modem.qamdemod(M,M,'SymbolOrder','gray');Es=1:%信号能量A=sqrt(3/2/(M-1)*Es);%QAM归一化因子SNR =30,sq2= sqrt(2);MSE= zeros(1,6);nose = 0,for nsym =1:Nsymrand(seed',1);randn('seed', 1);Xp=2*(randn(1,Np)>0)-1;%生成导频序列为1或-1的8个数值%msgint=randint(1,Nfft-Np,M);%比特生成msgint = randi([0 15],1,Nfft-Np),1/5
1 / 5 实验三 基于 DFT 的信道估计 一、 实验目的 1.熟悉 OFDM 传输系统中基于 DFT 信道估计的整个设计流程,加深对导频信道的线性插值、 DFT 算法的理解,学习掌握 DFT 信道估计方法的原理。 2.熟悉 Matlab 应用软件中用到的相关函数。 二、 实验内容 1、以前缀 CP、2 抽头信道、AWGN 噪声设计的 DFT 算法的 OFDM 传输系统 % channel_estimation.m % 采用线性插值的 LS/DFT 信道估计 clear all, close all, clf Nfft =32; % 子载波个数或传输数据个数 32 个 Ng =Nfft/8; % 前缀个数 4 个 Nofdm = Nfft+Ng; %一个 OFDM 符号 36 个数据 Nsym = 100; Nps= 4; %导频间隔 Np= Nfft/Nps; %每个 OFDM 符号的导频数 8 个 Nbps =4; M=2^Nbps; %每个调制符号的比特数 mod_object = modem.qammod('M',M,'SymbolOrder','gray'); demod_object = modem.qamdemod('M',M,'SymbolOrder','gray'); Es= 1; %信号能量 A = sqrt(3/2/(M-1)*Es); %QAM 归一化因子 SNR = 30; sq2= sqrt(2); MSE = zeros(1,6); nose = 0; for nsym =1:Nsym rand('seed',1); randn('seed',1); Xp = 2*(randn(1,Np)>0)-1; %生成导频序列 为 1 或-1 的 8 个数值 %msgint = randint(1,Nfft-Np,M); %比特生成 msgint = randi([0 15],1,Nfft-Np);
Data=A*modulate(mod_object,msgint);%24个数据ip=0,pilot_loc =zeros(1,Np+1);X=zeros1,Nfft);%X数据个数Nfft32个for k=1:Nftifmod(k,Nps)--1%Nps导频间隔4X(k)=Xp(floor(k/Nps)+1);%floor(x)返回小于或等于x的整数ip =ip+1;pilot_loc(ip)=k,elseX(k) = Data(k-ip);endend;%IFFTx = ifft(X,Nfft);xt =[x(Nfft-Ng+1:Nfft) x); % 加 CP4+32h=[(randn+1i*randn)(randn+1i*randn)/2];%产生一个2抽头信道H= ft(h,Nfft),channel length= length(h);H_power_dB=10*log10(abs(H.*conj(H));%频域信道功率y_channel=conv(xt,h);%时域发送信号与信道的卷积yt=awgn(y_channel,SNR,measured’);%加入噪声%以下为接收方的对应处理y=yt(Ng+1:Nofdm);%去CP36-4=32卷积后yt37个数据Y=fft(y),%FFT%H_est-LS_CE(Y,Xp,pilot_loc,Nfft,Nps,linear');LS_est=zeros(1,Np+1);tt=1:Np,LS_est(tt)=Y(pilot_loc(tt)./Xp(tt);%LS信道估计8%H_LS=interpolate(LS_est,pilotloc,Nft,method)slope=(LS_est(end)-LS_est(end-1)/(pilot_loc(end-1)-pilot_loc(end-2),LS_est(Np+1)=LS_est(Np)+slope*(Nfft-pilot_loc(end-1); % LS_est 9pilot_loc(Np+1)= Nft;H_est=interpl(pilot_loc,LS_est,1:Nfft),2/5
2 / 5 Data = A*modulate(mod_object,msgint); % 24 个数据 ip = 0; pilot_loc =zeros(1,Np+1); X = zeros(1,Nfft); % X 数据个数 Nfft 32 个 for k=1: Nfft if mod(k,Nps)==1 %Nps 导频间隔 4 X(k) = Xp(floor(k/Nps)+1); % floor(x)返回小于或等于 x 的整数 ip =ip+1; pilot_loc(ip) =k; else X(k) = Data(k-ip); end end x = ifft(X,Nfft); %IFFT xt = [x(Nfft-Ng+1:Nfft) x]; % 加 CP 4+32 h= [(randn+1i*randn) (randn+1i*randn)/2]; %产生一个 2 抽头信道 H= fft(h,Nfft); channel_length= length(h); H_power_dB= 10*log10(abs(H.*conj(H))); %频域信道功率 y_channel= conv(xt,h); %时域发送信号与信道的卷积 yt= awgn(y_channel, SNR, 'measured'); %加入噪声 % 以下为接收方的对应处理 y= yt(Ng+1:Nofdm); %去 CP 36-4=32 卷积后 yt 37 个数据 Y=fft(y); %FFT %H_est=LS_CE(Y,Xp,pilot_loc,Nfft,Nps,'linear'); LS_est=zeros(1,Np+1); tt=1:Np; LS_est(tt)=Y(pilot_loc(tt))./Xp(tt); %LS 信道估计 8 %H_LS=interpolate(LS_est,pilot_loc,Nfft,method); slope= (LS_est(end)-LS_est(end-1))/(pilot_loc(end-1)-pilot_loc(end-2)); LS_est(Np+1)= LS_est(Np)+slope*(Nfft-pilot_loc(end-1)); % LS_est 9 pilot_loc(Np+1)= Nfft; H_est= interp1(pilot_loc,LS_est,1:Nfft);
method='LS-linear,methodl='LS-linear,DFT;H_est_power_dB=10*log10(abs(H_est.*conj(H_est)));h_est= ifft(H_est);h_DFT=h_est(1:channel_length);HDFT=fft(hDFT,Nfft);%channelestimationbasedonDFTH_DFT_power_dB=10*log10(abs(H_DFT*conj(H_DFT);if nsym-1subplot(119+2)plot(H_power_dB,b,linewidth',1)grid on, hold onplot(H_est_power_dB,'r:+,Markersize',4,linewidth,1),axis([0 32 -6 10])xlabel(Subcarrier Index)ylabel(Power[dB))legend(TrueChannel',method,4)set(gca,'fontsize,9)subplot(120+2)plot(H_power_dB,'b',linewidth',1)grid on, hold onplot(H_DFT_power_dB,'r:+,Markersize,4,linewidth,1)axis([0 32 -6 10])xlabel(Subcarrier Index)ylabel(Power[dB])legend(True Channel',method1,4)set(gca,'fontsize,9)end%Y_eq=Y./H_est,%XestimationY_eq=Y./H_DFT,if nsym>=Nsym-10figure(2), subplot(221)plot(Y,,Markersize',5)axis([-1.5 1.5 -1.5 1.5])xlabel(信道补偿前)3/5
3 / 5 method= 'LS-linear'; method1= 'LS-linear,DFT'; H_est_power_dB= 10*log10(abs(H_est.*conj(H_est))); h_est= ifft(H_est); h_DFT= h_est(1:channel_length); H_DFT= fft(h_DFT,Nfft); % channel estimation based on DFT H_DFT_power_dB= 10*log10(abs(H_DFT.*conj(H_DFT))); if nsym==1 subplot(119+2) plot(H_power_dB,'b','linewidth',1) grid on, hold on plot(H_est_power_dB,'r:+','Markersize',4,'linewidth',1); axis([0 32 -6 10]) xlabel('Subcarrier Index') ylabel('Power[dB]') legend('True Channel',method,4) set(gca,'fontsize',9) subplot(120+2) plot(H_power_dB,'b','linewidth',1) grid on, hold on plot(H_DFT_power_dB,'r:+','Markersize',4,'linewidth',1) axis([0 32 -6 10]) xlabel('Subcarrier Index') ylabel('Power[dB]') legend('True Channel',method1,4) set(gca,'fontsize',9) end %Y_eq= Y./H_est; % X estimation Y_eq= Y./H_DFT; if nsym>=Nsym-10 figure(2), subplot(221) plot(Y,'.','Markersize',5) axis([-1.5 1.5 -1.5 1.5]) xlabel('信道补偿前')
set(gca,'fontsize,9)hold onsubplot(222)plot(Y_eq,,Markersize',5)axis([-1.5 1.5 -1.5 1.5])xlabel(信道补偿后)set(gca,'fontsize,9)endip=0,Data_extracted=zeros(1,Nfft-Np),for k=1:Nfftif mod(k,Nps)=1ip=ip+1;elseData_extracted(k-ip)-Y_eq(k),endendmsg_detected=demodulate(demod_object, Data_extracted/A);nose=nose+sum(msg_detected~=msgint);%24个数据,24*100中多少个错误BER=nose/Nfft/(length(msgint);%误码率end2、运行结果nFRTESOXMOR·O口国口TrueChant11n图1不同子载波频率点上的功率数据曲线4/5
4 / 5 set(gca,'fontsize',9) hold on subplot(222) plot(Y_eq,'.','Markersize',5) axis([-1.5 1.5 -1.5 1.5]) xlabel('信道补偿后') set(gca,'fontsize',9) end ip=0; Data_extracted=zeros(1,Nfft-Np); for k=1:Nfft if mod(k,Nps)==1 ip=ip+1; else Data_extracted(k-ip)=Y_eq(k); end end msg_detected= demodulate(demod_object, Data_extracted/A); nose= nose+sum(msg_detected~=msgint); %24 个数据,24*100 中多少个错误 BER=nose/Nfft/(length(msgint)); % 误码率 end 2、运行结果 图 1 不同子载波频率点上的功率数据曲线
OC编绿器D:AMy DocTDLEANATLAY口口区Fieur许看韩入工具()卓面圆口帮助OOOR.*I0.5050:50信道补偿前信道补信后图2信道补偿前和补偿后的接收调制数据C工作区rfaindees0-31628##E0+chanellength2DataIx24complexdoub2三Data_ontructed1x24comp2exdub2.linesS0000.dunod_objectIxlaadengundenadendBEsm104tp-0:[0.9800-1.1918,0 2190+0.683200:n108Data_exK1x32cp2exdob24106tor k-AIFT[0.9353115921,0.2384+0.7054HDPT107-1x32conplaxdoub2二DPT_power_de1x32do0b2109-1x322oepl4xdoub24Ehest109-aHestIx32conplirdauh21101x32domhleHest power_dBm1-1x32400b2eHpower_d112endipRHk消113His_est[0.73950.48591,13224-0.5250nOes114-m16BER=n115mothodES-linear16-ondmethodlLS-linesr,DT117obie图3程序代码所用方法的BER(误码率)5/5
5 / 5 图 2 信道补偿前和补偿后的接收调制数据 图 3 程序代码所用方法的 BER(误码率)