├── MIMO-OFDM无线通信技术及MATLAB实现_部分1.pdf ├── MIMO-OFDM无线通信技术及MATLAB实现_部分2.pdf ├── MIMO-OFDM无线通信技术及MATLAB实现_部分3.pdf ├── README.md ├── 第10章 天线分集与空时编码技术 ├── Alamouti空时块码 │ ├── Alamouti_scheme.m │ ├── Alamouti差错性能.jpg │ └── modulator.m ├── 瑞利衰落信道下MRC性能 │ ├── BER perfoemancde of MRC Scheme.jpg │ ├── MRC_scheme.m │ └── modulator.m ├── 空时块码 │ ├── STBC_3x4_simulation.m │ ├── modulator.m │ └── 空时块码BER.jpg └── 空时格码 │ ├── BER of STTC coding.jpg │ ├── STTC_detector.m │ ├── STTC_modulator.m │ ├── STTC_simulation.m │ ├── STTC_stage_modulation.m │ ├── branch_metric.m │ ├── channel1.m │ ├── data_generator.m │ └── trellis_encoder.m ├── 第11章 空间复用的MIMO系统的信号检测 ├── MIMO系统的MMSE检测 │ ├── MMSE_detection_2x2.m │ ├── QAM16_mod.m │ └── soft_output2x2.m ├── MIMO系统的QRM-MLD检测器的软判决 │ ├── QAM16_mod.m │ ├── QAM16_slicer_soft.m │ ├── QRM_MLD_detector.m │ ├── QRM_MLD_simulation.m │ ├── QRM_MLD_soft.m │ ├── Viterbi_decode.m │ ├── Viterbi_decode_soft.m │ ├── Viterbi_init.m │ └── convolution_encoder.m ├── OSIC检测方法 │ ├── OSIC_detector.m │ └── QAM16_slicer.m ├── SISO系统的软硬判决性能 │ ├── QAM16_demapper.m │ ├── QAM16_mod.m │ ├── QAM16_slicer.m │ ├── QAM16_slicer_soft.m │ ├── Viterbi_decode.m │ ├── Viterbi_decode_soft.m │ ├── Viterbi_init.m │ ├── convolution_encoder.m │ ├── soft_decision_sigma.m │ ├── soft_hard_SISO.m │ └── 硬判决.jpg ├── 格基规约的MMSE检测 │ ├── LRAD_MMSE.m │ ├── SQRD_.m │ └── original_LLL_.m └── 球形译码 │ ├── SD_detector.m │ ├── bound.m │ ├── compare_vector_norm.m │ ├── list_length.m │ ├── radius_control.m │ ├── stage_processing.m │ └── vector_comparison.m ├── 第12章 在发射端利用信道状态信息 ├── MMSE预均衡 │ └── pre_MMSE.m ├── 天线选择技术 │ ├── Alamouti_2x1_ant_selection.m │ ├── MIMO_channel_cap_ant_sel_optimal.m │ └── MIMO_channel_cap_ant_sel_subopt.m └── 码本生成和预编码 │ ├── Alamouti_2x1_precoding.m │ └── codebook_generator.m ├── 第13章 多用户MIMO ├── 信道反转的多用户MIMO系统 │ ├── QPSK_mapper.m │ └── multi_user_MIMO.m ├── 块对角化 │ └── Block_diagonalization.m └── 脏纸编码和Tomlinson-Harashima预编码 │ ├── Dirty_or_TH_precoding.m │ └── modulo.m ├── 第1章 无线信道:传播和衰落 ├── IEEE802.16d模型 │ ├── IEEE 802.16d Path loss Models.jpg │ ├── Modified IEEE 802.16d Path loss Models.jpg │ ├── PL_IEEE80216d.m │ └── plot_PL_IEEE80216d.m ├── Okumura&Hata模型 │ ├── Hata PL model.jpg │ ├── PL_Hata.m │ └── plot_PL_Hata.m ├── 瑞利衰落和莱斯衰落信道模型 │ ├── Ray_model.m │ ├── Rayleigh model&Rician model.jpg │ ├── Ric_model.m │ └── plot_Ray_Ric_channel.m └── 自由空间路径损耗 │ ├── Free PL Models.jpg │ ├── Log-distance PL model.jpg │ ├── Log-normal PL model.jpg │ ├── PL_free.m │ ├── PL_logdist_or_norm.m │ └── plot_PL_general.m ├── 第2章 SISO信道模型 ├── 2径信道模型和指数信道模型 │ ├── 2-ray model&exponential model.jpg │ ├── Ray_model.m │ ├── exp_PDP.m │ └── plot_2ray_exp_model.m ├── FWGN信道模型 │ ├── Doppler_spectrum.m │ ├── FWGN_model.m │ ├── channel modeled by Clarke&Gan.jpg │ └── plot_FWGN.m ├── IEEE802.11信道模型 │ ├── Frequency response.jpg │ ├── IEEE 802.11 Model.jpg │ ├── Ray_model.m │ ├── ieee802_11_model.m │ └── plot_IEEE80211_model.m ├── Jakes模型 │ ├── Channel Modeled by Jakes.jpg │ ├── Jakes_Flat.m │ └── plot_Jakes_model.m ├── SUI信道模型 │ ├── Doppler_PSD_function.m │ ├── SUI model.jpg │ ├── SUI_fading.m │ ├── SUI_parameters.m │ ├── gen_filter.m │ └── plot_SUI_channel.m ├── Saleh-Valenzuela信道模型 │ ├── S-V model.jpg │ ├── SV_model_ct.m │ └── plot_SV_model_ct.m ├── UWB信道模型 │ ├── UWB model.jpg │ ├── UWB_model_ct.m │ ├── UWB_parameters.m │ ├── cm1_imr.csv │ ├── cm1_imr.mat │ ├── cm1_imr_np.csv │ ├── convert_UWB_ct.m │ └── plot_UWB_channel.m ├── 射线信道模型 │ ├── Ray Channel Model.jpg │ ├── assign_offset.m │ ├── dB2w.m │ ├── equalpower_subray.m │ ├── gen_phase.m │ ├── plot_ray_fading.m │ └── ray_fading.m └── 改进FWGN信道模型 │ ├── Doppler_PSD_function.m │ ├── FWGN_ff.m │ ├── FWGN_tf.m │ ├── Modified FWGN.jpg │ ├── gen_filter.m │ └── plot_modeified_FWGN.m ├── 第4章 OFDM概述 ├── 仿真OFDM传输系统 │ ├── OFDM_BER_AWGN_CP_GL16.dat │ ├── OFDM_basic.m │ ├── OFDM_ber.jpg │ ├── Q.m │ ├── ber_QAM.m │ ├── guard_interval.m │ ├── plot_ber.m │ └── remove_GI.m └── 检验正交性 │ ├── orthogonalisty.jpg │ └── test_orthogonality.m ├── 第5章 CFO估计技术 ├── CFO.jpg ├── CFO_CP.m ├── CFO_Classen.m ├── CFO_Moose.m ├── CFO_estimation.m ├── add_CFO.m ├── add_CP.m ├── add_pilot.m └── remove_CP.m ├── 第6章 信道估计 ├── LS_CE.m ├── LS和MMSE比较.jpg ├── MMSE_CE.m ├── channel_estimation.m ├── interpolate.m ├── 信道估计与实际信道.jpg └── 均衡后结果比较.jpg ├── 第7章 PAPR ├── Chu序列和IEEE802.16e前导的PAPR │ ├── Chu序列.jpg │ ├── IFFT_oversampling.m │ ├── PAPR.m │ ├── PAPR_of_Chu.m │ ├── PAPR_of_preamble.m │ ├── Wibro-Preamble │ │ ├── C80216e-04_241r1_pdf.dat │ │ ├── Preamble_sym0.dat │ │ ├── Preamble_sym1.dat │ │ ├── Preamble_sym10.dat │ │ ├── Preamble_sym100.dat │ │ ├── Preamble_sym101.dat │ │ ├── Preamble_sym102.dat │ │ ├── Preamble_sym103.dat │ │ ├── Preamble_sym104.dat │ │ ├── Preamble_sym105.dat │ │ ├── Preamble_sym106.dat │ │ ├── Preamble_sym107.dat │ │ ├── Preamble_sym108.dat │ │ ├── Preamble_sym109.dat │ │ ├── Preamble_sym11.dat │ │ ├── Preamble_sym110.dat │ │ ├── Preamble_sym111.dat │ │ ├── Preamble_sym112.dat │ │ ├── Preamble_sym113.dat │ │ ├── Preamble_sym12.dat │ │ ├── Preamble_sym13.dat │ │ ├── Preamble_sym14.dat │ │ ├── Preamble_sym15.dat │ │ ├── Preamble_sym16.dat │ │ ├── Preamble_sym17.dat │ │ ├── Preamble_sym18.dat │ │ ├── Preamble_sym19.dat │ │ ├── Preamble_sym2.dat │ │ ├── Preamble_sym20.dat │ │ ├── Preamble_sym21.dat │ │ ├── Preamble_sym22.dat │ │ ├── Preamble_sym23.dat │ │ ├── Preamble_sym24.dat │ │ ├── Preamble_sym25.dat │ │ ├── Preamble_sym26.dat │ │ ├── Preamble_sym27.dat │ │ ├── Preamble_sym28.dat │ │ ├── Preamble_sym29.dat │ │ ├── Preamble_sym3.dat │ │ ├── Preamble_sym30.dat │ │ ├── Preamble_sym31.dat │ │ ├── Preamble_sym32.dat │ │ ├── Preamble_sym33.dat │ │ ├── Preamble_sym34.dat │ │ ├── Preamble_sym35.dat │ │ ├── Preamble_sym36.dat │ │ ├── Preamble_sym37.dat │ │ ├── Preamble_sym38.dat │ │ ├── Preamble_sym39.dat │ │ ├── Preamble_sym4.dat │ │ ├── Preamble_sym40.dat │ │ ├── Preamble_sym41.dat │ │ ├── Preamble_sym42.dat │ │ ├── Preamble_sym43.dat │ │ ├── Preamble_sym44.dat │ │ ├── Preamble_sym45.dat │ │ ├── Preamble_sym46.dat │ │ ├── Preamble_sym47.dat │ │ ├── Preamble_sym48.dat │ │ ├── Preamble_sym49.dat │ │ ├── Preamble_sym5.dat │ │ ├── Preamble_sym50.dat │ │ ├── Preamble_sym51.dat │ │ ├── Preamble_sym52.dat │ │ ├── Preamble_sym53.dat │ │ ├── Preamble_sym54.dat │ │ ├── Preamble_sym55.dat │ │ ├── Preamble_sym56.dat │ │ ├── Preamble_sym57.dat │ │ ├── Preamble_sym58.dat │ │ ├── Preamble_sym59.dat │ │ ├── Preamble_sym6.dat │ │ ├── Preamble_sym60.dat │ │ ├── Preamble_sym61.dat │ │ ├── Preamble_sym62.dat │ │ ├── Preamble_sym63.dat │ │ ├── Preamble_sym64.dat │ │ ├── Preamble_sym65.dat │ │ ├── Preamble_sym66.dat │ │ ├── Preamble_sym67.dat │ │ ├── Preamble_sym68.dat │ │ ├── Preamble_sym69.dat │ │ ├── Preamble_sym7.dat │ │ ├── Preamble_sym70.dat │ │ ├── Preamble_sym71.dat │ │ ├── Preamble_sym72.dat │ │ ├── Preamble_sym73.dat │ │ ├── Preamble_sym74.dat │ │ ├── Preamble_sym75.dat │ │ ├── Preamble_sym76.dat │ │ ├── Preamble_sym77.dat │ │ ├── Preamble_sym78.dat │ │ ├── Preamble_sym79.dat │ │ ├── Preamble_sym8.dat │ │ ├── Preamble_sym80.dat │ │ ├── Preamble_sym81.dat │ │ ├── Preamble_sym82.dat │ │ ├── Preamble_sym83.dat │ │ ├── Preamble_sym84.dat │ │ ├── Preamble_sym85.dat │ │ ├── Preamble_sym86.dat │ │ ├── Preamble_sym87.dat │ │ ├── Preamble_sym88.dat │ │ ├── Preamble_sym89.dat │ │ ├── Preamble_sym9.dat │ │ ├── Preamble_sym90.dat │ │ ├── Preamble_sym91.dat │ │ ├── Preamble_sym92.dat │ │ ├── Preamble_sym93.dat │ │ ├── Preamble_sym94.dat │ │ ├── Preamble_sym95.dat │ │ ├── Preamble_sym96.dat │ │ ├── Preamble_sym97.dat │ │ ├── Preamble_sym98.dat │ │ └── Preamble_sym99.dat │ └── 前导序列.jpg ├── DFT扩频的PAPR │ ├── CCDF_PAPR_DFTspreading.m │ ├── DFT扩频技术的PAPR比较.jpg │ ├── compare_DFT_spreading.m │ └── zero_insertion.m ├── OFDM信号的CCDF │ ├── OFDM_CCDF.jpg │ ├── PAPR.m │ ├── mapper.m │ └── plot_CCDF.m ├── PTS技术 │ ├── CCDF_OFDMA.m │ ├── CCDF_PTS.m │ ├── PTS技术.jpg │ └── compare_CCDF_PTS.m ├── SQNR与限幅电平 │ ├── Effect of Clipping.jpg │ ├── SQNR_with_quantization_clipping.m │ └── mapper.m ├── 单载波信号的PAPR │ ├── 16QAM.jpg │ ├── 16QAM2.jpg │ ├── BPSK.jpg │ ├── BPSK2.jpg │ ├── PAPR.m │ ├── QPSK.jpg │ ├── QPSK2.jpg │ ├── mapper.m │ ├── modulation.m │ └── single_carrier_PAPR.m ├── 时域OFDM信号概率分析 │ ├── OFDM_signal.m │ ├── OFDM信号的幅度分布.jpg │ ├── mapper.m │ └── 时域OFDM信号.jpg ├── 脉冲成形的DFT扩频的PAPR │ ├── CCDF_PAPR_DFTspreading.m │ ├── PAPR性能.jpg │ ├── PAPR性能2.jpg │ ├── compare_DFT_spreading_w_psf.m │ └── zero_insertion.m ├── 限幅和滤波 │ ├── IFFT_oversampling.m │ ├── PDF_of_clipped_and_filtered_OFDM_signal.m │ ├── add_CP.m │ ├── clipping.m │ ├── mapper.m │ ├── 未限幅信号.jpg │ ├── 等波纹通频带FIR滤波器.jpg │ └── 限幅信号.jpg └── 限幅和滤波的PAPR分布和BER │ ├── CCDF_of_clipped_filtered_OFDM_signal.m │ ├── IFFT_oversampling.m │ ├── PAPR&BER.jpg │ ├── PAPR.m │ ├── add_CP.m │ ├── clipping.m │ └── zero_pasting.m └── 第9章 MIMO信道容量 ├── Ergodic_Capacity_CDF.m ├── Ergodic_Capacity_Correlation.m ├── Ergodic_Capacity_vs_SNR.m ├── MIMO信道容量.jpg ├── OL_CL_Comparison.m ├── Water_Pouring.m ├── 开环和闭环MIMO信道容量.jpg ├── 未知CSI时的MIMO信道.jpg └── 相关信道的遍历MIMO容量.jpg /MIMO-OFDM无线通信技术及MATLAB实现_部分1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/MIMO-OFDM无线通信技术及MATLAB实现_部分1.pdf -------------------------------------------------------------------------------- /MIMO-OFDM无线通信技术及MATLAB实现_部分2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/MIMO-OFDM无线通信技术及MATLAB实现_部分2.pdf -------------------------------------------------------------------------------- /MIMO-OFDM无线通信技术及MATLAB实现_部分3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/MIMO-OFDM无线通信技术及MATLAB实现_部分3.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation 2 | <MIMO-OFDM无线通信技术及MATLAB实现>代码及Ebook 3 | -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/Alamouti空时块码/Alamouti_scheme.m: -------------------------------------------------------------------------------- 1 | % Alamouti_scheme.m 2 | clear; 3 | clc; 4 | clf; 5 | L_frame=130; 6 | N_Packets=4000; % Number of frames/packet and Number of packets 7 | NT=2; 8 | NR=2; 9 | b=2; 10 | SNRdBs=[0:2:20]; 11 | sq_NT=sqrt(NT); 12 | sq2=sqrt(2); 13 | for i_SNR=1:length(SNRdBs) 14 | SNRdB=SNRdBs(i_SNR); 15 | sigma=sqrt(0.5/(10^(SNRdB/10))); 16 | for i_packet=1:N_Packets 17 | msg_symbol=randi([0,1],L_frame*b,NT); 18 | tx_bits=msg_symbol.'; 19 | tmp=[]; 20 | tmp1=[]; 21 | for i=1:NT 22 | [tmp1,sym_tab,P] = modulator(tx_bits(i,:),b); 23 | tmp=[tmp; tmp1]; 24 | end 25 | X=tmp.'; 26 | X1=X; 27 | X2=[-conj(X(:,2)) conj(X(:,1))]; 28 | for n=1:NT 29 | Hr(n,:,:)=(randn(L_frame,NT)+j*randn(L_frame,NT))/sq2; 30 | end 31 | H=reshape(Hr(n,:,:),L_frame,NT); 32 | Habs(:,n)=sum(abs(H).^2,2); 33 | R1 = sum(H.*X1,2)/sq_NT + sigma*(randn(L_frame,1)+j*randn(L_frame,1)); 34 | R2 = sum(H.*X2,2)/sq_NT + sigma*(randn(L_frame,1)+j*randn(L_frame,1)); 35 | Z1 = R1.*conj(H(:,1)) + conj(R2).*H(:,2); 36 | Z2 = R1.*conj(H(:,2)) - conj(R2).*H(:,1); 37 | for m=1:P 38 | tmp = (-1+sum(Habs,2))*abs(sym_tab(m))^2; 39 | d1(:,m) = abs(sum(Z1,2)-sym_tab(m)).^2 + tmp; 40 | d2(:,m) = abs(sum(Z2,2)-sym_tab(m)).^2 + tmp; 41 | end 42 | [y1,i1]=min(d1,[],2); 43 | S1d=sym_tab(i1).'; 44 | clear d1 45 | [y2,i2]=min(d2,[],2); 46 | S2d=sym_tab(i2).'; 47 | clear d2 48 | Xd = [S1d S2d]; 49 | tmp1=X>0; 50 | tmp2=Xd>0; 51 | noeb_p(i_packet) = sum(sum(tmp1~=tmp2)); 52 | end % End of FOR loop for i_packet 53 | BER(i_SNR) = sum(noeb_p)/(N_Packets*L_frame*b); 54 | end % End of FOR loop for i_SNR 55 | semilogy(SNRdBs,BER); 56 | axis([SNRdBs([1 end]) 1e-6 1e0]); 57 | grid on; 58 | xlabel('SNR[dB]'); 59 | ylabel('BER'); 60 | -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/Alamouti空时块码/Alamouti差错性能.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/Alamouti空时块码/Alamouti差错性能.jpg -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/Alamouti空时块码/modulator.m: -------------------------------------------------------------------------------- 1 | function [mod_symbols,sym_table,M] = modulator(bitseq,b) 2 | 3 | N_bits = length(bitseq); 4 | if b==1 % BPSK modulation 5 | sym_table=exp(j*[0 -pi]); 6 | sym_table=sym_table([1 0]+1); 7 | inp=bitseq; 8 | mod_symbols=sym_table(inp+1); 9 | M=2; 10 | elseif b==2 % QPSK modulation 11 | sym_table = exp(j*pi/4*[-3 3 1 -1]); 12 | sym_table=sym_table([0 1 3 2]+1); 13 | inp=reshape(bitseq,b,N_bits/b); 14 | mod_symbols=sym_table([2 1]*inp+1); 15 | M=4; 16 | elseif b==3 % generates 8PSK symbols 17 | sym_table=exp(j*pi/4*[0:7]); 18 | sym_table=sym_table([0 1 3 2 6 7 5 4]+1); 19 | inp=reshape(bitseq,b,N_bits/b); 20 | mod_symbols=sym_table([4 2 1]*inp+1); 21 | M=8; 22 | elseif b==4 % 16-QAM modulation 23 | m=0; 24 | sq10=sqrt(10); 25 | for k=-3:2:3 26 | for l=-3:2:3 27 | m=m+1; s 28 | ym_table(m) = (k+j*l)/sq10; % power normalization 29 | end 30 | end 31 | sym_table = sym_table([0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]+1); % Gray code mapping pattern for 8-PSK symbols 32 | inp = reshape(bitseq,b,N_bits/b); 33 | mod_symbols = sym_table([8 4 2 1]*inp+1); % maps transmitted bits into 16QAM symbols 34 | M=16; %16 constellation points 35 | else 36 | error('Unimplemented modulation'); 37 | end 38 | 39 | 40 | -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/瑞利衰落信道下MRC性能/BER perfoemancde of MRC Scheme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/瑞利衰落信道下MRC性能/BER perfoemancde of MRC Scheme.jpg -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/瑞利衰落信道下MRC性能/MRC_scheme.m: -------------------------------------------------------------------------------- 1 | % MRC_scheme.m 2 | % Receiver diversity - MRC 3 | clear, clf 4 | L_frame=130; 5 | N_packet=4000; 6 | b=2; % Set to 1/2/3/4 for BPSK/QPSK/16QAM/64QAM 7 | SNRdBs=[0:2:20]; 8 | sq2=sqrt(2); 9 | %SNRdBs=[0:10:20]; sq2=sqrt(2); 10 | for iter=1:3 11 | if iter==1 12 | NT=1; 13 | NR=1; 14 | gs='-kx'; % SISO 15 | elseif iter==2 16 | NT=1; 17 | NR=2; 18 | gs='-^'; 19 | else 20 | NT=1; 21 | NR=4; 22 | gs='-ro'; 23 | end 24 | sq_NT=sqrt(NT); 25 | for i_SNR=1:length(SNRdBs) 26 | SNRdB=SNRdBs(i_SNR); 27 | sigma=sqrt(0.5/(10^(SNRdB/10))); 28 | for i_packet=1:N_packet 29 | symbol_data=randi([0,1],L_frame*b,NT); 30 | [temp,sym_tab,P]=modulator(symbol_data.',b); 31 | X=temp.'; 32 | Hr = (randn(L_frame,NR)+j*randn(L_frame,NR))/sq2; 33 | H = reshape(Hr,L_frame,NR); 34 | Habs = sum(abs(H).^2,2); 35 | Z=0; 36 | for i=1:NR 37 | R(:,i) = sum(H(:,i).*X,2)/sq_NT + sigma*(randn(L_frame,1)+j*randn(L_frame,1)); 38 | Z = Z + R(:,i).*conj(H(:,i)); 39 | end 40 | for m=1:P 41 | d1(:,m)=abs(sum(Z,2)-sym_tab(m)).^2+(-1+sum(Habs,2))*abs(sym_tab(m))^2; 42 | end 43 | [y1,i1] = min(d1,[],2); 44 | Xd=sym_tab(i1).'; 45 | temp1 = X>0; 46 | temp2 = Xd>0; 47 | noeb_p(i_packet)=sum(sum(temp1~=temp2)); 48 | end 49 | BER(iter,i_SNR) = sum(noeb_p)/(N_packet*L_frame*b); 50 | end 51 | semilogy(SNRdBs,BER(iter,:),gs); 52 | hold on; 53 | axis([SNRdBs([1 end]) 1e-6 1e0]) 54 | end 55 | title('BER perfoemancde of MRC Scheme'); 56 | xlabel('SNR[dB]'); 57 | ylabel('BER') 58 | grid on; 59 | set(gca,'fontsize',9) 60 | legend('SISO','MRC (Tx:1,Rx:2)','MRC (Tx:1,Rx:4)') 61 | -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/瑞利衰落信道下MRC性能/modulator.m: -------------------------------------------------------------------------------- 1 | function [mod_symbols,sym_table,M] = modulator(bitseq,b) 2 | 3 | N_bits = length(bitseq); 4 | if b==1 % BPSK modulation 5 | sym_table=exp(j*[0 -pi]); 6 | sym_table=sym_table([1 0]+1); 7 | inp=bitseq; 8 | mod_symbols=sym_table(inp+1); 9 | M=2; 10 | elseif b==2 % QPSK modulation 11 | sym_table = exp(j*pi/4*[-3 3 1 -1]); 12 | sym_table=sym_table([0 1 3 2]+1); 13 | inp=reshape(bitseq,b,N_bits/b); 14 | mod_symbols=sym_table([2 1]*inp+1); 15 | M=4; 16 | elseif b==3 % generates 8PSK symbols 17 | sym_table=exp(j*pi/4*[0:7]); 18 | sym_table=sym_table([0 1 3 2 6 7 5 4]+1); 19 | inp=reshape(bitseq,b,N_bits/b); 20 | mod_symbols=sym_table([4 2 1]*inp+1); 21 | M=8; 22 | elseif b==4 % 16-QAM modulation 23 | m=0; 24 | sq10=sqrt(10); 25 | for k=-3:2:3 26 | for l=-3:2:3 27 | m=m+1; s 28 | ym_table(m) = (k+j*l)/sq10; % power normalization 29 | end 30 | end 31 | sym_table = sym_table([0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]+1); % Gray code mapping pattern for 8-PSK symbols 32 | inp = reshape(bitseq,b,N_bits/b); 33 | mod_symbols = sym_table([8 4 2 1]*inp+1); % maps transmitted bits into 16QAM symbols 34 | M=16; %16 constellation points 35 | else 36 | error('Unimplemented modulation'); 37 | end 38 | 39 | 40 | -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时块码/STBC_3x4_simulation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时块码/STBC_3x4_simulation.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时块码/modulator.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时块码/modulator.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时块码/空时块码BER.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时块码/空时块码BER.jpg -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/BER of STTC coding.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/BER of STTC coding.jpg -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/STTC_detector.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/STTC_detector.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/STTC_modulator.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/STTC_modulator.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/STTC_simulation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/STTC_simulation.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/STTC_stage_modulation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/STTC_stage_modulation.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/branch_metric.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/branch_metric.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/channel1.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/channel1.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/data_generator.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/data_generator.m -------------------------------------------------------------------------------- /第10章 天线分集与空时编码技术/空时格码/trellis_encoder.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第10章 天线分集与空时编码技术/空时格码/trellis_encoder.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/MMSE_detection_2x2.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/MMSE_detection_2x2.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/QAM16_mod.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/QAM16_mod.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/soft_output2x2.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的MMSE检测/soft_output2x2.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QAM16_mod.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QAM16_mod.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QAM16_slicer_soft.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QAM16_slicer_soft.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_detector.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_detector.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_simulation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_simulation.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_soft.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/QRM_MLD_soft.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/Viterbi_decode.m: -------------------------------------------------------------------------------- 1 | function out_bits = Viterbi_decode(rx_bits) 2 | global prev_state; 3 | global prev_state_outbits; 4 | rx_bits=2*rx_bits-1; 5 | cum_metrics = -1e6*ones(64,1); 6 | cum_metrics(1)=0; 7 | tmp_cum_metrics=zeros(64,1); 8 | max_paths=zeros(64,length(rx_bits)/2); 9 | out_bits=zeros(1,length(rx_bits)/2); 10 | for data_bit=1:2:length(rx_bits) 11 | for state = 1:64 12 | tmp_max_cum_metric=-1e7; 13 | path_metric1=prev_state_outbits(state,1,1)*rx_bits(data_bit)+prev_state_outbits(state,1,2)*rx_bits(data_bit+1); 14 | path_metric2=prev_state_outbits(state,2,1)*rx_bits(data_bit)+prev_state_outbits(state,2,2)*rx_bits(data_bit+1); 15 | if cum_metrics(prev_state(state,1)+1)+path_metric1>cum_metrics(prev_state(state,2)+1)+path_metric2 16 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,1)+1)+path_metric1; 17 | max_paths(state,(data_bit+1)/2)=0; 18 | else 19 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,2)+1)+path_metric2; 20 | max_paths(state,(data_bit+1)/2)=1; 21 | end 22 | end 23 | for state=1:64 24 | cum_metrics(state)= tmp_cum_metrics(state); 25 | end 26 | end 27 | state=0; 28 | for data_bit=length(rx_bits)/2:-1:1; 29 | bit_estimate=rem(state,2); 30 | out_bits(data_bit)=bit_estimate; 31 | state=prev_state(state+1,max_paths(state+1,data_bit)+1); 32 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/Viterbi_decode_soft.m: -------------------------------------------------------------------------------- 1 | function out_bits = Viterbi_decode_soft(rx_bits) 2 | global prev_state; 3 | global prev_state_outbits; 4 | cum_metrics = -1e6*ones(64,1); 5 | cum_metrics(1)=0; 6 | tmp_cum_metrics=zeros(64,1); 7 | max_paths=zeros(64,length(rx_bits)/2); 8 | out_bits=zeros(1,length(rx_bits)/2); 9 | for data_bit=1:2:length(rx_bits) 10 | for state = 1:64 11 | tmp_max_cum_metric=-1e7; 12 | path_metric1=prev_state_outbits(state,1,1)*rx_bits(data_bit)+prev_state_outbits(state,1,2)*rx_bits(data_bit+1); 13 | path_metric2=prev_state_outbits(state,2,1)*rx_bits(data_bit)+prev_state_outbits(state,2,2)*rx_bits(data_bit+1); 14 | if cum_metrics(prev_state(state,1)+1)+path_metric1>cum_metrics(prev_state(state,2)+1)+path_metric2 15 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,1)+1)+path_metric1; 16 | max_paths(state,(data_bit+1)/2)=0; 17 | else 18 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,2)+1)+path_metric2; 19 | max_paths(state,(data_bit+1)/2)=1; 20 | end 21 | end 22 | for state=1:64 23 | cum_metrics(state)= tmp_cum_metrics(state); 24 | end 25 | 26 | end 27 | state=0; 28 | for data_bit=length(rx_bits)/2:-1:1; 29 | bit_estimate=rem(state,2); 30 | out_bits(data_bit)=bit_estimate; 31 | state=prev_state(state+1,max_paths(state+1,data_bit)+1); 32 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/Viterbi_init.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/Viterbi_init.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/MIMO系统的QRM-MLD检测器的软判决/convolution_encoder.m: -------------------------------------------------------------------------------- 1 | function coded_bits = convolution_encoder(in_bits) 2 | ConvCodeGenPoly=[1 0 1 1 0 1 1;1 1 1 1 0 0 1]; 3 | Nrow = size(ConvCodeGenPoly,1); 4 | Nbits=size(ConvCodeGenPoly,2)+length(in_bits)-1; 5 | uncoded_bits=zeros(Nrow,Nbits); 6 | for row=1:Nrow 7 | uncoded_bits(row,1:Nbits)=rem(conv(in_bits,ConvCodeGenPoly(row,:)),2); 8 | end 9 | coded_bits=uncoded_bits; 10 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/OSIC检测方法/OSIC_detector.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/OSIC检测方法/OSIC_detector.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/OSIC检测方法/QAM16_slicer.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/OSIC检测方法/QAM16_slicer.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_demapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_demapper.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_mod.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_mod.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_slicer.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_slicer.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_slicer_soft.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/QAM16_slicer_soft.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/Viterbi_decode.m: -------------------------------------------------------------------------------- 1 | function out_bits = Viterbi_decode(rx_bits) 2 | global prev_state; 3 | global prev_state_outbits; 4 | rx_bits=2*rx_bits-1; 5 | cum_metrics = -1e6*ones(64,1); 6 | cum_metrics(1)=0; 7 | tmp_cum_metrics=zeros(64,1); 8 | max_paths=zeros(64,length(rx_bits)/2); 9 | out_bits=zeros(1,length(rx_bits)/2); 10 | for data_bit=1:2:length(rx_bits) 11 | for state = 1:64 12 | tmp_max_cum_metric=-1e7; 13 | path_metric1=prev_state_outbits(state,1,1)*rx_bits(data_bit)+prev_state_outbits(state,1,2)*rx_bits(data_bit+1); 14 | path_metric2=prev_state_outbits(state,2,1)*rx_bits(data_bit)+prev_state_outbits(state,2,2)*rx_bits(data_bit+1); 15 | if cum_metrics(prev_state(state,1)+1)+path_metric1>cum_metrics(prev_state(state,2)+1)+path_metric2 16 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,1)+1)+path_metric1; 17 | max_paths(state,(data_bit+1)/2)=0; 18 | else 19 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,2)+1)+path_metric2; 20 | max_paths(state,(data_bit+1)/2)=1; 21 | end 22 | end 23 | for state=1:64 24 | cum_metrics(state)= tmp_cum_metrics(state); 25 | end 26 | end 27 | state=0; 28 | for data_bit=length(rx_bits)/2:-1:1; 29 | bit_estimate=rem(state,2); 30 | out_bits(data_bit)=bit_estimate; 31 | state=prev_state(state+1,max_paths(state+1,data_bit)+1); 32 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/Viterbi_decode_soft.m: -------------------------------------------------------------------------------- 1 | function out_bits = Viterbi_decode_soft(rx_bits) 2 | global prev_state; 3 | global prev_state_outbits; 4 | cum_metrics = -1e6*ones(64,1); 5 | cum_metrics(1)=0; 6 | tmp_cum_metrics=zeros(64,1); 7 | max_paths=zeros(64,length(rx_bits)/2); 8 | out_bits=zeros(1,length(rx_bits)/2); 9 | for data_bit=1:2:length(rx_bits) 10 | for state = 1:64 11 | tmp_max_cum_metric=-1e7; 12 | path_metric1=prev_state_outbits(state,1,1)*rx_bits(data_bit)+prev_state_outbits(state,1,2)*rx_bits(data_bit+1); 13 | path_metric2=prev_state_outbits(state,2,1)*rx_bits(data_bit)+prev_state_outbits(state,2,2)*rx_bits(data_bit+1); 14 | if cum_metrics(prev_state(state,1)+1)+path_metric1>cum_metrics(prev_state(state,2)+1)+path_metric2 15 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,1)+1)+path_metric1; 16 | max_paths(state,(data_bit+1)/2)=0; 17 | else 18 | tmp_cum_metrics(state)=cum_metrics(prev_state(state,2)+1)+path_metric2; 19 | max_paths(state,(data_bit+1)/2)=1; 20 | end 21 | end 22 | for state=1:64 23 | cum_metrics(state)= tmp_cum_metrics(state); 24 | end 25 | 26 | end 27 | state=0; 28 | for data_bit=length(rx_bits)/2:-1:1; 29 | bit_estimate=rem(state,2); 30 | out_bits(data_bit)=bit_estimate; 31 | state=prev_state(state+1,max_paths(state+1,data_bit)+1); 32 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/Viterbi_init.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/Viterbi_init.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/convolution_encoder.m: -------------------------------------------------------------------------------- 1 | function coded_bits = convolution_encoder(in_bits) 2 | ConvCodeGenPoly=[1 0 1 1 0 1 1;1 1 1 1 0 0 1]; 3 | Nrow = size(ConvCodeGenPoly,1); 4 | Nbits=size(ConvCodeGenPoly,2)+length(in_bits)-1; 5 | uncoded_bits=zeros(Nrow,Nbits); 6 | for row=1:Nrow 7 | uncoded_bits(row,1:Nbits)=rem(conv(in_bits,ConvCodeGenPoly(row,:)),2); 8 | end 9 | coded_bits=uncoded_bits; 10 | end -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/soft_decision_sigma.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/soft_decision_sigma.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/soft_hard_SISO.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/soft_hard_SISO.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/硬判决.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/SISO系统的软硬判决性能/硬判决.jpg -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/LRAD_MMSE.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/LRAD_MMSE.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/SQRD_.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/SQRD_.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/original_LLL_.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/格基规约的MMSE检测/original_LLL_.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/SD_detector.m: -------------------------------------------------------------------------------- 1 | function [X_hat]=SD_detector(y,H,nT) 2 | % Input parameters 3 | % y : received signal, nRx1 4 | % H : Channel matrix, nRxnT 5 | % nT : number of Tx antennas 6 | % Output parameter 7 | % X_hat : estimated signal, nTx1 8 | 9 | global x_list; % candidate symbols in real constellations 10 | global x_now; % temporary x_vector elements 11 | global x_hat; % inv(H)*y 12 | global x_sliced; % sliced x_hat 13 | global x_pre; % x vectors obtained in the previous stage 14 | global real_constellation; % real constellation 15 | global R; % R in the QR decomposition 16 | global radius_squared; % radius^2 17 | global x_metric; % ML metrics of previous stage candidates 18 | global len; % nT*2 19 | QAM_table2 = [-3-3j, -3-j, -3+3j, -3+j, -1-3j, -1-j, -1+3j, -1+j,3-3j, ... 20 | 3-j, 3+3j, 3+j, 1-3j, 1-j, 1+3j, 1+j]/sqrt(10); % 16-QAM 21 | real_constellation = [-3 -1 1 3]/sqrt(10); 22 | y =[real(y); imag(y)]; % y : complex vector -> real vector 23 | H =[real(H) -(imag(H)) ; imag(H) real(H)]; 24 | % H : complex vector -> real vector 25 | len = nT*2; % complex -> real 26 | x_list = zeros(len,4); % 4 : real constellation length, 16-QAM 27 | x_now = zeros(len,1); x_hat = zeros(len,1); x_pre = zeros(len,1); x_metric = 0; 28 | [Q,R] = qr(H); % nR x nT QR decomposition 29 | x_hat = inv(H)*y; % zero forcing equalization 30 | x_sliced = QAM16_real_slicer(x_hat,len)'; % slicing 31 | radius_squared = norm(R*(x_sliced-x_hat))^2; % Radious^2 32 | transition = 1; 33 | % meaning of transition 34 | % 0 : radius*2, 1~len : stage number 35 | % len+1 : compare two vectors in terms of norm values 36 | % len+2 : finish 37 | flag = 1; 38 | % transition tracing 0 : stage index increases by +1 39 | %1 : stage index decreases by -1 40 | %2 : 1->len+2 or len+1->1 41 | while (transition x_now empty -> new x_now 60 | % flag = 1 : stage index decreased -> new x_now 61 | % flag = 2 : previous stage index =len+1 -> If R>R'? start from the first stage 62 | % transition : stage number 63 | % Output parameters 64 | % flag : stage number is calculated from flag 65 | % transition : next stage number, 0 : R*2, 1: next stage, len+2: finish 66 | global x_list x_metric x_now x_hat real_constellation R radius_squared x_sliced; 67 | 68 | global x_list; 69 | global x_metric; 70 | global x_now; 71 | global x_hat; 72 | global real_constellation; 73 | global R; 74 | global radius_squared; 75 | global x_sliced; 76 | stage_index = length(R(1,:))-(transition-1); 77 | if flag == 2 % previous stage=len+1 : recalculate radius R' 78 | radius_squared = norm(R*(x_sliced-x_hat))^2; 79 | end 80 | if flag ~= 0 % previous stage=len+1 or 0 81 | -> upper and lower bound calculation, x_list(stage_index,:) 82 | [bound_lower bound_upper] = bound(transition); 83 | for i =1:4 % search for a candidate in x_now(stage_index), 84 | % 4=size(real_constellation), 16-QAM assumed 85 | if bound_lower <= real_constellation(i) && real_constellation(i) <= bound_upper 86 | list_len = list_length(x_list(stage_index,:)); 87 | x_list(stage_index,list_len+1) = real_constellation(i); 88 | end 89 | end 90 | end 91 | list_len = list_length(x_list(stage_index,:)); 92 | if list_len == 0 % no candidate in x_now 93 | if x_metric == 0 || transition ~= 1 94 | % transition >=2 ? if no candidate ? decrease stage index 95 | flag = 0; 96 | transition = transition-1; 97 | elseif x_metric ~= 0 && transition == 1 98 | % above two conditions are met? ML solution found 99 | transition = length(R(1,:))+2; % finish stage 100 | end 101 | else % candidate exist in x_now ? increase stage index 102 | flag = 1; 103 | transition = transition+1; 104 | x_now(stage_index) = x_list(stage_index,1); 105 | x_list(stage_index,:) = [x_list(stage_index,[2:4]) 0]; 106 | end 107 | 108 | function [bound_lower bound_upper]=bound(transition) 109 | % Input parameters 110 | % R : [Q R] = qr(H) 111 | % radius_squared : R^2 112 | % transition : stage number 113 | % x_hat : inv(H)*y 114 | % x_now : slicing x_hat 115 | % Output parameters 116 | % bound_lower : bound lower 117 | % bound_upper : bound upper 118 | 119 | global R radius_squared x_now x_hat; 120 | len = length(x_hat); 121 | temp_sqrt = radius_squared; 122 | temp_k=0; 123 | for i=1:1:transition-1 124 | temp_abs=0; 125 | for k=1:1:i 126 | index_1 = len-(i-1); 127 | index_2 = index_1+ (k-1); 128 | temp_k = R(index_1,index_2)*(x_now(index_2)-x_hat(index_2)); 129 | temp_abs=temp_abs+temp_k; 130 | end 131 | temp_sqrt = temp_sqrt - abs(temp_abs)^2; 132 | end 133 | temp_sqrt = sqrt(temp_sqrt); 134 | temp_no_sqrt = 0; 135 | index_1 = len-(transition-1); 136 | index_2 = index_1; 137 | for i=1:1:transition-1 138 | index_2 = index_2+1; 139 | temp_i = R(index_1,index_2)*(x_now(index_2)-x_hat(index_2)); 140 | temp_no_sqrt = temp_no_sqrt - temp_i; 141 | end 142 | temp_lower = -temp_sqrt + temp_no_sqrt; 143 | temp_upper = temp_sqrt + temp_no_sqrt; 144 | index = len-(transition-1); 145 | bound_lower = temp_lower/R(index,index) + x_hat(index); 146 | bound_upper = temp_upper/R(index,index) + x_hat(index); 147 | bound_upper = fix(bound_upper*sqrt(10))/sqrt(10); 148 | bound_lower = ceil(bound_lower*sqrt(10))/sqrt(10); 149 | end 150 | 151 | function [len]=list_length(list) 152 | % Input parameter 153 | % list : vector type 154 | % Output parameter 155 | % len : index number 156 | 157 | len = 0; 158 | for i=1:4 159 | if list(i)==0, break; else len = len+1; end 160 | end 161 | end 162 | 163 | function [flag,transition,radius_squared,x_list] =radius_control(radius_squared,transition) 164 | % Input parameters 165 | % radius_squared : current radius 166 | % transition : current stage number 167 | % Output parameters 168 | % radius_squared : doubled radius 169 | % transition : next stage number 170 | % flag : next stage number is calculated from flag 171 | global len; 172 | radius_squared = radius_squared*2; 173 | transition = transition+1; 174 | flag = 1; 175 | x_list(len,:)=zeros(1,4); 176 | end 177 | 178 | function [check]=vector_comparison(vector_1,vector_2) 179 | % check if the two vectors are the same 180 | % Input parameters 181 | % pre_x : vector 1 182 | % now_x : vector 2 183 | % Output parameters 184 | % check : 1-> same vectors, 0-> different vectors 185 | check = 0; 186 | len1 = length(vector_1); len2 = length(vector_2); 187 | if len1 ~= len2 188 | error('vector size is different'); 189 | end 190 | for column_num = 1:len1 191 | if vector_1(column_num,1) == vector_2(column_num,1) 192 | check = check + 1; 193 | end 194 | end 195 | if check == len1, check = 1; 196 | else check = 0; 197 | end 198 | end 199 | 200 | function [flag,transition]=compare_vector_norm(transition) 201 | % stage index increased(flag = 1) : recalculate x_list(index,:) 202 | % stage index decreased(flag = 0) : in the previous stage, no candidate x_now in x_list 203 | % Input parameters 204 | % flag : previous stage 205 | % transition : stage number 206 | % Output parameters 207 | % flag : next stage number is calculated from flag 208 | % transition : next stage number 209 | global x_list x_pre x_metric x_now x_hat R radius_squared x_sliced len; 210 | vector_identity = vector_comparison(x_pre,x_now); 211 | % check if the new candidate is among the ones we found before 212 | if vector_identity == 1 213 | % if 1 ? ML solution found 214 | len_total = 0; 215 | for i=1:len % if the vector is unique ? len_total = 0 216 | len_total = len_total + list_length(x_list(i,:)); 217 | end 218 | if len_total == 0 % ML solution vector found 219 | transition = len+2; % finish 220 | flag = 1; 221 | else % more than one candidates 222 | transition = transition-1; % go back to the previous stage 223 | flag =0; 224 | end 225 | else % if 0 ? new candidate vector is different from the previous candidate vector and norm is smaller ? restart 226 | x_sliced_temp = x_now; 227 | metric_temp = norm(R*(x_sliced_temp-x_hat))^2; 228 | if metric_temp <= radius_squared 229 | % new candidate vector has smaller metric ? restart 230 | x_pre = x_now; x_metric = metric_temp; 231 | x_sliced = x_now; transition = 1; % restart 232 | flag = 2; x_list=zeros(len,4); % initialization 233 | x_now=zeros(len,1); % initialization 234 | else % new candidate vector has a larger ML metric 235 | transition = transition-1; % go back to the previous stage 236 | flag =0; 237 | end 238 | end 239 | end 240 | -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/bound.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/bound.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/compare_vector_norm.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/compare_vector_norm.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/list_length.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/list_length.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/radius_control.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/radius_control.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/stage_processing.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/stage_processing.m -------------------------------------------------------------------------------- /第11章 空间复用的MIMO系统的信号检测/球形译码/vector_comparison.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第11章 空间复用的MIMO系统的信号检测/球形译码/vector_comparison.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/MMSE预均衡/pre_MMSE.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/MMSE预均衡/pre_MMSE.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/天线选择技术/Alamouti_2x1_ant_selection.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/天线选择技术/Alamouti_2x1_ant_selection.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/天线选择技术/MIMO_channel_cap_ant_sel_optimal.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/天线选择技术/MIMO_channel_cap_ant_sel_optimal.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/天线选择技术/MIMO_channel_cap_ant_sel_subopt.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/天线选择技术/MIMO_channel_cap_ant_sel_subopt.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/码本生成和预编码/Alamouti_2x1_precoding.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/码本生成和预编码/Alamouti_2x1_precoding.m -------------------------------------------------------------------------------- /第12章 在发射端利用信道状态信息/码本生成和预编码/codebook_generator.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第12章 在发射端利用信道状态信息/码本生成和预编码/codebook_generator.m -------------------------------------------------------------------------------- /第13章 多用户MIMO/信道反转的多用户MIMO系统/QPSK_mapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第13章 多用户MIMO/信道反转的多用户MIMO系统/QPSK_mapper.m -------------------------------------------------------------------------------- /第13章 多用户MIMO/信道反转的多用户MIMO系统/multi_user_MIMO.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第13章 多用户MIMO/信道反转的多用户MIMO系统/multi_user_MIMO.m -------------------------------------------------------------------------------- /第13章 多用户MIMO/块对角化/Block_diagonalization.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第13章 多用户MIMO/块对角化/Block_diagonalization.m -------------------------------------------------------------------------------- /第13章 多用户MIMO/脏纸编码和Tomlinson-Harashima预编码/Dirty_or_TH_precoding.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第13章 多用户MIMO/脏纸编码和Tomlinson-Harashima预编码/Dirty_or_TH_precoding.m -------------------------------------------------------------------------------- /第13章 多用户MIMO/脏纸编码和Tomlinson-Harashima预编码/modulo.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第13章 多用户MIMO/脏纸编码和Tomlinson-Harashima预编码/modulo.m -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/IEEE802.16d模型/IEEE 802.16d Path loss Models.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/IEEE802.16d模型/IEEE 802.16d Path loss Models.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/IEEE802.16d模型/Modified IEEE 802.16d Path loss Models.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/IEEE802.16d模型/Modified IEEE 802.16d Path loss Models.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/IEEE802.16d模型/PL_IEEE80216d.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/IEEE802.16d模型/PL_IEEE80216d.m -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/IEEE802.16d模型/plot_PL_IEEE80216d.m: -------------------------------------------------------------------------------- 1 | clear, clf, clc 2 | fc=2e9; 3 | htx=[30 30]; 4 | hrx=[2 10]; 5 | distance=[1:1000]; 6 | for k=1:2 7 | y_IEEE16d(k,:)=PL_IEEE80216d(fc,distance,'B',htx(k),hrx(k),'ATNT'); 8 | y_MIEEE16d(k,:)=PL_IEEE80216d(fc,distance,'B',htx(k),hrx(k),'ATNT','mod'); 9 | end 10 | figure(1) 11 | semilogx(distance,y_IEEE16d(1,:),'k:','linewidth',1.5), hold on 12 | semilogx(distance,y_IEEE16d(2,:),'k-','linewidth',1.5), grid on 13 | title(['IEEE 802.16d Path loss Models, f_c=',num2str(fc/1e6),'MHz']) 14 | axis([1 1000 10 150]), xlabel('Distance[m]'), ylabel('Pathloss[dB]') 15 | legend('h_{Tx}=30m, h_{Rx}=2m','h_{Tx}=30m, h_{Rx}=10m',2) 16 | figure(2) 17 | semilogx(distance,y_MIEEE16d(1,:),'k:','linewidth',1.5), hold on 18 | semilogx(distance,y_MIEEE16d(2,:),'k-','linewidth',1.5), grid on 19 | title(['Modified IEEE 802.16d Path loss Models, f_c=', num2str(fc/1e6), 'MHz']) 20 | axis([1 1000 10 150]), xlabel('Distance[m]'), ylabel('Pathloss[dB]') 21 | legend('h_{Tx}=30m, h_{Rx}=2m','h_{Tx}=30m, h_{Rx}=10m',2) -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/Okumura&Hata模型/Hata PL model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/Okumura&Hata模型/Hata PL model.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/Okumura&Hata模型/PL_Hata.m: -------------------------------------------------------------------------------- 1 | function PL=PL_Hata(fc,d,htx,hrx,Etype) 2 | % Hata Model 3 | % Input 4 | % fc : carrier frequency[Hz] 5 | % d : between base station and mobile station[m] 6 | % htx : height of transmitter[m] 7 | % hrx : height of receiver[m] 8 | % Etype : Environment Type('urban','suburban','open') 9 | % output 10 | % PL : path loss[dB] 11 | if nargin<5, Etype = 'URBAN'; end 12 | fc=fc/(1e6); 13 | if fc>=150&&fc<=200, C_Rx = 8.29*(log10(1.54*hrx))^2 - 1.1; 14 | elseif fc>200, C_Rx = 3.2*(log10(11.75*hrx))^2 - 4.97; 15 | else C_Rx = 0.8+(1.1*log10(fc)-0.7)*hrx-1.56*log10(fc); 16 | end 17 | PL = 69.55 +26.16*log10(fc) -13.82*log10(htx) -C_Rx ... 18 | +(44.9-6.55*log10(htx))*log10(d/1000); 19 | EType = upper(Etype); 20 | if EType(1)=='S', PL = PL -2*(log10(fc/28))^2 -5.4; 21 | elseif EType(1)=='O' 22 | PL=PL+(18.33-4.78*log10(fc))*log10(fc)-40.97; 23 | end -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/Okumura&Hata模型/plot_PL_Hata.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/Okumura&Hata模型/plot_PL_Hata.m -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/Ray_model.m: -------------------------------------------------------------------------------- 1 | function H=Ray_model(L) 2 | % Rayleigh Channel Model 3 | % Input : L : # of channel realization 4 | % Output: H : Channel vector 5 | H = (randn(1,L)+j*randn(1,L))/sqrt(2); -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/Rayleigh model&Rician model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/Rayleigh model&Rician model.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/Ric_model.m: -------------------------------------------------------------------------------- 1 | function H=Ric_model(K_dB,L) 2 | % Rician Channel Model 3 | % Input: 4 | % K_dB : K factor [dB] 5 | % L : # of channel realization 6 | % Output: 7 | % h : channel vector 8 | K=10^(K_dB/10); 9 | H = sqrt(K/(K+1)) + sqrt(1/(K+1))*Ray_model(L); -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/plot_Ray_Ric_channel.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/瑞利衰落和莱斯衰落信道模型/plot_Ray_Ric_channel.m -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/Free PL Models.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/自由空间路径损耗/Free PL Models.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/Log-distance PL model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/自由空间路径损耗/Log-distance PL model.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/Log-normal PL model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/自由空间路径损耗/Log-normal PL model.jpg -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/PL_free.m: -------------------------------------------------------------------------------- 1 | function PL=PL_free(fc,dist,Gt,Gr) 2 | % Free Space Path loss Model 3 | % Input 4 | % fc : carrier frequency[Hz] 5 | % dist : between base station and mobile station[m] 6 | % Gt : transmitter gain 7 | % Gr : receiver gain 8 | % output 9 | % PL : path loss[dB] 10 | lamda = 3e8/fc; 11 | tmp = lamda./(4*pi*dist); 12 | if nargin>2 13 | tmp = tmp*sqrt(Gt); 14 | end 15 | if nargin>3 16 | tmp = tmp*sqrt(Gr); 17 | end 18 | PL = -20*log10(tmp); -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/PL_logdist_or_norm.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/自由空间路径损耗/PL_logdist_or_norm.m -------------------------------------------------------------------------------- /第1章 无线信道:传播和衰落/自由空间路径损耗/plot_PL_general.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第1章 无线信道:传播和衰落/自由空间路径损耗/plot_PL_general.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/2径信道模型和指数信道模型/2-ray model&exponential model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/2径信道模型和指数信道模型/2-ray model&exponential model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/2径信道模型和指数信道模型/Ray_model.m: -------------------------------------------------------------------------------- 1 | function H=Ray_model(L) 2 | % Rayleigh Channel Model 3 | % Input : L : # of channel realization 4 | % Output: H : Channel vector 5 | H = (randn(1,L)+j*randn(1,L))/sqrt(2); 6 | -------------------------------------------------------------------------------- /第2章 SISO信道模型/2径信道模型和指数信道模型/exp_PDP.m: -------------------------------------------------------------------------------- 1 | function PDP=exp_PDP(tau_d,Ts,A_dB,norm_flag) 2 | % Exponential PDP generator 3 | % Input: 4 | % tau_d : rms delay spread in second 5 | % Ts : Sampling time in second 6 | % A_dB : the smallest noticeable power in dB 7 | % norm_flag : normalizes total power to unit 8 | % Output: 9 | % PDP : PDP vector 10 | 11 | if nargin<4 12 | norm_flag=1; 13 | end % normalizes 14 | if nargin<3 15 | A_dB=-20; 16 | end % 20dB below 17 | sigma_tau = tau_d; 18 | A = 10^(A_dB/10); 19 | tau_max=ceil(-tau_d*log(A)/Ts); 20 | % Computes normalization factor for power normalization 21 | if norm_flag 22 | p0=(1-exp(-Ts/sigma_tau))/(1-exp(-(tau_max+1)*Ts/sigma_tau)); 23 | else 24 | p0=1/sigma_tau; 25 | end 26 | % Exponential PDP 27 | p=0:tau_max; 28 | PDP = p0*exp(-p*Ts/sigma_tau); -------------------------------------------------------------------------------- /第2章 SISO信道模型/2径信道模型和指数信道模型/plot_2ray_exp_model.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/2径信道模型和指数信道模型/plot_2ray_exp_model.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/FWGN信道模型/Doppler_spectrum.m: -------------------------------------------------------------------------------- 1 | function y=Doppler_spectrum(fd,Nfft) 2 | % fd=maximum Doppler frequency 3 | % Nfft=number of frequency domain points 4 | df = 2*fd/Nfft; % Frequency Spacing. 5 | % The DC component first. 6 | f(1) = 0; 7 | y(1) = 1.5/(pi*fd); 8 | % The other components for ONE side the spectrum. 9 | for i = 2:Nfft/2, 10 | f(i) = (i-1)*df; % The frequency indices for polynomial fitting. 11 | y([i Nfft-i+2]) = 1.5/(pi*fd*sqrt(1- (f(i)/fd)^2)); 12 | end 13 | % nyquist frequency applied polynomial fitting using the last 3 frequency samples. 14 | nFitPoints=3 ; 15 | kk=[Nfft/2-nFitPoints:Nfft/2]; % good enough. 16 | polyFreq = polyfit(f(kk),y(kk),nFitPoints); 17 | y(Nfft/2+1) = polyval(polyFreq,f(Nfft/2)+df); 18 | -------------------------------------------------------------------------------- /第2章 SISO信道模型/FWGN信道模型/FWGN_model.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/FWGN信道模型/FWGN_model.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/FWGN信道模型/channel modeled by Clarke&Gan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/FWGN信道模型/channel modeled by Clarke&Gan.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/FWGN信道模型/plot_FWGN.m: -------------------------------------------------------------------------------- 1 | clear, clf 2 | fm=100; % Maximum Doppler frquency 3 | ts_mu=50; 4 | scale=1e-6; 5 | ts=ts_mu*scale; % Sampling time 6 | fs=1/ts; % Sampling frequency 7 | Nd=1e6; % Number of samples 8 | % To get the complex fading channel 9 | [h,Nfft,Nifft,doppler_coeff] = FWGN_model(fm,fs,Nd); 10 | subplot(211) 11 | plot([1:Nd]*ts,10*log10(abs(h))) 12 | axis([0 0.5 -30 5]) 13 | str = sprintf('channel modeled by Clarke/Gan with f_m=%d[Hz], T_s=%d[mus]',fm,ts_mu); 14 | title(str), xlabel('time[s]'), ylabel('Magnitude[dB]') 15 | subplot(223) 16 | hist(abs(h),50) 17 | xlabel('Magnitude') 18 | ylabel('Occasions') 19 | subplot(224) 20 | hist(angle(h),50) 21 | xlabel('Phase[rad]') 22 | ylabel('Occasions') -------------------------------------------------------------------------------- /第2章 SISO信道模型/IEEE802.11信道模型/Frequency response.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/IEEE802.11信道模型/Frequency response.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/IEEE802.11信道模型/IEEE 802.11 Model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/IEEE802.11信道模型/IEEE 802.11 Model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/IEEE802.11信道模型/Ray_model.m: -------------------------------------------------------------------------------- 1 | function H=Ray_model(L) 2 | % Rayleigh Channel Model 3 | % Input : L : # of channel realization 4 | % Output: H : Channel vector 5 | H = (randn(1,L)+j*randn(1,L))/sqrt(2); 6 | -------------------------------------------------------------------------------- /第2章 SISO信道模型/IEEE802.11信道模型/ieee802_11_model.m: -------------------------------------------------------------------------------- 1 | function PDP=ieee802_11_model(sigma_tau,Ts) 2 | % IEEE 802.11 channel model PDP generator 3 | % Input: 4 | % sigma_tau : RMS delay spread 5 | % Ts : Sampling time 6 | % Output: 7 | % PDP : Power delay profile 8 | 9 | lmax = ceil(10*sigma_tau/Ts); 10 | sigma02=(1-exp(-Ts/sigma_tau))/(1-exp(-(lmax+1)*Ts/sigma_tau)); % (2.9) 11 | l=0:lmax; 12 | PDP = sigma02*exp(-l*Ts/sigma_tau); % (2.8) -------------------------------------------------------------------------------- /第2章 SISO信道模型/IEEE802.11信道模型/plot_IEEE80211_model.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/IEEE802.11信道模型/plot_IEEE80211_model.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/Jakes模型/Channel Modeled by Jakes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/Jakes模型/Channel Modeled by Jakes.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/Jakes模型/Jakes_Flat.m: -------------------------------------------------------------------------------- 1 | function [h,tf]=Jakes_Flat(fd,Ts,Ns,t0,E0,phi_N) 2 | % Inputs: 3 | % fd : Doppler frequency 4 | % Ts : sampling period 5 | % Ns : number of samples 6 | % t0 : initial time 7 | % E0 : channel power 8 | % phi_N : inital phase of the maximum doppler frequency sinusoid 9 | % Outputs: 10 | % h : complex fading vector 11 | % t_state: current time 12 | if nargin<6 13 | phi_N=0; 14 | end 15 | if nargin<5 16 | E0=1; 17 | end 18 | if nargin<4 19 | t0=0; 20 | end 21 | if nargin<3 22 | error('More arguments are needed for Jakes_Flat()'); 23 | end 24 | N0=8; % As suggested by Jakes 25 | N=4*N0+2; % an accurate approximation 26 | wd=2*pi*fd; % Maximum doppler frequency[rad] 27 | %t_state = t0; 28 | %for i=1:Ns 29 | % ich=sqrt(2)*cos(phi_N)*cos(wd*t_state); 30 | % qch=sqrt(2)*sin(phi_N)*cos(wd*t_state); 31 | % for k=1:N0 32 | % phi_n=pi*k/(N0+1); 33 | % wn=wd*cos(2*pi*k/N); 34 | % ich=ich+2*cos(phi_n)*cos(wn*t_state); 35 | % qch=qch+2*sin(phi_n)*cos(wn*t_state); 36 | % end 37 | % h1(i) = E0/sqrt(2*N0+1)*complex(ich,qch); 38 | % t_state=t_state+Ts; % save last time 39 | %end 40 | t = t0+[0:Ns-1]*Ts; 41 | tf = t(end)+Ts; 42 | coswt = [sqrt(2)*cos(wd*t); 2*cos(wd*cos(2*pi/N*[1:N0]')*t)]; % (2.32) 43 | h = E0/sqrt(2*N0+1)*exp(j*[phi_N pi/(N0+1)*[1:N0]])*coswt; 44 | % discrepancy = norm(h-h1) -------------------------------------------------------------------------------- /第2章 SISO信道模型/Jakes模型/plot_Jakes_model.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/Jakes模型/plot_Jakes_model.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/Doppler_PSD_function.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/SUI信道模型/Doppler_PSD_function.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/SUI model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/SUI信道模型/SUI model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/SUI_fading.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/SUI信道模型/SUI_fading.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/SUI_parameters.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/SUI信道模型/SUI_parameters.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/gen_filter.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/SUI信道模型/gen_filter.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/SUI信道模型/plot_SUI_channel.m: -------------------------------------------------------------------------------- 1 | % plot_SUI_channel.m 2 | clear, clf 3 | ch_no=6; 4 | fc=2e9; 5 | fs_Hz=1e7; 6 | Nfading=1024; % Size of Doppler filter 7 | N=10000; 8 | Nos=4; 9 | [Delay_us, P_dB, K_factor, Dopplershift_Hz, Ant_corr, Fnorm_dB]=SUI_parameters(ch_no); 10 | [FadTime,tf]=SUI_fading(P_dB, K_factor, Dopplershift_Hz, Fnorm_dB, N, Nfading, Nos); 11 | K1= size(FadTime,2)-1; 12 | c_table=['b';'r';'k';'m']; 13 | subplot(311) 14 | stem(Delay_us,10.^(P_dB/10)); 15 | grid on, xlabel('Delay time[ms]'), ylabel('Channel gain'); 16 | title(['PDP of Channel No.',num2str(ch_no)]), set(gca,'fontsize',9) 17 | subplot(312) 18 | for k=1:length(P_dB) 19 | plot([0:K1]*tf,20*log10(abs(FadTime(k,:))),c_table(k,:)); hold on 20 | end 21 | grid on, xlabel('Time[s]'), ylabel('Channel Power[dB]'); 22 | title(['Channel No.',num2str(ch_no)]), axis([0 60 -50 10]) 23 | legend('Path 1','Path 2','Path 3'), set(gca,'fontsize',9) 24 | idx_nonz= find(Dopplershift_Hz); 25 | FadFreq= ones(length(Dopplershift_Hz),Nfading); 26 | for k=1:length(idx_nonz) 27 | max_dsp= 2*Nos*max(Dopplershift_Hz); 28 | dfmax= max_dsp/Nfading; % Doppler frequency spacing respect to maximal Doppler frequency 29 | Nd= floor(Dopplershift_Hz(k)/dfmax)-1; 30 | f0 = [-Nd+1:Nd]/Nd; % frequency vector 31 | f = f0.*Dopplershift_Hz(k); 32 | tmp=0.785*f0.^4 - 1.72*f0.^2 + 1.0; 33 | hpsd=psd(spectrum.welch,FadTime(idx_nonz(k),:),'Fs',max_dsp,'SpectrumType','twosided'); 34 | nrom_f=hpsd.Frequencies-mean(hpsd.Frequencies); 35 | PSD_d=fftshift(hpsd.Data); 36 | subplot(3,3,6+k), plot(nrom_f,PSD_d,'b', f,tmp,'r') 37 | xlabel('Frequency[Hz]'), axis([-1 1 0 1.1*max([PSD_d.' tmp])]) 38 | title(['h_',num2str(idx_nonz(k)),' path']); set(gca,'fontsize',9) 39 | end -------------------------------------------------------------------------------- /第2章 SISO信道模型/Saleh-Valenzuela信道模型/S-V model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/Saleh-Valenzuela信道模型/S-V model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/Saleh-Valenzuela信道模型/SV_model_ct.m: -------------------------------------------------------------------------------- 1 | function [h,t,t0,np]=SV_model_ct(Lam,lam,Gam,gam,num_ch,b002,sdi,nlos) 2 | % S-V channel model 3 | % Input 4 | % Lam : Cluster arrival rate in GHz (avg # of clusters per nsec) 5 | % lam : Ray arrival rate in GHz (avg # of rays per nsec) 6 | % Gam : Cluster decay factor (time constant, nsec) 7 | % gam : Ray decay factor (time constant, nsec) 8 | % num_ch : number of random realizations to generate 9 | % b002 : power of first ray of first cluster 10 | % sdi : Standard deviation of log-normal shadowing 11 | % of entire impulse response [dB] 12 | % nlos : Flag to specify generation of Non Line Of Sight channels 13 | % Output 14 | % h: a matrix with num_ch columns, each column 15 | % having a random realization of channel model (impulse response) 16 | % t: organized as h, but holds the time instances (in nsec) of the 17 | % paths whose signed amplitudes are stored in h 18 | % t0: the arrival time of the first cluster for each realization 19 | % np: the number of paths for each realization. 20 | % Thus, the k'th realization of the channel impulse response is the 21 | % sequence of (time,value) pairs given by(t(1:np(k),k),h(1:np(k),k)) 22 | if nargin<8 23 | nlos=0; 24 | end % LOS environment 25 | if nargin<7 26 | sdi=0; 27 | end % 0dB 28 | if nargin<6 29 | b002=1; 30 | end % power of first ray of first cluster 31 | h_len=1000; %There must be a better estimate of # of paths than??? 32 | for k=1:num_ch % loop over number of channels 33 | tmp_h = zeros(h_len,1); 34 | tmp_t = zeros(h_len,1); 35 | if nlos 36 | Tc = exprnd(1/Lam); % First cluster random arrival 37 | else 38 | Tc = 0; % First cluster arrival occurs at time 0 39 | end 40 | t0(k) = Tc; 41 | path_ix = 0; 42 | while (Tc<10*Gam) % cluster loop 43 | % Determine Ray arrivals for each cluster 44 | Tr=0; %1st ray arrival defined to be time 0 relative to cluster 45 | while (Tr<10*gam) % ray loop 46 | brm2 = b002*exp(-Tc/Gam)*exp(-Tr/gam); % ray power (2.20) 47 | r = sqrt(randn^2+randn^2)*sqrt(brm2/2); 48 | % rayleigh distributed mean power pow_bkl 49 | h_val=exp(j*2*pi*rand)*r; % uniform phase 50 | path_ix = path_ix+1; % row index of this ray 51 | tmp_h(path_ix) = h_val; 52 | tmp_t(path_ix) = Tc+Tr; % time of arrival of this ray 53 | Tr = Tr + exprnd(1/Lam); % (2.16) ??? 54 | end 55 | Tc = Tc + exprnd(1/lam); % (2.17) ??? 56 | end 57 | np(k)=path_ix; % number of rays (or paths) for this realization 58 | [sort_tmp_t,sort_ix] = sort(tmp_t(1:np(k))); %in ascending order 59 | t(1:np(k),k) = sort_tmp_t; 60 | h(1:np(k),k) = tmp_h(sort_ix(1:np(k))); 61 | % now impose a log-normal shadowing on this realization 62 | fac = 10^(sdi*randn/20)/sqrt(h(1:np(k),k)'*h(1:np(k),k)); 63 | h(1:np(k),k) = h(1:np(k),k)*fac; % (2.21) 64 | end -------------------------------------------------------------------------------- /第2章 SISO信道模型/Saleh-Valenzuela信道模型/plot_SV_model_ct.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/Saleh-Valenzuela信道模型/plot_SV_model_ct.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/UWB model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/UWB信道模型/UWB model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/UWB_model_ct.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/UWB信道模型/UWB_model_ct.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/UWB_parameters.m: -------------------------------------------------------------------------------- 1 | function [Lam,lam,Gam,gam,nlos,sdi,sdc,sdr]=UWB_parameters(cm) 2 | % S-V model parameters for standard UWB channel models 3 | % Input 4 | % cm=1 : based on TDC measurements for LOS 0-4m 5 | % cm=2 : based on TDC measurements for NLOS 0-4m 6 | % cm=3 : based on TDC measurements for NLOS 4-10m 7 | % cm=4 : 25 nsec RMS delay spread bad multipath channel 8 | % Output 9 | % Lam : Cluster arrival rate (clusters per nsec) 10 | % lam : Ray arrival rate (rays per nsec) 11 | % Gam : Cluster decay factor (time constant, nsec) 12 | % gam : Ray decay factor (time constant, nsec) 13 | % nlos : Flag for non line of sight channel 14 | % sdi : Standard deviation of log-normal shadowing of entire impulse response 15 | % sdc : Standard deviation of log-normal variable for cluster fading 16 | % sdr : Standard deviation of log-normal variable for ray fading 17 | % Table 2.1: 18 | tmp = 4.8/sqrt(2); 19 | Tb2_1= [0.0233 2.5 7.1 4.3 0 3 tmp tmp; 0.4 0.5 5.5 6.7 1 3 tmp tmp; 20 | 0.0667 2.1 14.0 7.9 1 3 tmp tmp; 0.0667 2.1 24 12 1 3 tmp tmp]; 21 | Lam = Tb2_1(cm,1); lam = Tb2_1(cm,2); Gam = Tb2_1(cm,3); gam = Tb2_1(cm,4); 22 | nlos= Tb2_1(cm,5); sdi = Tb2_1(cm,6); 23 | sdc = Tb2_1(cm,7); sdr = Tb2_1(cm,8); -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/cm1_imr.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/UWB信道模型/cm1_imr.mat -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/cm1_imr_np.csv: -------------------------------------------------------------------------------- 1 | 202,688,325,216,324,329,206,436,221,112,425,116,329,310,117,315,106,231,422,118,309,465,121,320,109,197,342,234,574,308,223,110,341,216,412,101,781,206,301,239,444,203,216,213,235,198,206,426,109,115,109,502,221,105,228,443,400,223,323,113,301,298,433,316,104,197,317,213,346,442,652,222,122,100,191,109,317,530,108,322,216,103,297,205,213,198,104,109,210,319,197,236,208,341,406,208,204,116,204,418 2 | -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/convert_UWB_ct.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/UWB信道模型/convert_UWB_ct.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/UWB信道模型/plot_UWB_channel.m: -------------------------------------------------------------------------------- 1 | % plot_UWB_channel.m 2 | clear, clf 3 | no_output_files = 0; % non-zero: avoids writing output files of continuous-time responses 4 | Ts = 0.167; % sampling time (nsec) 5 | num_ch=100; % number of channel impulse responses to generate 6 | randn('state',12); % initialize state of function for repeatability 7 | rand('state',12); % initialize state of function for repeatability 8 | cm = 1; % channel model number from 1 to 4 9 | % get channel model params based on this channel model number 10 | [Lam,lam,Gam,gam,nlos,sdi,sdc,sdr] = UWB_parameters(cm); 11 | fprintf(1,['Model Parameters\n' ' Lam= %.4f, lam= %.4f, Gam= %.4f, gam= %.4f\n NLOS flag= %d, std_shdw= %.4f, std_ln_1= %.4f, std_ln_2= %.4f\n'],... 12 | Lam,lam,Gam,gam,nlos,sdi,sdc,sdr); 13 | % get a bunch of realizations (impulse responses) 14 | [h_ct,t_ct,t0,np] = UWB_model_ct(Lam,lam,Gam,gam,num_ch,nlos,sdi,sdc,sdr); 15 | % now reduce continuous-time result to a discrete-time result 16 | [hN,N] = convert_UWB_ct(h_ct,t_ct,np,num_ch,Ts); 17 | % if we wanted complex baseband model or to impose some filtering function, 18 | % this would be a good place to do it 19 | h = resample(hN,1,N); % decimate the columns of hN by factor N 20 | h = h*N; % correct for 1/N scaling imposed by decimation 21 | channel_energy = sum(abs(h).^2); % channel energy 22 | h_len = size(h,1); 23 | t = [0:(h_len-1)]*Ts; % for use in computing excess & RMS delays 24 | 25 | for k=1:num_ch 26 | % determine excess delay and RMS delay 27 | sq_h = abs(h(:,k)).^2/channel_energy(k); 28 | t_norm = t - t0(k); % remove the randomized arrival time of first cluster 29 | excess_delay(k) = t_norm*sq_h; 30 | rms_delay(k) = sqrt((t_norm-excess_delay(k)).^2*sq_h); 31 | % determine # of significant paths (paths within 10 dB from peak) 32 | threshold_dB = -10; % dB 33 | temp_h = abs(h(:,k)); 34 | temp_thresh = 10^(threshold_dB/20)*max(temp_h); 35 | num_sig_paths(k) = sum(temp_h>temp_thresh); 36 | % determine number of sig. paths (captures x % of energy in channel) 37 | x = 0.85; 38 | temp_sort = sort(temp_h.^2); % sorted in ascending order of energy 39 | cum_energy = cumsum(temp_sort(end:-1:1)); % cumulative energy 40 | index_e = min(find(cum_energy >= x*cum_energy(end))); 41 | num_sig_e_paths(k) = index_e; 42 | end 43 | energy_mean = mean(10*log10(channel_energy)); 44 | energy_stddev = std(10*log10(channel_energy)); 45 | mean_excess_delay = mean(excess_delay); 46 | mean_rms_delay = mean(rms_delay); 47 | mean_sig_paths = mean(num_sig_paths); 48 | mean_sig_e_paths = mean(num_sig_e_paths); 49 | 50 | fprintf(1,'Model Characteristics\n'); 51 | fprintf(1,' Mean delays: excess (tau_m) = %.1f ns, RMS (tau_rms) = %1.f\n', ... 52 | mean_excess_delay, mean_rms_delay); 53 | fprintf(1,' # paths: NP_10dB = %.1f, NP_85%% = %.1f\n', ... 54 | mean_sig_paths, mean_sig_e_paths); 55 | fprintf(1,' Channel energy: mean = %.1f dB, std deviation = %.1f dB\n', ... 56 | energy_mean, energy_stddev); 57 | 58 | subplot(421), plot(t,h), grid on 59 | title('Impulse response realizations'), xlabel('Time (nS)') 60 | 61 | subplot(422), plot([1:num_ch], excess_delay, 'b-', ... 62 | [1 num_ch], mean_excess_delay*[1 1], 'r--' ); 63 | grid on, title('Excess delay (nS)'), xlabel('Channel number') 64 | 65 | subplot(423), plot([1:num_ch], rms_delay, 'b-', ... 66 | [1 num_ch], mean_rms_delay*[1 1], 'r--' ); 67 | grid on, title('RMS delay (nS)'), xlabel('Channel number') 68 | 69 | subplot(424), plot([1:num_ch], num_sig_paths, 'b-', ... 70 | [1 num_ch], mean_sig_paths*[1 1], 'r--'); 71 | grid on, title('Number of significant paths within 10 dB of peak') 72 | xlabel('Channel number') 73 | 74 | subplot(427), plot([1:num_ch], num_sig_e_paths, 'b-', ... 75 | [1 num_ch], mean_sig_e_paths*[1 1], 'r--'); 76 | grid on, title('Number of significant paths capturing > 85% energy') 77 | xlabel('Channel number') 78 | 79 | temp_average_power = sum(h'.*(h)')/num_ch; 80 | temp_average_power = temp_average_power/max(temp_average_power); 81 | average_decay_profile_dB = 10*log10(temp_average_power); 82 | subplot(425), plot(t,average_decay_profile_dB); grid on 83 | axis([0 t(end) -60 0]), title('Average Power Decay Profile') 84 | xlabel('Delay (nsec)'), ylabel('Average power (dB)') 85 | 86 | subplot(426) 87 | figh = plot([1:num_ch],10*log10(channel_energy),'b-', ... 88 | [1 num_ch], energy_mean*[1 1], 'g--', ... 89 | [1 num_ch], energy_mean+energy_stddev*[1 1], 'r:', ... 90 | [1 num_ch], energy_mean-energy_stddev*[1 1], 'r:'); 91 | xlabel('Channel number'), ylabel('dB'), title('Channel Energy'); 92 | legend(figh, 'Per-channel energy', 'Mean', '\pm Std. deviation', 0) 93 | 94 | if no_output_files, return; end 95 | %%% save continuous-time (time,value) pairs to files 96 | save_fn = sprintf('cm%d_imr', cm); 97 | % A complete self-contained file for Matlab users 98 | save([save_fn '.mat'], 't_ct', 'h_ct', 't0', 'np', 'num_ch', 'cm'); 99 | % Two comma-delimited text files for non-Matlab users: 100 | % File #1: cmX_imr_np.csv lisTs the number of paths in each realization 101 | dlmwrite([save_fn '_np.csv'], np, ','); % number of paths 102 | % File #2: cmX_imr.csv can open with Excel 103 | % n'th pair of columns contains the (time,value) pairs for the n'th realization 104 | th_ct = zeros(size(t_ct,1),2*size(t_ct,2)); 105 | th_ct(:,1:2:end) = t_ct; % odd columns are time 106 | th_ct(:,2:2:end) = h_ct; % even columns are values 107 | fid = fopen([save_fn '.csv'], 'w'); 108 | if fid < 0, 109 | error('unable to write .csv file for impulse response, file may be open in another application'); 110 | end 111 | for k = 1:size(th_ct,1) 112 | fprintf(fid,'%.4f,%.6f,', th_ct(k,1:end)); 113 | fprintf(fid,'\r\n'); % \r\n for Windoze end-of-line 114 | end 115 | fclose(fid); -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/Ray Channel Model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/射线信道模型/Ray Channel Model.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/assign_offset.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/射线信道模型/assign_offset.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/dB2w.m: -------------------------------------------------------------------------------- 1 | function y=dB2w(dB) 2 | y=10.^(0.1*dB); -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/equalpower_subray.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/射线信道模型/equalpower_subray.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/gen_phase.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/射线信道模型/gen_phase.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/plot_ray_fading.m: -------------------------------------------------------------------------------- 1 | clear, clf 2 | fc= 9e8; % 2e9; % 2GHz 3 | fs=5e4; % 5[MHz] 4 | speed_kmh=120;%3; % 3[km/h] 5 | Ts=1/fs; % sampling frequency in sec 6 | v_ms= speed_kmh/3.6; % velocity[m/s] 7 | wl_m= 3e8/fc; % wavelength[m] 8 | % channel parameters setting: SCM case 2 9 | PDP_dB=[0. -1. -9. -10. -15. -20]; 10 | t_ns=[0 310 710 1090 1730 2510]; 11 | BS_theta_LOS_deg=0; 12 | MS_theta_LOS_deg=0; 13 | BS_AS_deg=2; % Laplacian PAS 14 | BS_AoD_deg=50*ones(size(PDP_dB)); 15 | MS_AS_deg=35; % for Lapalcian PAS 16 | DoT_deg=22.5; 17 | MS_AoA_deg=67.5*ones(size(PDP_dB)); 18 | % generates phase of a subray 19 | [BS_theta_deg,MS_theta_deg,BS_PHI_rad]=gen_phase(BS_theta_LOS_deg,BS_AS_deg,BS_AoD_deg,MS_theta_LOS_deg,MS_AS_deg,MS_AoA_deg); 20 | PDP=dB2w(PDP_dB); 21 | % generates coefficients 22 | %for k=1:10000 23 | % t=(k-1)*Ts; 24 | % h(k,:)=ray_fading0(20,PDP,BS_PHI_rad,MS_theta_deg,v_ms,DoT_deg,wl_m,t); 25 | %end 26 | %plot([1:10000]*Ts,10*log10(abs(h(:,1)))) 27 | t=[0:9999]*Ts; 28 | h= ray_fading(20,PDP,BS_PHI_rad,MS_theta_deg,v_ms,DoT_deg,wl_m,t); 29 | plot(t,10*log10(abs(h(1,:)))) 30 | title(['Ray Channel Model, f_c=',num2str(fc),'Hz, T_s=',num2str(Ts),'s']); 31 | xlabel('time[s]'), ylabel('Magnitude[dB]') -------------------------------------------------------------------------------- /第2章 SISO信道模型/射线信道模型/ray_fading.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/射线信道模型/ray_fading.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/Doppler_PSD_function.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/改进FWGN信道模型/Doppler_PSD_function.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/FWGN_ff.m: -------------------------------------------------------------------------------- 1 | function [FadTime,tf] = FWGN_ff(Np,fm_Hz,Nfading,Nfosf,FadingType,varargin) 2 | %Fadng generation based on FWGN method 3 | % FadTime= FWGN_ff(Np,fm_Hz,Nfading,Nfosf,FadingType,sigma,phi) 4 | % Inputs: 5 | % Np : # of multipath 6 | % fm_Hz : A vector of max. Doppler frequency of each path[Hz] 7 | % Nfading : Doppler filter size (IFFT size) 8 | % Nfosf : Oversampling factor of Doppler bandwith 9 | % FadingType : Doppler type, 'laplacian'/'class'/'flat' 10 | % sigma : Angle spread of UE in case of 'laplacian' Doppler type 11 | % phi : DoM-AoA in case of 'laplacian' Doppler type 12 | % Outputs: 13 | % FadTime : Np x Nfading, fading time matrix 14 | fmax= max(fm_Hz); 15 | % Doppler frequency spacing respect to maximal Doppler frequency 16 | dfmax= 2*Nfosf*fmax/Nfading; 17 | if isscalar(fm_Hz), fm_Hz= fm_Hz*ones(1,Np); end 18 | % To get a funtion corresponding to Doppler spectrum of "FadingType" 19 | FadingType= lower(FadingType); ftn_psd= Doppler_PSD_function(FadingType); 20 | err_msg= 'The difference between max and min Doppler frequencies is too large.\n increase the IFFT size'; 21 | if strcmp(FadingType(1:2),'la') % Laplacian constrained PAS 22 | for i=1:Np 23 | Nd= floor(fm_Hz(i)/dfmax)-1; 24 | if Nd<1, error(err_msg); end 25 | tmp= ftn_psd([-Nd:Nd],varargin{1}(i),varargin{2}(i)); 26 | tmpz= zeros(1,Nfading-2*Nd+1); 27 | FadFreq(i,:)= [tmp(Nd+1:end-1) tmpz tmp(2:Nd)]; 28 | end 29 | else % symmetric Doppler spectrum 30 | for i=1:Np 31 | Nd= floor(fm_Hz(i)/dfmax)-1; 32 | if Nd<1, error(err_msg); end 33 | tmp= ftn_psd([0:Nd]/Nd); tmpz= zeros(1,Nfading-2*Nd+3); 34 | FadFreq(i,:)= [tmp(1:Nd-1) tmpz fliplr(tmp(2:Nd-1))]; 35 | end 36 | end 37 | % Add a random phase to the Doppler spectrum 38 | FadFreq = sqrt(FadFreq).*exp(2*pi*j*rand(Np,Nfading)); 39 | FadTime = ifft(FadFreq,Nfading,2); 40 | % Normalization to 1 41 | FadTime= FadTime./sqrt(mean(abs(FadTime).^2,2)*ones(1,size(FadTime,2))); 42 | tf=1/(2*fmax*Nfosf); %fading sample time=1/(Doppler BW*Nfosf) -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/FWGN_tf.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/改进FWGN信道模型/FWGN_tf.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/Modified FWGN.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/改进FWGN信道模型/Modified FWGN.jpg -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/gen_filter.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第2章 SISO信道模型/改进FWGN信道模型/gen_filter.m -------------------------------------------------------------------------------- /第2章 SISO信道模型/改进FWGN信道模型/plot_modeified_FWGN.m: -------------------------------------------------------------------------------- 1 | clear, clf 2 | Nfading=1024; % IFFT size for the Npath x Nfading fading matrix 3 | Nos=8; % Fading oversampling factor 4 | Npath=2; % Number of paths 5 | N=10000; 6 | FadingType= 'class'; 7 | fm= [100 10]; % Doppler frequency 8 | subplot(211) 9 | [FadingMatrix,tf]= FWGN_ff(Npath,fm,Nfading,Nos,FadingType); 10 | plot([1:Nfading]*tf,10*log10(abs(FadingMatrix(1,:))),'k:') 11 | hold on 12 | plot([1:Nfading]*tf,10*log10(abs(FadingMatrix(2,:))),'k-') 13 | title('Modified FWGN in Frequency Domain') 14 | xlabel('time[s]') 15 | ylabel('Magnitude[dB]') 16 | set(gca,'fontsize',9) 17 | legend('Path 1, f_m=100Hz','Path 2, f_m=10Hz') 18 | axis([0 0.5 -20 5]) 19 | subplot(212) 20 | [FadingMatrix,tf]= FWGN_tf(Npath,fm,N,Nfading,Nos,FadingType); 21 | plot([1:N]*tf,10*log10(abs(FadingMatrix(1,:))),'k:') 22 | hold on 23 | plot([1:N]*tf,10*log10(abs(FadingMatrix(2,:))),'k-') 24 | title('Modified FWGN in Time Domain'); 25 | title(['Modified FWGN in Time Domain, Nfading=', num2str(Nfading),',Nos=',num2str(Nos),',T_s=',num2str(tf),'s']); 26 | xlabel('time[s]') 27 | ylabel('Magnitude[dB]') 28 | set(gca,'fontsize',9) 29 | legend('Path 1, f_m=100Hz','Path 2, f_m=10Hz') 30 | axis([0 0.5 -20 5]) -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/OFDM_BER_AWGN_CP_GL16.dat: -------------------------------------------------------------------------------- 1 | %Signal power= 1.172e-02 2 | %EbN0[dB] BER 3 | 0 1.432e-01 4 | 5 4.688e-02 5 | 10 1.946e-03 6 | 15 1.389e-07 7 | -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/OFDM_basic.m: -------------------------------------------------------------------------------- 1 | % OFDM_basic.m 2 | clear all 3 | NgType=1; % NgType=1/2 for cyclic prefix/zero padding 4 | if NgType==1 5 | nt='CP'; 6 | elseif NgType==2 7 | nt='ZP'; 8 | end 9 | Ch=0; % Ch=0/1 for AWGN/multipath channel 10 | if Ch==0 11 | chType='AWGN'; 12 | Target_neb=100; 13 | else 14 | chType='CH'; 15 | Target_neb=500; 16 | end 17 | figure(Ch+1), clf 18 | PowerdB=[0 -8 -17 -21 -25]; % Channel tap power profile 'dB' 19 | Delay=[0 3 5 6 8]; % Channel delay 'sample' 20 | Power=10.^(PowerdB/10); % Channel tap power profile 'linear scale' 21 | Ntap=length(PowerdB); % Chanel tap number 22 | Lch=Delay(end)+1; % Channel length 23 | Nbps=4; 24 | M=2^Nbps; % Modulation order=2/4/6 for QPSK/16QAM/64QAM 25 | Nfft=64; % FFT size 26 | Ng=Nfft/4; % Guard interval length 27 | Nsym=Nfft+Ng; % Symbol duration 28 | Nvc=Nfft/4; % Nvc=0: no virtual carrier 29 | Nused=Nfft-Nvc; 30 | EbN0=[0:5:20]; % EbN0 31 | N_iter=1e5; % Number of iterations for each EbN0 32 | Nframe=3; % Number of symbols per frame 33 | sigPow=0; % Signal power initialization 34 | file_name=['OFDM_BER_' chType '_' nt '_' 'GL' num2str(Ng) '.dat']; 35 | fid=fopen(file_name, 'w+'); 36 | norms=[1 sqrt(2) 0 sqrt(10) 0 sqrt(42)]; % BPSK 4-QAM 16-QAM 37 | for i=0:length(EbN0) 38 | randn('state',0); 39 | rand('state',0); 40 | %Ber2=ber(); % BER initialization 41 | Neb=0; 42 | Ntb=0; % Initialize the number of error/total bits 43 | for m=1:N_iter 44 | % Tx______________________________________________________________ 45 | X= randint(1,Nused*Nframe,M); % bit: integer vector 46 | Xmod= qammod(X,M,0,'gray')/norms(Nbps); 47 | if NgType~=2 48 | x_GI=zeros(1,Nframe*Nsym); 49 | elseif NgType==2 50 | x_GI= zeros(1,Nframe*Nsym+Ng); 51 | % Extend an OFDM symbol by Ng zeros 52 | end 53 | kk1=[1:Nused/2]; 54 | kk2=[Nused/2+1:Nused]; 55 | kk3=1:Nfft; 56 | kk4=1:Nsym; 57 | for k=1:Nframe 58 | if Nvc~=0 59 | X_shift= [0 Xmod(kk2) zeros(1,Nvc-1) Xmod(kk1)]; 60 | else 61 | X_shift= [Xmod(kk2) Xmod(kk1)]; 62 | end 63 | x= ifft(X_shift); 64 | x_GI(kk4)= guard_interval(Ng,Nfft,NgType,x); 65 | kk1=kk1+Nused; 66 | kk2=kk2+Nused; 67 | kk3=kk3+Nfft; 68 | kk4=kk4+Nsym; 69 | end 70 | if Ch==0 71 | y= x_GI; % No channel 72 | else % Multipath fading channel 73 | channel=(randn(1,Ntap)+j*randn(1,Ntap)).*sqrt(Power/2); 74 | h=zeros(1,Lch); 75 | h(Delay+1)=channel; % cir: channel impulse response 76 | y = conv(x_GI,h); 77 | end 78 | if i==0 % Only to measure the signal power for adding AWGN noise 79 | y1=y(1:Nframe*Nsym); 80 | sigPow = sigPow + y1*y1'; 81 | continue; 82 | end 83 | % Add AWGN noise________________________________________________ 84 | snr = EbN0(i)+10*log10(Nbps*(Nused/Nfft)); % SNR vs. Eb/N0 85 | noise_mag = sqrt((10.^(-snr/10))*sigPow/2); 86 | y_GI = y + noise_mag*(randn(size(y))+j*randn(size(y))); 87 | % Rx_____________________________________________________________ 88 | kk1=(NgType==2)*Ng+[1:Nsym]; 89 | kk2=1:Nfft; 90 | kk3=1:Nused; 91 | kk4=Nused/2+Nvc+1:Nfft; 92 | kk5=(Nvc~=0)+[1:Nused/2]; 93 | if Ch==1 94 | H= fft([h zeros(1,Nfft-Lch)]); % Channel frequency response 95 | H_shift(kk3)= [H(kk4) H(kk5)]; 96 | end 97 | for k=1:Nframe 98 | Y(kk2)= fft(remove_GI(Ng,Nsym,NgType,y_GI(kk1))); 99 | Y_shift=[Y(kk4) Y(kk5)]; 100 | if Ch==0 101 | Xmod_r(kk3) = Y_shift; 102 | else 103 | Xmod_r(kk3)= Y_shift./H_shift; % Equalizer - channel compensation 104 | end 105 | kk1=kk1+Nsym; 106 | kk2=kk2+Nfft; 107 | kk3=kk3+Nused; 108 | kk4=kk4+Nfft; 109 | kk5=kk5+Nfft; 110 | end 111 | X_r=qamdemod(Xmod_r*norms(Nbps),M,0,'gray'); 112 | Neb=Neb+sum(sum(de2bi(X_r,Nbps)~=de2bi(X,Nbps))); 113 | Ntb=Ntb+Nused*Nframe*Nbps; %[Ber,Neb,Ntb]=ber(bit_Rx,bit,Nbps); 114 | if Neb>Target_neb 115 | break; 116 | end 117 | end 118 | if i==0 119 | sigPow= sigPow/Nsym/Nframe/N_iter; 120 | fprintf('Signal power= %11.3e\n', sigPow); 121 | fprintf(fid,'%%Signal power= %11.3e\n%%EbN0[dB] BER\n', sigPow); 122 | else 123 | Ber = Neb/Ntb; 124 | fprintf('EbN0=%3d[dB], BER=%4d/%8d =%11.3e\n', EbN0(i), Neb,Ntb,Ber) 125 | fprintf(fid, '%d\t%11.3e\n', EbN0(i), Ber); 126 | if Ber<1e-6 127 | break; 128 | end 129 | end 130 | end 131 | if (fid~=0) 132 | fclose(fid); 133 | end 134 | disp('Simulation is finished'); 135 | plot_ber(file_name,Nbps); -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/OFDM_ber.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第4章 OFDM概述/仿真OFDM传输系统/OFDM_ber.jpg -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/Q.m: -------------------------------------------------------------------------------- 1 | function y=Q(x) 2 | % co-error function: 1/sqrt(2*pi) * int_x^inf exp(-t^2/2) dt. 3 | y=erfc(x/sqrt(2))/2; -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/ber_QAM.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第4章 OFDM概述/仿真OFDM传输系统/ber_QAM.m -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/guard_interval.m: -------------------------------------------------------------------------------- 1 | function y = guard_interval(Ng,Nfft,NgType,ofdmSym) 2 | if NgType==1 3 | y=[ofdmSym(Nfft-Ng+1:Nfft) ofdmSym(1:Nfft)]; 4 | elseif NgType==2 5 | y=[zeros(1,Ng) ofdmSym(1:Nfft)]; 6 | end -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/plot_ber.m: -------------------------------------------------------------------------------- 1 | function plot_ber(file_name,Nbps) 2 | EbN0dB=[0:1:30]; 3 | M=2^Nbps; 4 | ber_AWGN = ber_QAM(EbN0dB,M,'AWGN'); 5 | ber_Rayleigh = ber_QAM(EbN0dB,M,'Rayleigh'); 6 | semilogy(EbN0dB,ber_AWGN,'r:'); 7 | hold on 8 | semilogy(EbN0dB,ber_Rayleigh,'r-'); 9 | a= load(file_name); 10 | semilogy(a(:,1),a(:,2),'b--s'); 11 | grid on 12 | legend('AWGN analytic','Rayleigh fading analytic', 'Simulation'); 13 | xlabel('EbN0[dB]'), ylabel('BER'); 14 | axis([a(1,1) a(end,1) 1e-5 1]) -------------------------------------------------------------------------------- /第4章 OFDM概述/仿真OFDM传输系统/remove_GI.m: -------------------------------------------------------------------------------- 1 | function y=remove_GI(Ng,Lsym,NgType,ofdmSym) 2 | if Ng~=0 3 | if NgType==1 % cyclic prefix 4 | y=ofdmSym(Ng+1:Lsym); 5 | elseif NgType==2 % cyclic suffix 6 | y=ofdmSym(1:Lsym-Ng)+[ofdmSym(Lsym-Ng+1:Lsym) zeros(1,Lsym-2*Ng)]; 7 | end 8 | else 9 | y=ofdmSym; 10 | end -------------------------------------------------------------------------------- /第4章 OFDM概述/检验正交性/orthogonalisty.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第4章 OFDM概述/检验正交性/orthogonalisty.jpg -------------------------------------------------------------------------------- /第4章 OFDM概述/检验正交性/test_orthogonality.m: -------------------------------------------------------------------------------- 1 | %test_orthogonality.m 2 | %to plot several sinusoidal signals with different frequencies/phases and their DFT sequences 3 | % and to check their orthogonality 4 | clear, clf 5 | T=1.6; 6 | ND=1000; 7 | nn=0:ND; 8 | ts=0.002; 9 | tt=nn*ts; % time interval 10 | Ts = 0.1; 11 | M = round(Ts/ts); % Sampling period in continuous/discrete-time 12 | nns = [1:M:ND+1]; 13 | tts = (nns-1)*ts; % Sampling indices and times 14 | ks = [1:4 3.9 4]; 15 | tds = [0 0 0.1 0.1 0 0.15]; % Frequency indices and delay times 16 | K = length(ks); 17 | for i=1:K 18 | k=ks(i); 19 | td=tds(i); 20 | x(i,:) = exp(j*2*pi*k*(tt-td)/T); 21 | if i==K 22 | x(K,:) = [x(K,[302:end]) x(K-3,[1:301])]; end 23 | title_string = sprintf('cos(2pi*%1.1f*(t-%4.2f)/%2.1f)',k,td,T); 24 | subplot(K,2,2*i-1); 25 | plot(tt,real(x(i,:)),'LineWidth',1); 26 | title(title_string) 27 | hold on 28 | plot(tt([1 end]),[0 0],'k') 29 | set(gca,'fontsize',9); 30 | axis([tt([1 end]) -1.2 1.2]) 31 | stem(tts,real(x(i,nns)),'.','markersize',5) 32 | end 33 | N = round(T/Ts); xn = x(:,nns(1:N)); 34 | xn*xn'/N % check orthogonality 35 | Xk = fft(xn.').'; 36 | kk = 0:N-1; 37 | for i=1:K 38 | k=ks(i); td=tds(i); 39 | title_string = sprintf('DFT of cos(2pi*%1.1f*(t-%4.2f)/%2.1f), t=[0:%d]*%3.2f',k,td,T,N-1,Ts); 40 | subplot(K,2,2*i); 41 | stem(kk,abs(Xk(i,:)),'.','markersize',5); 42 | title(title_string) 43 | set(gca,'fontsize',8,'xtick',[k]), axis([0 N 0 20]) 44 | end -------------------------------------------------------------------------------- /第5章 CFO估计技术/CFO.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第5章 CFO估计技术/CFO.jpg -------------------------------------------------------------------------------- /第5章 CFO估计技术/CFO_CP.m: -------------------------------------------------------------------------------- 1 | function CFO_est=CFO_CP(y,Nfft,Ng) 2 | % Time-domain CFO estimation based on CP (Cyclic Prefix) 3 | 4 | nn=1:Ng; 5 | CFO_est = angle(y(nn+Nfft)*y(nn)')/(2*pi); -------------------------------------------------------------------------------- /第5章 CFO估计技术/CFO_Classen.m: -------------------------------------------------------------------------------- 1 | function CFO_est=CFO_Classen(yp,Nfft,Ng,Nps) 2 | % Frequency-domain CFO estimation using Classen method based on pilot tones 3 | 4 | if length(Nps)==1 5 | Xp=add_pilot(zeros(1,Nfft),Nfft,Nps); 6 | else 7 | Xp=Nps; % If Nps is given as an array, it must be a pilot sequence Xp 8 | end 9 | Nofdm=Nfft+Ng; 10 | kk=find(Xp~=0); 11 | Xp=Xp(kk); % Extract pilot tones 12 | for i=1:2 13 | yp_without_CP = remove_CP(yp(1+Nofdm*(i-1):Nofdm*i),Ng); 14 | Yp(i,:) = fft(yp_without_CP,Nfft); 15 | end 16 | CFO_est = angle(Yp(2,kk).*Xp*(Yp(1,kk).*Xp)')/(2*pi)*Nfft/Nofdm; % Eq.(5.31) -------------------------------------------------------------------------------- /第5章 CFO估计技术/CFO_Moose.m: -------------------------------------------------------------------------------- 1 | function CFO_est=CFO_Moose(y,Nfft) 2 | % Frequency-domain CFO estimation using Moose method based on two consecutive identical OFDM symbols 3 | 4 | for i=0:1 5 | Y(i+1,:)= fft(y(Nfft*i+1:Nfft*(i+1)),Nfft); 6 | end 7 | CFO_est = angle(Y(2,:)*Y(1,:)')/(2*pi); -------------------------------------------------------------------------------- /第5章 CFO估计技术/CFO_estimation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第5章 CFO估计技术/CFO_estimation.m -------------------------------------------------------------------------------- /第5章 CFO估计技术/add_CFO.m: -------------------------------------------------------------------------------- 1 | function y_CFO=add_CFO(y,CFO,Nfft) 2 | % To add an arbitrary frequency offset 3 | % Input: y = Time-domain received signal 4 | % dCFO = FFO (fractional CFO) + IFO (integral CFO) 5 | % Nfft = FFT size; 6 | 7 | nn=0:length(y)-1; 8 | y_CFO = y.*exp(j*2*pi*CFO*nn/Nfft); 9 | -------------------------------------------------------------------------------- /第5章 CFO估计技术/add_CP.m: -------------------------------------------------------------------------------- 1 | function y=add_CP(x,Ncp) 2 | y = [x(:,end-Ncp+1:end) x]; 3 | end -------------------------------------------------------------------------------- /第5章 CFO估计技术/add_pilot.m: -------------------------------------------------------------------------------- 1 | function xp=add_pilot(x,Nfft,Nps) 2 | % CAZAC (Constant Amplitude Zero AutoCorrelation) sequence --> pilot 3 | % Nps : Pilot spacing 4 | 5 | if nargin<3 6 | Nps=4; 7 | end 8 | Np=Nfft/Nps; 9 | xp=x; % Number of pilots and an OFDM signal including pilot signal 10 | for k=1:Np 11 | xp((k-1)*Nps+1)= exp(1i*pi*(k-1)^2/Np); % Pilot boosting with an even Np 12 | %xp((k-1)*Nps+1)= exp(j*pi*(k-1)*k/Np); % Pilot boosting with an odd Np 13 | end 14 | -------------------------------------------------------------------------------- /第5章 CFO估计技术/remove_CP.m: -------------------------------------------------------------------------------- 1 | function y=remove_CP(x,Ncp,Noff) 2 | % Remove cyclic prefix 3 | if nargin<3 4 | Noff=0; 5 | end 6 | y=x(:,Ncp+1-Noff:end-Noff); -------------------------------------------------------------------------------- /第6章 信道估计/LS_CE.m: -------------------------------------------------------------------------------- 1 | function H_LS = LS_CE(Y,Xp,pilot_loc,Nfft,Nps,int_opt) 2 | % LS channel estimation function 3 | % Inputs: 4 | % Y = Frequency-domain received signal 5 | % Xp = Pilot signal 6 | % pilot_loc = Pilot location 7 | % N = FFT size 8 | % Nps = Pilot spacing 9 | % int_opt = 'linear' or 'spline' 10 | % output: 11 | % H_LS = LS channel etimate 12 | Np=Nfft/Nps; 13 | k=1:Np; 14 | LS_est(k) = Y(pilot_loc(k))./Xp(k); % LS channel estimation 15 | if lower(int_opt(1))=='l' 16 | method='linear'; 17 | else 18 | method='spline'; 19 | end 20 | H_LS = interpolate(LS_est,pilot_loc,Nfft,method); % Linear/Spline interpolation -------------------------------------------------------------------------------- /第6章 信道估计/LS和MMSE比较.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第6章 信道估计/LS和MMSE比较.jpg -------------------------------------------------------------------------------- /第6章 信道估计/MMSE_CE.m: -------------------------------------------------------------------------------- 1 | function H_MMSE = MMSE_CE(Y,Xp,pilot_loc,Nfft,Nps,h,SNR) 2 | %function H_MMSE = MMSE_CE(Y,Xp,pilot_loc,Nfft,Nps,h,ts,SNR) 3 | % MMSE channel estimation function 4 | % Inputs: 5 | % Y = Frequency-domain received signal 6 | % Xp = Pilot signal 7 | % pilot_loc = Pilot location 8 | % Nfft = FFT size 9 | % Nps = Pilot spacing 10 | % h = Channel impulse response 11 | % ts = Sampling time 12 | % SNR = Signal-to-Noise Ratio[dB] 13 | % output: 14 | % H_MMSE = MMSE channel estimate 15 | 16 | %H = fft(h,N); 17 | snr = 10^(SNR*0.1); 18 | Np=Nfft/Nps; k=1:Np; 19 | H_tilde = Y(1,pilot_loc(k))./Xp(k); % LS estimate 20 | k=0:length(h)-1; %k_ts = k*ts; 21 | hh = h*h'; 22 | tmp = h.*conj(h).*k; %tmp = h.*conj(h).*k_ts; 23 | r = sum(tmp)/hh; 24 | r2 = tmp*k.'/hh; %r2 = tmp*k_ts.'/hh; 25 | tau_rms = sqrt(r2-r^2); % rms delay 26 | df = 1/Nfft; %1/(ts*Nfft); 27 | j2pi_tau_df = j*2*pi*tau_rms*df; 28 | K1 = repmat([0:Nfft-1].',1,Np); 29 | K2 = repmat([0:Np-1],Nfft,1); 30 | rf = 1./(1+j2pi_tau_df*(K1-K2*Nps)); 31 | K3 = repmat([0:Np-1].',1,Np); 32 | K4 = repmat([0:Np-1],Np,1); 33 | rf2 = 1./(1+j2pi_tau_df*Nps*(K3-K4)); 34 | Rhp = rf; 35 | Rpp = rf2 + eye(length(H_tilde),length(H_tilde))/snr; 36 | H_MMSE = transpose(Rhp*inv(Rpp)*H_tilde.'); % MMSE channel estimate -------------------------------------------------------------------------------- /第6章 信道估计/channel_estimation.m: -------------------------------------------------------------------------------- 1 | %channel_estimation.m 2 | % for LS/DFT Channel Estimation with linear/spline interpolation 3 | clear all; 4 | close all; 5 | clf; 6 | % figure(1), clf 7 | % figure(2), clf 8 | Nfft=512; 9 | Ng=Nfft/8; 10 | Nofdm=Nfft+Ng; 11 | Nsym=100; 12 | Nps=32; 13 | Np=Nfft/Nps; 14 | Nd=Nfft-Np; % Pilot spacing, Numbers of pilots and data per OFDM symbol 15 | Nbps=4; 16 | M=2^Nbps; % Number of bits per (modulated) symbol 17 | mod_object = modem.qammod('M',M, 'SymbolOrder','gray'); 18 | demod_object = modem.qamdemod('M',M, 'SymbolOrder','gray'); 19 | Es=1; 20 | A=sqrt(3/2/(M-1)*Es); % Signal energy and QAM normalization factor 21 | %fs = 10e6; ts = 1/fs; % Sampling frequency and Sampling period 22 | SNRs = [30]; 23 | sq2=sqrt(2); 24 | for i=1:length(SNRs) 25 | SNR = SNRs(i); 26 | rand('seed',1); 27 | randn('seed',1); 28 | MSE = zeros(1,6); 29 | nose = 0; 30 | for nsym=1:Nsym 31 | Xp = 2*(randn(1,Np)>0)-1; % Pilot sequence generation 32 | %Data = ((2*(randn(1,Nd)>0)-1) + j*(2*(randn(1,Nd)>0)-1))/sq2; % QPSK modulation 33 | msgint=randint(1,Nfft-Np,M); % bit generation 34 | Data = modulate(mod_object,msgint)*A; 35 | %Data = modulate(mod_object, msgint); 36 | %Data = modnorm(Data,'avpow',1)*Data; % normalization 37 | ip = 0; 38 | pilot_loc = []; 39 | for k=1:Nfft 40 | if mod(k,Nps)==1 41 | X(k) = Xp(floor(k/Nps)+1); 42 | pilot_loc = [pilot_loc k]; 43 | ip = ip+1; 44 | else 45 | X(k) = Data(k-ip); 46 | end 47 | end 48 | x = ifft(X,Nfft); % IFFT 49 | xt = [x(Nfft-Ng+1:Nfft) x]; % Add CP 50 | h = [(randn+j*randn) (randn+j*randn)/2]; % generates a (2-tap) channel 51 | H = fft(h,Nfft); 52 | channel_length = length(h); % True channel and its time-domain length 53 | H_power_dB = 10*log10(abs(H.*conj(H))); % True channel power in dB 54 | y_channel = conv(xt, h); % Channel path (convolution) 55 | sig_pow = mean(y_channel.*conj(y_channel)); 56 | %y_aw(1,1:Nofdm) = y(1,1:Nofdm) + ... 57 | % sqrt((10.^(-SNR/10))*sig_pow/2)*(randn(1,Nofdm)+j*randn(1,Nofdm)); % Add noise(AWGN) 58 | yt = awgn(y_channel,SNR,'measured'); 59 | y = yt(Ng+1:Nofdm); % Remove CP 60 | Y = fft(y); % FFT 61 | for m=1:3 62 | if m==1 63 | H_est = LS_CE(Y,Xp,pilot_loc,Nfft,Nps,'linear'); 64 | method='LS-linear'; % LS estimation with linear interpolation 65 | elseif m==2 66 | H_est = LS_CE(Y,Xp,pilot_loc,Nfft,Nps,'spline'); 67 | method='LS-spline'; % LS estimation with spline interpolation 68 | else 69 | H_est = MMSE_CE(Y,Xp,pilot_loc,Nfft,Nps,h,SNR); 70 | method='MMSE'; % MMSE estimation 71 | end 72 | H_est_power_dB = 10*log10(abs(H_est.*conj(H_est))); 73 | h_est = ifft(H_est); 74 | h_DFT = h_est(1:channel_length); 75 | H_DFT = fft(h_DFT,Nfft); % DFT-based channel estimation 76 | H_DFT_power_dB = 10*log10(abs(H_DFT.*conj(H_DFT))); 77 | if nsym==1 78 | figure(1) 79 | subplot(319+2*m) 80 | plot(H_power_dB,'b','linewidth',1); 81 | grid on; 82 | hold on; 83 | plot(H_est_power_dB,'r:+','Markersize',4,'linewidth',1); 84 | %axis([0 32 -6 10]) 85 | title(method); 86 | xlabel('Subcarrier Index'); 87 | ylabel('Power[dB]'); 88 | legend('True Channel',method,4); 89 | set(gca,'fontsize',9) 90 | subplot(320+2*m) 91 | plot(H_power_dB,'b','linewidth',1); 92 | grid on; 93 | hold on; 94 | plot(H_DFT_power_dB,'r:+','Markersize',4,'linewidth',1); 95 | %axis([0 32 -6 10]) 96 | title([method ' with DFT']); 97 | xlabel('Subcarrier Index'); 98 | ylabel('Power[dB]'); 99 | legend('True Channel',[method ' with DFT'],4); 100 | set(gca,'fontsize',9) 101 | end 102 | MSE(m) = MSE(m) + (H-H_est)*(H-H_est)'; 103 | MSE(m+3) = MSE(m+3) + (H-H_DFT)*(H-H_DFT)'; 104 | end 105 | Y_eq = Y./H_est; 106 | if nsym>=Nsym-10 107 | figure(2) 108 | subplot(221) 109 | plot(Y,'.','Markersize',5) 110 | axis([-1.5 1.5 -1.5 1.5]) 111 | axis('equal') 112 | set(gca,'fontsize',9) 113 | hold on, 114 | subplot(222) 115 | plot(Y_eq,'.','Markersize',5) 116 | axis([-1.5 1.5 -1.5 1.5]) 117 | axis('equal') 118 | set(gca,'fontsize',9) 119 | hold on, 120 | end 121 | ip = 0; 122 | for k=1:Nfft 123 | if mod(k,Nps)==1 124 | ip=ip+1; 125 | else 126 | Data_extracted(k-ip)=Y_eq(k); 127 | end 128 | end 129 | msg_detected = demodulate(demod_object,Data_extracted/A); 130 | nose = nose + sum(msg_detected~=msgint); 131 | end 132 | MSEs(i,:) = MSE/(Nfft*Nsym); 133 | end 134 | Number_of_symbol_errors=nose 135 | figure(3)%, clf 136 | semilogy(SNRs',MSEs(:,1),'-x', SNRs',MSEs(:,3),'-o') 137 | legend('LS-linear','MMSE') 138 | fprintf('MSE of LS-linear/LS-spline/MMSE Channel Estimation = %6.4e/%6.4e/%6.4e\n',MSEs(end,1:3)); 139 | fprintf('MSE of LS-linear/LS-spline/MMSE Channel Estimation with DFT = %6.4e/%6.4e/%6.4e\n',MSEs(end,4:6)); -------------------------------------------------------------------------------- /第6章 信道估计/interpolate.m: -------------------------------------------------------------------------------- 1 | function H_interpolated = interpolate(H_est,pilot_loc,Nfft,method) 2 | % Input: H_est = Channel estimate using pilot sequence 3 | % pilot_loc = location of pilot sequence 4 | % Nfft = FFT size 5 | % method = 'linear'/'spline' 6 | % Output: H_interpolated = interpolated channel 7 | if pilot_loc(1)>1 8 | slope = (H_est(2)-H_est(1))/(pilot_loc(2)-pilot_loc(1)); 9 | H_est = [H_est(1)-slope*(pilot_loc(1)-1) H_est]; 10 | pilot_loc = [1 pilot_loc]; 11 | end 12 | if pilot_loc(end)zdBs(i))/Nblk; 29 | end 30 | semilogy(zdBs,CCDF_theoretical,'k-'); hold on; grid on; 31 | semilogy(zdBs(1:3:end),CCDF_simulated(1:3:end),'k:*'); 32 | end 33 | axis([zdBs([1 end]) 1e-2 1]); 34 | title('OFDM system with N-point FFT'); 35 | xlabel('PAPR0[dB]'); 36 | ylabel('CCDF=Probability(PAPR>PAPR0)'); 37 | legend('Theoretical','Simulated'); 38 | -------------------------------------------------------------------------------- /第7章 PAPR/PTS技术/CCDF_OFDMA.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/PTS技术/CCDF_OFDMA.m -------------------------------------------------------------------------------- /第7章 PAPR/PTS技术/CCDF_PTS.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/PTS技术/CCDF_PTS.m -------------------------------------------------------------------------------- /第7章 PAPR/PTS技术/PTS技术.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/PTS技术/PTS技术.jpg -------------------------------------------------------------------------------- /第7章 PAPR/PTS技术/compare_CCDF_PTS.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/PTS技术/compare_CCDF_PTS.m -------------------------------------------------------------------------------- /第7章 PAPR/SQNR与限幅电平/Effect of Clipping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/SQNR与限幅电平/Effect of Clipping.jpg -------------------------------------------------------------------------------- /第7章 PAPR/SQNR与限幅电平/SQNR_with_quantization_clipping.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/SQNR与限幅电平/SQNR_with_quantization_clipping.m -------------------------------------------------------------------------------- /第7章 PAPR/SQNR与限幅电平/mapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/SQNR与限幅电平/mapper.m -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/16QAM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/16QAM.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/16QAM2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/16QAM2.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/BPSK.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/BPSK.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/BPSK2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/BPSK2.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/PAPR.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/PAPR.m -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/QPSK.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/QPSK.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/QPSK2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/QPSK2.jpg -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/mapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/mapper.m -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/modulation.m: -------------------------------------------------------------------------------- 1 | function [s,time] = modulation(x,Ts,Nos,Fc) 2 | % Ts : Sampling period 3 | % Nos: Oversampling factor 4 | % Fc : Carrier frequency 5 | Nx=length(x); offset = 0; 6 | if nargin<5 7 | scale = 1; 8 | T=Ts/Nos; % Scale and Oversampling period for Baseband 9 | else 10 | scale = sqrt(2); 11 | T=1/Fc/2/Nos; % Scale and Oversampling period for Passband 12 | end 13 | t_Ts = [0:T:Ts-T]; 14 | time = [0:T:Nx*Ts-T]; % One sampling interval and whole interval 15 | tmp = 2*pi*Fc*t_Ts+offset; 16 | len_Ts=length(t_Ts); 17 | cos_wct = cos(tmp)*scale; 18 | sin_wct = sin(tmp)*scale; 19 | %s = zeros(N*len_Ts,1); 20 | for n = 1:Nx 21 | s((n-1)*len_Ts+1:n*len_Ts) = real(x(n))*cos_wct-imag(x(n))*sin_wct; 22 | end -------------------------------------------------------------------------------- /第7章 PAPR/单载波信号的PAPR/single_carrier_PAPR.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/单载波信号的PAPR/single_carrier_PAPR.m -------------------------------------------------------------------------------- /第7章 PAPR/时域OFDM信号概率分析/OFDM_signal.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/时域OFDM信号概率分析/OFDM_signal.m -------------------------------------------------------------------------------- /第7章 PAPR/时域OFDM信号概率分析/OFDM信号的幅度分布.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/时域OFDM信号概率分析/OFDM信号的幅度分布.jpg -------------------------------------------------------------------------------- /第7章 PAPR/时域OFDM信号概率分析/mapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/时域OFDM信号概率分析/mapper.m -------------------------------------------------------------------------------- /第7章 PAPR/时域OFDM信号概率分析/时域OFDM信号.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/时域OFDM信号概率分析/时域OFDM信号.jpg -------------------------------------------------------------------------------- /第7章 PAPR/脉冲成形的DFT扩频的PAPR/CCDF_PAPR_DFTspreading.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/脉冲成形的DFT扩频的PAPR/CCDF_PAPR_DFTspreading.m -------------------------------------------------------------------------------- /第7章 PAPR/脉冲成形的DFT扩频的PAPR/PAPR性能.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/脉冲成形的DFT扩频的PAPR/PAPR性能.jpg -------------------------------------------------------------------------------- /第7章 PAPR/脉冲成形的DFT扩频的PAPR/PAPR性能2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/脉冲成形的DFT扩频的PAPR/PAPR性能2.jpg -------------------------------------------------------------------------------- /第7章 PAPR/脉冲成形的DFT扩频的PAPR/compare_DFT_spreading_w_psf.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/脉冲成形的DFT扩频的PAPR/compare_DFT_spreading_w_psf.m -------------------------------------------------------------------------------- /第7章 PAPR/脉冲成形的DFT扩频的PAPR/zero_insertion.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/脉冲成形的DFT扩频的PAPR/zero_insertion.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/IFFT_oversampling.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/IFFT_oversampling.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/PDF_of_clipped_and_filtered_OFDM_signal.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/PDF_of_clipped_and_filtered_OFDM_signal.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/add_CP.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/add_CP.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/clipping.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/clipping.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/mapper.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/mapper.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/未限幅信号.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/未限幅信号.jpg -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/等波纹通频带FIR滤波器.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/等波纹通频带FIR滤波器.jpg -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波/限幅信号.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波/限幅信号.jpg -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/CCDF_of_clipped_filtered_OFDM_signal.m: -------------------------------------------------------------------------------- 1 | % CCDF_of_clipped_filtered_OFDM_signal.m 2 | % Plot Fig. 7.16 3 | clear, clf 4 | SNRdBs=[0:10]; N_SNR=length(SNRdBs); % SNR[dB] vector 5 | Nblk=100; CRs=[0.8:0.2:1.6]; N_CR=length(CRs); gss='*^v'; 6 | b = 2; M = 2^b; % Number of bits per QAM symbol and Alphabet size 7 | N = 128; Ncp = 0; % FFT size and CP size (GI length) 8 | fs = 1e6; L = 8; % Sampling frequency and Oversampling factor 9 | Tsym=1/(fs/N); Ts=1/(fs*L); % OFDM symbol period and Sampling period 10 | fc = 2e6; wc = 2*pi*fc; % Carrier frequency 11 | t = [0:Ts:2*Tsym-Ts]/Tsym; 12 | if b==1, Mod='BPSK'; elseif b==2, Mod='QPSK'; else Mod=[num2str(M) 'QAM']; end 13 | % const = qammod([0:M-1],M); % QAM modulation 14 | A = modnorm(qammod([0:M-1],M),'avpow',1); % Normalization factor 15 | mdmod = modem.qammod('M',M, 'SymbolOrder','Gray','InputType','Bit'); 16 | mddem = modem.qamdemod('M',M, 'SymbolOrder','Gray','OutputType','Bit'); 17 | %Hd = euqiripple_filter_fin; Fcoeff = Hd.numerator; Lcoeff = length(Fcoeff); 18 | Fs=8; Norder=104; dens=20; % Sampling frequency, Order, and Density factor of filter 19 | FF=[0 1.4 1.5 2.5 2.6 Fs/2]; % Stopband/Passband/Stopband frequency edge vector 20 | WW=[10 1 10]; % Stopband/Passband/Stopband weight vector 21 | h = firpm(Norder,FF/(Fs/2),[0 0 1 1 0 0],WW,{dens}); % BPF coefficients 22 | Clipped_errCnt = zeros(size(CRs)); ClippedFiltered_errCnt = zeros(size(CRs)); 23 | CF = zeros(1,Nblk); CF_c = zeros(N_CR,Nblk); CF_cf = zeros(N_CR,Nblk); 24 | % ------------- Iteration with increasing SNRdB --------------------% 25 | ber_analytic = berawgn(SNRdBs-10*log10(b),'qam',M); 26 | kk1=1:(N/2-Ncp)*L; kk2=kk1(end)+1:N/2*L+N*L; kk3=kk2(end)+[1:N*L/2]; 27 | z = [2:0.1:16]; len_z = length(z); 28 | for i = 1:N_SNR 29 | SNRdB = SNRdBs(i); 30 | for ncf = 0:2 % no/clip/clip&filter 31 | if ncf==2, m=ceil(length(h)/2); else m=1; end 32 | for cr = 1:N_CR 33 | if ncf==0&cr>1, break; end 34 | CR = CRs(cr); nobe = 0; 35 | for nblk = 1:Nblk %(i) 36 | msgbin = randint(b,N); % binary squences 37 | X = A*modulate(mdmod,msgbin); % 4QAM (QPSK) mapper 38 | X(1) = 0+j*0; % DC subcarrier not used 39 | x = IFFT_oversampling(X,N,L); 40 | x_b = add_CP(x,Ncp*L); 41 | x_b_os = [zeros(1,(N/2-Ncp)*L), x_b, zeros(1,N*L/2)]; 42 | x_p = sqrt(2)*real(x_b_os.*exp(j*2*wc*t)); 43 | if ncf>0, x_p_c = clipping(x_p,CR); x_p=x_p_c; % clipping 44 | if ncf>1, x_p_cf = ifft(fft(h,length(x_p)).*fft(x_p)); x_p=x_p_cf; end 45 | end 46 | if i==N_SNR, CF(nblk) = PAPR(x_p); end 47 | y_p_n = [x_p(kk1) awgn(x_p(kk2),SNRdB,'measured') x_p(kk3)]; % add Noise(AWGN) 48 | y_b = sqrt(2)*y_p_n.*exp(-j*2*wc*t); 49 | Y_b = fft(y_b); 50 | y_b_z = ifft(zero_pasting(Y_b)); 51 | y_b_t = y_b_z((N/2-Ncp)*L+m+[0:L:(N+Ncp)*L-1]); 52 | Y_b_f = fft(y_b_t(Ncp+1:end),N)*L; 53 | Y_b_bin = demodulate(mddem,Y_b_f); 54 | nobe = nobe + biterr(msgbin(:,2:end),Y_b_bin(:,2:end)); 55 | %Clipped_errCnt(cr) = Clipped_errCnt(cr) + nobe; 56 | end % End of the nblk loop 57 | if ncf==0, ber_no(i) = nobe/Nblk/(N-1)/b; 58 | elseif ncf==1, ber_c(cr,i) = nobe/Nblk/(N-1)/b; 59 | else ber_cf(cr,i) = nobe/Nblk/(N-1)/b; 60 | end 61 | if i==N_SNR 62 | for iz=1:len_z, CCDF(iz) = sum(CF>z(iz))/Nblk; end 63 | if ncf==0, CCDF_no = CCDF; break; 64 | elseif ncf==1, CCDF_c(cr,:) = CCDF; 65 | else CCDF_cf(cr,:) = CCDF; 66 | end 67 | end 68 | end 69 | end 70 | end 71 | subplot(221), semilogy(z,CCDF_no), grid on, hold on 72 | for cr = 1:N_CR 73 | gs = gss(cr); 74 | subplot(221), semilogy(z,CCDF_c(cr,:),[gs '-'], z,CCDF_cf(cr,:),[gs ':']), hold on 75 | subplot(222), semilogy(SNRdBs,ber_c(cr,:),[gs '-'], SNRdBs,ber_cf(cr,:),[gs ':']), hold on 76 | end 77 | semilogy(SNRdBs,ber_no,'o', SNRdBs,ber_analytic,'k'), grid on -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/IFFT_oversampling.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/IFFT_oversampling.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/PAPR&BER.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/PAPR&BER.jpg -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/PAPR.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/PAPR.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/add_CP.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/add_CP.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/clipping.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/clipping.m -------------------------------------------------------------------------------- /第7章 PAPR/限幅和滤波的PAPR分布和BER/zero_pasting.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第7章 PAPR/限幅和滤波的PAPR分布和BER/zero_pasting.m -------------------------------------------------------------------------------- /第9章 MIMO信道容量/Ergodic_Capacity_CDF.m: -------------------------------------------------------------------------------- 1 | % Ergodic_Capacity_CDF.m 2 | clear all; 3 | close all; 4 | figure 5 | SNR_dB=10; 6 | SNR_linear=10.^(SNR_dB/10.); 7 | N_iter=50000; 8 | sq2=sqrt(0.5); 9 | grps = ['b:'; 'b-']; 10 | for Icase=1:2 11 | if Icase==1 12 | nT=2; 13 | nR=2; % 2x2 14 | else 15 | nT=4; 16 | nR=4; % 4x4 17 | end 18 | n=min(nT,nR); 19 | I = eye(n); 20 | for iter=1:N_iter 21 | H = sq2*(randn(nR,nT)+j*randn(nR,nT)); 22 | C(iter) = log2(real(det(I+SNR_linear/nT*H'*H))); 23 | end 24 | [PDF,Rate] = hist(C,50); 25 | PDF = PDF/N_iter; 26 | for i=1:50 27 | CDF(Icase,i) = sum(PDF([1:i])); 28 | end 29 | plot(Rate,CDF(Icase,:),grps(Icase,:)); 30 | hold on 31 | end 32 | xlabel('Rate[bps/Hz]'); 33 | ylabel('CDF'); 34 | axis([1 18 0 1]); 35 | grid on; 36 | set(gca,'fontsize',10); 37 | legend('{\it N_T}={\it N_R}=2','{\it N_T}={\it N_R}=4'); 38 | 39 | -------------------------------------------------------------------------------- /第9章 MIMO信道容量/Ergodic_Capacity_Correlation.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第9章 MIMO信道容量/Ergodic_Capacity_Correlation.m -------------------------------------------------------------------------------- /第9章 MIMO信道容量/Ergodic_Capacity_vs_SNR.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第9章 MIMO信道容量/Ergodic_Capacity_vs_SNR.m -------------------------------------------------------------------------------- /第9章 MIMO信道容量/MIMO信道容量.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第9章 MIMO信道容量/MIMO信道容量.jpg -------------------------------------------------------------------------------- /第9章 MIMO信道容量/OL_CL_Comparison.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jch-wang/MIMO-OFDM-Wireless-Communication-Technology-and-MATLAB-Implementation/431765962e18b1ea422d8cfae484dfb2928ea27a/第9章 MIMO信道容量/OL_CL_Comparison.m -------------------------------------------------------------------------------- /第9章 MIMO信道容量/Water_Pouring.m: -------------------------------------------------------------------------------- 1 | function [Gamma]=Water_Pouring(Lamda,SNR,nT) 2 | Gamma = zeros(1,length(Lamda)); 3 | r=length(Lamda); 4 | index=[1:r]; 5 | index_temp=index; 6 | p=1; 7 | while p