1 BER性能比较范本.doc

上传人:创****公 文档编号:1481347 上传时间:2019-03-03 格式:DOC 页数:35 大小:228KB
下载 相关 举报
1 BER性能比较范本.doc_第1页
第1页 / 共35页
1 BER性能比较范本.doc_第2页
第2页 / 共35页
1 BER性能比较范本.doc_第3页
第3页 / 共35页
1 BER性能比较范本.doc_第4页
第4页 / 共35页
1 BER性能比较范本.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、1 BER 性能比较:% %文件说明 %函数说明:这是一个比较完整的 OFDM 系统,我在发送端做了比较简单的 QPSK调制映射生成 OFDM 符号, % 经串并转换后插入导频 Pilot 和循环前缀 CP,再进行并串转换加噪声送入多径瑞利信道。 % 在接收端,先进行串并转换;然后去掉循环前缀,提取导频信息进行 LS 估计,最后经过并串 % 转换,QPSK 解码还原信息 % %参数说明 %:欲发送的二进制比特流 % clear all; clc; IFFT_bin_length=128; % IFFT 和 FFT 的点数 128 carrier_count=100; % 子载波个数 100 b

2、its_per_symbol=2; % 每符号上的比特数 2 symbols_per_carrier=12; % 每桢的 OFDM 符号数 12 LI=7 ; %导频之间的间隔 Np=ceil(carrier_count/LI)+1; %导频数加 1 使最后一列也是导频,即有 16个导频子信道 N_number=carrier_count*symbols_per_carrier*bits_per_symbol; %总共发送的信息比特数 % 100*12*2=2400 carriers=1:carrier_count+Np; GI=8; % 保护间隔长度 N_snr=40; % 每比特信息上的信

3、噪比 snr=8; %信噪比间隔 % %发送端变量初始化 X=zeros(1,N_number); %:欲发送的二进制比特流 X1=; %原始的二进制数据流每 2 个一组进行 QPSK 映射编码得到 X1 X2=; %X1 串并转换后得到 X2 X3=; %X2 插入导频后得到 X3 X4=; %IFFT 变换后得到 X4 X5=; X6=; %加入循环前缀后得到 X6 X7=; %并串转换后得到 X7 %接收端变量初始化 Y1=; %X1 的估计值 Y2=; %提取数据信道上的信息 Y3=; Y4=; %Y5 经 FFT 变换后得到 Y4 Y5=; %Y6 去掉循环前缀后得到 Y5 Y6=;

4、 %Y7 并串转换后得到 Y6 Y7=; %接收端从信道上得到的信号,即信道输出 Y7 XX=zeros(1,N_number); dif_bit=zeros(1,N_number); dif_bit1=zeros(1,N_number); dif_bit2=zeros(1,N_number); dif_bit3=zeros(1,N_number); X=randint(1,N_number); % %QPSK 调制:(1 1)-pi/4;(0 1)-3*pi/4;(0 0)-3*pi/4;(1,0)-pi/4; % s=(X.*2-1)/sqrt(2); sreal=s(1:2:N_numb

5、er); % 将原信息比特流每两个为一组编码 simage=s(2:2:N_number); %前后比特分别编码为 OFDM 符号的实,虚部 X1=sreal+j.*simage ; % 进行 QPSK 映射编码(复数形式) % %产生随机导频信号 % train_sym=randint(1,2*symbols_per_carrier); t=(train_sym.*2-1)/sqrt(2); % 将导频序列也进行 QPSK 调制映射 treal=t(1:2:2*symbols_per_carrier); timage=t(2:2:2*symbols_per_carrier); trainin

6、g_symbols1=treal+j.*timage; % 构成两组相同的 training_symbols2=training_symbols1. ; % 训练序列用于信道估计 training_symbols=repmat(training_symbols2,1,Np); %将 training_symbols2 作为一个子矩阵,生成 12 行,Np=16 列大型矩阵 disp(training_symbols) % 显示训练序列的内容,共 16 列 pilot=1:(LI+1):(carrier_count+Np); %以 LI+1=8 为间隔,标注导频子载波,即每 8 个子载波,第 1

