Matlab简单的OFDM仿真,信道估计,有BER曲线

上传人:ba****u6 文档编号:101000132 上传时间:2022-06-04 格式:DOCX 页数:5 大小:160.50KB
返回 下载 相关 举报
Matlab简单的OFDM仿真,信道估计,有BER曲线_第1页
第1页 / 共5页
Matlab简单的OFDM仿真,信道估计,有BER曲线_第2页
第2页 / 共5页
Matlab简单的OFDM仿真,信道估计,有BER曲线_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
clearall;closeall;fprintf(nOFDM仿真nn);%参数定义%20025010T/4(作者注明)All-zeroCPQDPSK2、3、4(缺省)7(单位数据符号)收发之间严格同步输入信噪比参数IFFT_bin_length=1024;carrier_count=200;bits_per_symbol=2;symbols_per_carrier=50;%子载疫数-%位数/符号%符号数/载波%训练符号数%循环前缀长度%调制方式%多径信道数%信道最大时延%仿真条件*symbols_per_carrier*%SNR=input(SNR=);%SNR=3:14;%t义信噪比范围BER=zeros(1,length(SNR);baseband_out_length=carrier_countbits_per_symbol;%计算发送的二进制序歹U长度carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)floor(carrier_count/2);%坐标:(1to200)+156,157-356conjugate_carriers=IFFT_bin_length-carriers+2;%坐标:1024(157:356)+2=1026-(157:356)=(869:670)%构造共钥时间一载波矩阵,以便应用所谓的RCCReducedComputationalComplexity算法,即ifft之后结果为实数%Definetheconjugatetime-carriermatrix%也可以用flipdim函数构造对称共钥矩阵%信号发射%out=rand(1,baseband_out_length);%baseband_out1=round(out);%baseband_out2=floor(out*2);%baseband_out3=ceil(out*2)-1;%baseband_out4=randint(1,baseband_out_length);%四种生成必送的二进制序列的方法,斤取二种产生要发送的二进制序列%if(baseband_out1=baseband_out2&baseband_out1=baseband_out3)%fprintf(TransmissionSequenceGeneratednn);%baseband_out=baseband_out1;%else%fprintf(CheckCode!nn);%end%验证四种生成发送的二进制序歹0的方法baseband_out=round(rand(1,baseband_out_length);convert_matrixreshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);fork=1length(baseband_out)/bits_per_symbol),modulo_baseband(k)=0;fori=1:bits_per_symbolmodulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2A(bits_per_symbol-i);endend%每2个比特转化为整数0至3%采用left-msb方式%Testbylavabin%Abuilt-infunctionofdirectlychangebinarybitsintodecimalnumbers%convert_matrix1zeros(length(baseband_out)/bits_per_symbol,bits_per_symbol);%convert_matrix1=convert_matrix;%Test_convert_matrix1bi2de(convert_matrix1,bits_per_symbol,left-msb);%Test_convert_matrix2bi2de(convertmatrix1,bitspersymbol,right-msb);%函数说明:一-%BI2DEConvertbinaryvectorstodecimalnumbers.%D=BI2DE(B)convertsabinaryvectorBtoadecimalvalueD.WhenBis%amatrix,theconversionisperformedrow-wiseandtheoutputDisa%columnvectorofdecimalvalues.Thedefaultorientationofthebinary%inputisRight-MSB;thefirstelementinBrepresentstheleastsignificantbit.%if(modulo_baseband=Test_convert_matrix1)%fprintf(modulo_baseband=Test_convert_matrix1nnn);%elseif(modulo_baseband=Test_convert_matrix2)%fprintf(modulo_baseband=Test_convert_matrix2nnn);%else%fprintf(modulo_baseband=anyTest_convert_matrixnnn);%end%end%wegettheresultmodulo_baseband=Test_convert_matrix1.%carrier_matrix=reshape(modulo_baseband,carrier_count,symbols_per_carrier);%生成时间一载萩矩阵%QDPSK调制%carrier_matrix=zeros(1,carrier_count);carrier_matrix;%添加一个差分调制的初始相位,为0fori=2symbols_per_carrier+1)carrier_matrix(i,=rem(carrier_matrix(i,+carrier_matrix(i-1,2Abits_per_symbol);%差分调制endcarrier_matrix=carrier_matrix*(2*pi)/(2Abits_per_symbol);%产生差分相位X,Y=pol2cart(carrier_matrix,ones(size(carrier_matrix,1),size(carrier_matrix,2);%由极坐标向复数坐标转化第一参数为相位第二参数为幅度%Carrier_matrixcontainsallthephaseinformationandalltheamplitudesarethesameT.complex_carrier_matrix=complex(X,Y);%添加以初序列、training_symbols=1jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1.-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-1.1jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1.-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j.-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-11jj1-1-j-j-1;%25times1jj1,25times-1-j-j-1,totally200symbolsasarowtraining_symbols=cat(1,training_symbols,training_symbols);training_symbols=cat(1,training_symbols,training_symbols);%Productionof4rowsoftraining_symbolscomplex_carrier_matrix=cat(1,training_symbols,complex_carrier_matrix);%训练序歹0与数据合并%block-typepilotsymbolsIFFT_modulation=zeros(4+symbols_per_carrier+1,IFFT_bin_length);%Herearowvectorofzerosisbetweentrainingsymbolsanddatasymbols!%4trainingsymbolsand1zerosymbol%everyOFDMsymboltakesarowofIFFT_modulation”IFFT_modulation(:,carriers)=complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix)%Testbylavabin-Findtheindicesofzeros%index_of_zeros=zeros(symbols_per_carrier,IFFT_bin_length2*carrier_count);%IFFT_modulation1=zeros(4+symbols_per_carrier+1,IFFT_bin_length);%IFFT_modulation2=zeros(4+symbols_per_carrier+1,IFFT_bin_length);%IFFT_modulation1(6:symbols_per_carrier+5,IFFT_modulation(6:symbols_per_carrier+5,=0;%fori=1:symbols_per_carrier%index_of_zeros(i,=find(IFFT_modulation1(i+5,=1);%end%time_wave_matrix=ifft(IFFT_modulation);%进行IFFT操作time_wave_matrix=time_wave_matrix;%IfXisamatrix,ifftreturnstheinverseFouriertransformofeachcolumnofthematrix.fori=1:4+symbols_per_carrier+1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:);end%gettherealpartoftheresultofIFFT%这一步可以省略,因为IFFT结果都是实数%由此可以看出,只是取了IFFT之后载波上的点,并未进行CP的复制和添加endofdm_modulation=reshape(windowed_time_wave_matrix,1,IFFT_bin_length*(4+symbols_per_carrier+1);%P2Soperation%Testbylavabin%Anotherwayofmatrixtransition%ofdm_modulation_tmp=windowed_time_wave_matrix.;%ofdm_modulation_test=ofdm_modulation_tmp(;%if(ofdm_modulation_test=ofdm_modulation)%fprintf(ofdm_modulation_test=ofdm_modulationnnn);%else%fprintf(ofdm_modulation_test=ofdm_modulationnnn);%end%Wegettheresultofdm_modulation_test=ofdm_modulation.%Tx_data=ofdm_modulation;%信道模拟%d1=4;al=0.2;d2=5;a2=0.3;d3=6;a3=0.4;d4=7;a4=0.5;%信道模拟copyl=zeros(size(Tx_data);fori=1+d1:length(Tx_data)copy1(i)=a1*Tx_data(i-d1);endcopy2=zeros(size(Tx_data);fori=1+d2:length(Tx_data)copy2(i)=a2*Tx_data(i-d2);endcopy3=zeros(size(Tx_data);fori=1+d3:length(Tx_data)copy3(i)=a3*Tx_data(i-d3);endcopy4=zeros(size(Tx_data);fori=1+d4:length(Tx_data)copy4(i)=a4*Tx_data(i-d4);endTx_data=Tx_data+copy1+copy2+copy3+copy4;%4multi-pathsTx_signal_power=var(Tx_data);foridx=1:length(SNR)%montecarlo仿真模拟linear_SNR=10A(SNR(idx)/10);noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor=sqrt(noise_sigma);noise=randn(1,length(Tx_data)*noise_scale_factor;Rx_Data=Tx_data+noise;%信号接收%Rx_Data_matrix=reshape(Rx_Data,IFFT_bin_length,4+symbols_per_carrier+1);Rx_spectrum=fft(Rx_Data_matrix);%SupposeprecisesynchronazitionbetweenTxandRxRx_carriers=Rx_spectrum(carriers,:);Rx_training_symbols=Rx_carriers(1:4),:);Rx_carriers=Rx_carriers(5:55),:);%信道估计%Rx_training_symbols=Rx_training_symbols./training_symbols;Rx_training_symbols_deno=Rx_training_symbols.A2;Rx_training_symbols_deno=Rx_training_symbols_deno(1,+Rx_training_symbols_deno(2,+Rx_training_symbols_deno(3,+Rx_training_symbols_deno(4,;Rx_training_symbols_nume=Rx_training_symbols(1,:)+Rx_training_symbols(2,:)+Rx_training_symbols(3,:)+Rx_training_symbols(4,:);Rx_training_symbols_nume=conj(Rx_training_symbols_nume);%取4个向量的导频符号是为了进行平均优化%都是针对“行向量”即单个的OFD耐号进行操作%原理:寻求1/H,对FFT之后的数据进行频域补偿%1/H=conj(H)/HA2because冲2=H*conj(H)Rx_training_symbols=Rx_training_symbols_nume./Rx_training_symbols_deno;Rx_training_symbols=Rx_training_symbols_nume./Rx_training_symbols_deno;Rx_training_symbols_2=cat(1,Rx_training_symbols,Rx_training_symbols);Rx_training_symbols_4=cat(1,Rx_training_symbols_2,Rx_training_symbols_2);Rx_training_symbols_8=cat(1,Rx_training_symbols_4,Rx_training_symbols_4);Rx_training_symbols_16=cat(1,Rx_training_symbols_8,Rx_training_symbols_8);Rx_training_symbols_32=cat(1,Rx_training_symbols_16,Rx_training_symbols_16);Rx_training_symbols_48=cat(1,Rx_training_symbols_32,Rx_training_symbols_16);Rx_training_symbols_50=cat(1,Rx_training_symbols_48,Rx_training_symbols_2);Rx_training_symbols=cat(1,Rx_training_symbols_50,Rx_training_symbols);Rx_carriers=Rx_training_symbols.*Rx_carriers;%进行频域单抽头均衡Rx_phase=angle(Rx_carriers)*(180/pi);phase_negative=find(Rx_phase0);%TestofUsingrem%Rx_phase1=Rx_phase;%Rx_phase2=Rx_phase;%Rx_phase1(phase_negative)=rem(Rx_phase1(phase_negative)+360,360);%Rx_phase2(phase_negative)=Rx_phase2(phase_negative)+360;%ifRx_phase2(phase_negative)=Rx_phase1(phase_negative)%fprintf(nThereisnoneedusingreminnegativephasetransition.n)%else%fprintf(nWeneedtousereminnegativephasetransition.n)%end%Rx_phase(phase_negative)=rem(Rx_phase(phase_negative)+360,360);%把负的相位转化为正的相位Rx_decoded_phase=diff(Rx_phase);%这也是为什么要在前面加上初始相位的原因%“Herearowvectorofzerosisbetweentrainingsymbolsanddatasymbols!”phase_negative=find(Rx_decoded_phase0);Rx_decoded_phase(phase_negative)=rem(Rx_decoded_phase(phase_negative)+360,360);%再次加成的相位转化为正的相位%QDPSK解调%base_phase=360Z2Abits_per_symbol;delta_phase=base_phaseZ2;Rx_decoded_symbolszeros(size(Rx_decoded_phase,1),size(Rx_decoded_phase,2);fori=1:(2Abits_per_symbol-1)center_phase=base_phase*i;plus_delta=center_phase+delta_phase;%Decisionthreshold1minus_delta=center_phase-delta_phase;%Decisionthreshold2decoded=find(Rx_decoded_phaseminus_delta);Rx_decoded_symbols(decoded)=i;end%仅仅对三个区域进行判决%剩下的区域就是零相位的空间了%这个区域在定义解调矩阵时已经定义为零Rx_serial_symbolsreshape(Rx_decoded_symbols,1,size(Rx_decoded_symbols,1)*size(Rx_decoded_symbols,2);fori=bits_per_symbol:-1:1ifi=1Rx_binary_matrix(i,:)=rem(Rx_serial_symbols,2);Rx_serial_symbols=floor(Rx_serial_symbolsZ2);elseRx_binary_matrix(i,:)=Rx_serial_symbols;endend%Integertobinarybaseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*size(Rx_binary_matrix,2);%误码率计算%bit_errors(idx)=find(baseband_in=baseband_out);%find的结果其每个元素为满足逻辑条件的输君向量的标号,其向量长度也就是收发不一样的bit的个数%bit_error_count(idx)=size(bit_errors,2);%total_bits=size(baseband_out,2);%bit_error_rate=bit_error_count/total_bits;%fprintf(%fn,bit_error_rate);number_err(idx),BER(idx)=biterr(baseband_out,baseband_in);endsemilogy(SNR,BER,r*);legend(OFDMBER-SNR);xlabel(SNR(dB);ylabel(BER);title(OFDM);gridon;%TheEND%1.该程序进行了简单的LMS言道估计,没有加入与MMS等其他信道估计算法的比较;%2.仿真条件为系统处于理想同步情况下。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!