1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
LTE(Long-Term Evolution)是下一代无线通信技术,它采用了SC-FDMA(Single-Carrier Frequency-Division Multiple Access)作为上行链路传输方案,以及OFDMA(Orthogonal Frequency-Division Multiple Access)作为下行链路传输方案。这两种技术都属于多址接入技术,能够实现多用户同时使用同一频段进行通信,而不会相互干扰。
2.1下行OFDMA
单流+BCH编码译吗+QPSK+lmmse信道估计,其大概结构如下:
SC-FDMA是一种单载波频分多址接入技术。其基本思想是将频域上的数据符号通过离散傅里叶变换(DFT)转换到时域,然后在时域上加上循环前缀(CP)以消除多径效应,再将数据发送到无线信道中。在接收端,去掉循环前缀后,通过离散傅里叶反变换(IDFT)恢复频域信号。
发送端:
X[k] = Σ_{n=0}^{N-1} x[n] * e^{-j2πk*n/N} (0 ≤ k ≤ N-1)
其中,X[k]是频域信号,x[n]是时域信号,N是子载波数。
接收端:
x[n] = (1/N) * Σ_{k=0}^{N-1} X[k] * e^{j2πk*n/N} (0 ≤ n ≤ N-1)
2.2上行SC-FDMA
单流+Turbo编码译吗+QPSK+lmmse信道估计,其大概结构如下:
OFDMA是正交频分多址接入技术。它将整个频带划分成多个子载波,每个子载波可以独立调制一个数据流。由于子载波之间是正交的,因此可以实现多用户同时使用同一频段进行通信而不会相互干扰。令S[k]表示第k个子载波上的数据符号,f[k]表示第k个子载波的频率,T表示OFDM符号周期。则发送信号可以表示为:
s(t) = Σ_{k=0}^{N-1} S[k] * e^{j2πf[k]*t} (0 ≤ t ≤ T)
在接收端,通过匹配滤波器组对每个子载波进行解调,恢复出原始数据。解调公式如下:
Y[k] = ∫_{0}^{T} y(t) * e^{-j2πf[k]*t} dt
其中,Y[k]是第k个子载波上的接收数据,y(t)是接收信号。
通过SC-FDMA和OFDMA技术,LTE实现了高效的频谱利用和多用户接入。上行链路采用SC-FDMA可以降低峰均功率比(PAPR),减小终端的功放成本和电池消耗;下行链路采用OFDMA能够实现多用户并行传输,提高系统吞吐量。
3.MATLAB核心程序
%每个SNR点上仿真若干次 for i=1:length(SNR_dB) i Error = 0; err_all = 0; for iii=1:nloop(i) iii rng(iii); %% %产生测试信号 msg = rand(Len*Nc/4,1)>=0.5; %turbo编码 seridata1 = func_turbo_code(msg,N,M); ........................................................................ %每次仿真信道采样的开始位置 count_begin =(iii-1)*(5*counter); trms_1 = delay_avg/timeval; t_max = 4e-6/timeval; %信道采样点数,每个调制符号采一个点 [passchan_ofdm_symbol,H] = func_multipath_chann(Guard_int_ofdm_out,Nmultipath,Pow_avg,delay_multi,Fre_offset,timeval,counter,count_begin); %加入噪声 Rec_ofdm_symbol = awgn(passchan_ofdm_symbol,SNR_dB(i),'measured'); %% %开始接收 Guard_int_remove = func_guard_interval_remove(Rec_ofdm_symbol,(fftlen+Guard_int),Guard_int,(Nc+pilot_num)); %FFT fft_out = fft(Guard_int_remove); %sub carrier demapping fft_out = func_desubcarrierMap(fft_out); fft_out = ifft(fft_out); %信道估计 %LMMSE [Sig_Lrmmse,Hs] = func_lmmse_estimation(fft_out,pilot_space,Pilot_seq,pilot_num,trms_1,t_max,10^(SNR_dB(i)/10)); %解调 Dqpsk = func_deMapping(Sig_Lrmmse,fftlen*Nc); %turbo解码 Dqpsk_decode = [func_turbo_decode(2*Dqpsk(1:end-(Len*Nc-length(seridata1)))-1,N,M)]'; %计算误码率 err_num = Len*Nc/4-length(find(msg==Dqpsk_decode(1:Len*Nc/4))); Error = Error + err_num; end %计算误码率 err_all = err_all+Len*Nc/4; Err_Rate(i) = Error/err_all/nloop(i); end ..................................................................... papr = zeros(1,PAPR_len); psFilter = r; for n = 1:PAPR_len n tmp = round(rand(BLOCK,2)); tmp = tmp*2 - 1; data = (tmp(:,1) + j*tmp(:,2))/sqrt(2); X = fft(data); Y = zeros(totalSubcarriers,1); Y(1:Q:totalSubcarriers) = X; y = ifft(Y); y_oversampled(1:Nos:Nos*totalSubcarriers) = y; y_result = filter(psFilter, 1, y_oversampled); %PAPR. papr(n) = 10*log10(max(abs(y_result).^2) / mean(abs(y_result).^2)); end [X1,X2] = hist(papr,50); N(ii,:)=X1; Xs(ii,:)=X2; end figure semilogy(Xs(1,:),1-cumsum(N(1,:))/max(cumsum(N(1,:))),'b','linewidth',2); hold on semilogy(Xs(2,:),1-cumsum(N(2,:))/max(cumsum(N(2,:))),'r','linewidth',2); hold on semilogy(Xs(3,:),1-cumsum(N(3,:))/max(cumsum(N(3,:))),'k','linewidth',2); title ('PAPR of SC-FDMA') xlabel ('PAPR[dB]') ylabel ('{PAPR(PAPR>PAPR0)}') grid on; legend('User = 16','User = 32','User = 64'); %发送信号 figure stem(msg(500:2000)); title('发送信号'); figure stem(Dqpsk_decode(500:2000)); title('接收信号'); % 误码率 figure semilogy(SNR_dB,Err_Rate,'b-o'); grid on xlabel('SNR'); ylabel('BER'); axis([0.999,8,1e-5,1]); %星座图 [R,C] = size(Sig_Lrmmse); RR = reshape(Sig_Lrmmse,[R*C,1]); scatterplot(RR); save up.mat N Xs seridata RR SNR_dB Err_Rate