7、 个传导频,其余7 个传数据 if length(pilot)=Np pilot=pilot,carrier_count+Np; end % %串并转换 X2=reshape(X1,carrier_count,symbols_per_carrier).; % % %插入导频 % signal=1:carrier_count+Np; signal(pilot)=; X3(:,pilot)=training_symbols; % 在导频子载波上填入导频符号 X3(:,signal)=X2; %在数据子载波上填入数据 % %OFDM 调制 IFFT_modulation=zeros(symbols_

8、per_carrier,IFFT_bin_length); IFFT_modulation(:,carriers)=X3; X4=ifft(IFFT_modulation,IFFT_bin_length,2); % %加保护间隔(循环前缀) for k=1:symbols_per_carrier; for i=1:IFFT_bin_length; X6(k,i+GI)=X4(k,i); end for i=1:GI; X6(k,i)=X4(k,i+IFFT_bin_length-GI); % 加 CP:将每个符号最后的GI 位复制到最前端 end end % %并串转换 X7=reshape(

9、X6.,1,symbols_per_carrier*(IFFT_bin_length+GI); % %信道模型:带多普勒频移的瑞利衰落信道 fd=100; %多普勒频移 r=6; %多径数 a=0.12 0.3 0.4 0.5 0.7 0.8; %多径的衰落幅度 d=2 3 4 5 7 6; %各径的延迟 T=1; %系统采样周期 th=90 0 72 144 216 288*pi./180; % 各径的相移 h=zeros(1,carrier_count); hh=; for k=1:r h1=a(k)*exp(j*(2*pi*T*fd*d(k)/carrier_count);%各径的响应函

10、数 hh=hh,h1; end h(d+1)=hh; %6 条信道模拟多径 channel1=zeros(size(X7); channel1(1+d(1):length(X7)=hh(1)*X7(1:length(X7)-d(1); channel2=zeros(size(X7); channel2(1+d(2):length(X7)=hh(2)*X7(1:length(X7)-d(2); channel3=zeros(size(X7); channel3(1+d(3):length(X7)=hh(3)*X7(1:length(X7)-d(3); channel4=zeros(size(X7

11、); channel4(1+d(4):length(X7)=hh(4)*X7(1:length(X7)-d(4); channel5=zeros(size(X7); channel5(1+d(5):length(X7)=hh(5)*X7(1:length(X7)-d(5); channel6=zeros(size(X7); channel6(1+d(6):length(X7)=hh(6)*X7(1:length(X7)-d(6); % Tx_data=X7+channel1+channel2+channel3+channel4+channel5+channel6; %发送端送入信道的符号,即信

12、道输入 % %加高斯白噪声 Error_ber=; %误比特率 Error_ber1=; Error_ber2=; Error_ber3=; for snr_db=0:snr:N_snr %在每比特数据上加噪声 code_power=0; code_power=norm(Tx_data)2/(length(Tx_data); % 符号功率 bit_power=code_power/bits_per_symbol; %比特功率 noise_power=10*log10(bit_power/(10(snr_db/10);%噪声功率 noise=wgn(1,length(Tx_data),noise

13、_power,complex);%产生高斯白噪声 Y7=Tx_data+noise; % 接收端从信道上得到的信息,即信道输出 % %接收端 %串并变换 Y6=reshape(Y7,IFFT_bin_length+GI,symbols_per_carrier).; % %去保护间隔(CP) for k=1:symbols_per_carrier; for i=1:IFFT_bin_length; Y5(k,i)=Y6(k,i+GI); end end Y4=fft(Y5,IFFT_bin_length,2); Y3=Y4(:,carriers); % % LS 信道估计 H=; Y2=Y3(:

14、,signal); %提取数据信息 Rx_training_symbols=Y3(:,pilot); % 提取导频信道上的导频信息 Rx_training_symbols0=reshape(Rx_training_symbols,symbols_per_carrier*Np,1); training_symbol0=reshape(training_symbols,1,symbols_per_carrier*Np); training_symbol1=diag(training_symbol0); training_symbol2=inv(training_symbol1); Hls=trai

15、ning_symbol2*Rx_training_symbols0; % LS 估计量的公式 H=XY Hls1=reshape(Hls,symbols_per_carrier,Np); HLs=; HLs1=; % if ceil(carrier_count/LI)=carrier_count/LI for k=1:Np-1 % 依此得到各个信道上的响应估计量 HLs2=; for t=1:LI HLs1(:,1)=(Hls1(:,k+1)-Hls1(:,k)*(t-1)./LI+Hls1(:,k); HLs2=HLs2,HLs1; end HLs=HLs,HLs2; end else fo

16、r k=1:Np-2 HLs2=; for t=1:LI HLs1(:,1)=(Hls1(:,k+1)-Hls1(:,k)*(t-1)./LI+Hls1(:,k); HLs2=HLs2,HLs1; end HLs=HLs,HLs2; end HLs3=; for t=1:mod(carrier_count,LI) HLs1(:,1)=(Hls1(:,Np)-Hls1(:,Np-1)*(t-1)./LI+Hls1(:,Np-1); HLs3=HLs3,HLs1; end; HLs=HLs,HLs3; end % Y1=Y2./HLs; % Hls 是导频位置上获得的信道响应估计量,由于采用慢变信

17、道,所以将它也看作数据 % 子信道的响应估计量,用该估计量估计出实际接发送的信号 Y1,即 Y1 是 X1的估计值 % %并串变换 %通过采用估计和不采用对比体现采用信道估计可以提升 OFDM 系统的通信质量 YY=reshape(Y2.,1,N_number/bits_per_symbol); %不采用信道估计未解码符号 YY1=reshape(Y1.,1,N_number/bits_per_symbol); %采用 LS 估计的未解码符号 %QPSK 解码 %y_real=sign(real(YY); %通过符号函数进行解码 y_image=sign(imag(YY); y_re=y_re

18、al./sqrt(2); y_im=y_image./sqrt(2); %未进行估计的 y_real1=sign(real(YY1); y_image1=sign(imag(YY1); y_re1=y_real1./sqrt(2); y_im1=y_image1./sqrt(2); %进行了 LS 估计的 r00=; r01=; r10=; r11=; % 反映射还原信息比特流 for k=1:length(y_re); r01=r01,y_re(k),y_im(k); end; for k=1:length(y_re1); r11=r11,y_re1(k),y_im1(k); end; %

19、%计算在不同信噪比下的误比特率 % dif_bit=s-r01; %s 是发送端的输入比特流经编码后得到的符号 dif_bit1=s-r11; %r01 是未进行估计,解码得到的符号 %r11 是进行估计后,解码得到的符号 %它们进行比较判断误比特 ber_snr=0; %记录误比特数 for k=1:N_number; if dif_bit(k)=0; ber_snr=ber_snr+1; end end; ber_snr1=0; %记录误比特数 for k=1:N_number; if dif_bit1(k)=0; ber_snr1=ber_snr1+1; end end Error_be

20、r=Error_ber,ber_snr; Error_ber1=Error_ber1,ber_snr1; end BER=zeros(1,length(0:snr:N_snr); BER1=zeros(1,length(0:snr:N_snr); BER=Error_ber./N_number; %未进行估计的 BER BER1=Error_ber1./N_number; %进行 LS 估计的 BER % %作图比较未进行信道估计和进行 LS 估计后的误比特(BER)性能 % i=0:snr:N_snr; semilogy(i,BER,-*r); grid on; xlabel(SNR in

21、dB); ylabel(Bit Error Rate); hold on; semilogy(i,BER1,-ob); grid on; xlabel(SNR in dB); ylabel(Bit Error Rate); title(BER 性能比较); legend(No Channel Estimation,LS Channel Estimation);2 比较 LS 和 MMSE 的误符号性能(SER)% % Function: 比较 LS 和 MMSE 的误符号性能(SER) % Assumptions: 该 OFDM 系统有 64 个子载波,信道的时域响应函数 g(t)=delta

22、(t-0.5 Ts)+delta(t-3.5 Ts) % clc; clear all; %生成训练序列,即观测矩阵 %假设采用 BPSK 调制,符号为+1/-1 X=zeros(64,64); %欲发送的二进制比特流,观测矩阵 d=rand(64,1); % 生成一个 64*1 的随机数矩阵 for i=1:64 % BPSK 调制 if(d(i)=0.5) % 该随机数矩阵中的元素如果不小于 0.5 将此元素表示为+1 d(i)=+1; else d(i)=-1; % 该随机数矩阵中的元素如果小于 0.5 将此元素表示为-1 end end for i=1:64 X(i,i)=d(i);

23、%将 d(i)赋值给 X(i,i),即将发送信号作为观测矩阵的对角元素 end % %信道定义 tau=0.5 3.5; % 保护间隔 GI % 生成信道矩阵 G for k=1:64 s=0; for m=1:2 s=s+(exp(-j*pi*(1/64)*(k+63*tau(m) * ( sin(pi*tau(m) / sin(pi*(1/64)*(tau(m)-k); % 信道时域响应函数 s(t)抽样后的表示公式 end g(k)=s/sqrt(64); %归一化 end G=g; % g 转置为 64*1 列向量 G 以便进行 FFT 变换 H=fft(G); %将时域响应 G 转换

24、到频域 H XFG=X*H; n1=ones(64,1); n1=n1*0.000000000000000001i; %加入复高斯白噪声 noise=awgn(n1,6);%将复高斯白噪声加到信号向量上,每个样本上信噪比为6dB variance=var(noise); %计算噪声方差 N=fft(noise); %将噪声转换到频域 Y=XFG+N; %接收到的信号(频域表示) % % 计算 G 的自协方差矩阵 Rgg gg=zeros(64,64); for i=1:64 gg(i,i)=G(i); end gg_myu = sum(gg, 1)/64; mm=gg_myu(ones(64,

25、1),:); gg_mid = gg - gg_myu(ones(64,1),:); % gg_myu(ones(64,1),:)表示将1*64 的向量改为 64*64 % 的矩阵,每一列的值都为 gg_myu在该列的值 sum_gg_mid= sum(gg_mid, 1); %每一列的值求和得 1*64 的矩阵 Rgg = (gg_mid * gg_mid- (sum_gg_mid * sum_gg_mid) / 64) / (64 - 1); % %计算 LS 信道估计量 H_ls %H_ls=inv(X)*Y; % H_ls=(inv(X) * Y; Hls=zeros(64,64);

26、for i=1:64 Hls(i,i)=H_ls(i); end % %计算 MMSE 信道估计量 Hmmse %Hmmse=F*Rgg*inv(Rgy)*Y; % u=rand(64,64); F=fft(u)*inv(u); %DFT 变换系数矩阵 I=eye(64,64); Rgy=Rgg * F* X; % Rgg 是信道自协方差矩阵 Ryy=X * F * Rgg * F *X + variance * I; % Ryy 是接收信号的自协方差矩阵 Gmmse=Rgy * inv(Ryy)* Y; % Gmmse 是时域 MMSE 估计的信道响应 H_mmse=fft(Gmmse); % 频域 MMSE 估计的信道响应 for i=1:64 Hmmse(i,i)=H_mmse(i);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。