基于Matlab模拟莱斯平坦衰落信道上数字信号传输的仿真

简介: 基于Matlab模拟莱斯平坦衰落信道上数字信号传输的仿真

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

SIMULINK是MATLAB中动态系统建模、仿真和分析的一个集成环境,文中按照仿真过程基本步骤用MATLAB的仿真工具SIMUINK实现了数字信号基带传输系统的仿真过程,对系统性能进行了分析.

⛄ 完整代码

% PILOT BASED CHANNEL ESTIMATION (FFT BASED) FOR OFDM SYSTEMS


close all

clear all

clc

SNR_dB = 40;% SNR PER BIT

NUM_FRAMES = 10^2;

FFT_LEN = 1024;

NUM_PILOT = 256;

NUM_BIT = 2*(FFT_LEN-NUM_PILOT); % NUMBER OF DATA BITS

CHAN_LEN = 10; % NUMBER OF CHANNEL TAPS

CP_LEN = CHAN_LEN-1; % LENGTH OF THE CYCLIC PREFIX

FADE_VAR_1D = 0.5; % 1D FADE VARIANCE OF THE CHANNEL

FADE_STD_DEV = sqrt(FADE_VAR_1D); % STANDARD DEVIATION OF THE FADING CHANNEL


% SNR PER BIT PARAMETERS - OVERALL RATE IS 2

SNR = 10^(0.1*SNR_dB); % LINEAR SCALE

NOISE_VAR_1D = 0.5*2*2*CHAN_LEN*FADE_VAR_1D/(2*SNR*FFT_LEN); % 1D AWGN NOISE VARIANCE

NOISE_STD_DEV = sqrt(NOISE_VAR_1D); % NOISE STANDARD DEVIATION


% PILOT AND DATA INDICES IN OFDM FRAME

PILOT_INDEX =  1:FFT_LEN/NUM_PILOT:FFT_LEN; % PILOT POSITION INDICES

DATA_INDEX = 1:FFT_LEN;

DATA_INDEX(PILOT_INDEX) = [];  % DATA POSITION INDICES



tic()

C_BER = 0; % bit errors in each frame

for FRAME_CNT = 1:NUM_FRAMES

%----            TRANSMITTER      -----------------------------------------

% SOURCE

A = randi([0 1],1,NUM_BIT);

% QPSK MAPPING

QPSK_SEQ = 1-2*A(1:2:end) + 1i*(1-2*A(2:2:end));


F_SIG_NO_CP = zeros(1,FFT_LEN); % F STANDS FOR FREQUENCY DOMAIN

F_SIG_NO_CP(DATA_INDEX) = QPSK_SEQ;

F_SIG_NO_CP(PILOT_INDEX) = (1+1i)*ones(1,NUM_PILOT);


% IFFT

T_SIG_NO_CP = ifft(F_SIG_NO_CP);

% INSERTING CYCLIC PREFIX

T_SIG_CP = [T_SIG_NO_CP(end-CP_LEN+1:end) T_SIG_NO_CP];


%---------------     CHANNEL      -----------------------------------------

% RAYLEIGH FREQUENCY SELECTIVE FADING CHANNEL

FADE_CHAN = normrnd(0,FADE_STD_DEV,1,CHAN_LEN)+1i*normrnd(0,FADE_STD_DEV,1,CHAN_LEN);

% FADE CHANNEL OUTPUT

CHAN_OP_TEMP = conv(T_SIG_CP,FADE_CHAN);

% AWGN

AWGN = normrnd(0,NOISE_STD_DEV,1,FFT_LEN+CP_LEN+CHAN_LEN-1)+1i*normrnd(0,NOISE_STD_DEV,1,FFT_LEN+CP_LEN+CHAN_LEN-1);

% AWGN OUTPUT

T_REC_SIG = CHAN_OP_TEMP + AWGN;


%----------------      RECEIVER  ------------------------------------------

% CP & TRANSIENT SAMPLES REMOVAL

T_REC_SIG(1:CP_LEN) = [];

T_REC_SIG_NO_CP = T_REC_SIG(1:FFT_LEN);

% PERFORMING THE FFT

F_REC_SIG_NO_CP = fft(T_REC_SIG_NO_CP);


%--------------------------------------------------------------------------

% FFT BASED CHANNEL ESTIMATION

E_F_PILOT_POS = F_REC_SIG_NO_CP(PILOT_INDEX)./(1+1i); % 1-TAP EQUALIZATION


E_T_PILOT_POS = ifft(E_F_PILOT_POS); % L_p point IFFT


% DISCARDING SAMPLES AFTER LOCATION CHAN_LEN

E_H_CHAN_LEN = E_T_PILOT_POS(1:CHAN_LEN);


% ZERO PADDING AND TAKING ITS IIT

E_F_H = fft(E_H_CHAN_LEN,FFT_LEN); % zero padding and FFT_LEN point FFT


% CHANNEL SUBCARRIERS AT DATA POSITIONS

E_F_H_DATA_POS = E_F_H(DATA_INDEX);

%--------------------------------------------------------------------------

% ML DETECTION

QPSK_SYM = [1+1i 1-1i -1+1i -1-1i];

QPSK_SYM1 = QPSK_SYM(1)*ones(1,FFT_LEN-NUM_PILOT);

QPSK_SYM2 = QPSK_SYM(2)*ones(1,FFT_LEN-NUM_PILOT);

QPSK_SYM3 = QPSK_SYM(3)*ones(1,FFT_LEN-NUM_PILOT);

QPSK_SYM4 = QPSK_SYM(4)*ones(1,FFT_LEN-NUM_PILOT);

DIST = zeros(4,FFT_LEN-NUM_PILOT);

DIST(1,:)=(abs(F_REC_SIG_NO_CP(DATA_INDEX) - E_F_H_DATA_POS.*QPSK_SYM1)).^2;

DIST(2,:)=(abs(F_REC_SIG_NO_CP(DATA_INDEX) - E_F_H_DATA_POS.*QPSK_SYM2)).^2;

DIST(3,:)=(abs(F_REC_SIG_NO_CP(DATA_INDEX) - E_F_H_DATA_POS.*QPSK_SYM3)).^2;

DIST(4,:)=(abs(F_REC_SIG_NO_CP(DATA_INDEX) - E_F_H_DATA_POS.*QPSK_SYM4)).^2;

% COMPARING EUCLIDEAN DISTANCE

[~,INDICES] = min(DIST,[],1);

% MAPPING INDICES TO QPSK SYMBOLS

DEC_QPSK_MAP_SYM = QPSK_SYM(INDICES);

% DEMAPPING QPSK SYMBOLS TO BITS

DEC_A = zeros(1,NUM_BIT);

DEC_A(1:2:end) = real(DEC_QPSK_MAP_SYM)<0;

DEC_A(2:2:end) = imag(DEC_QPSK_MAP_SYM)<0;

% CALCULATING BIT ERRORS IN EACH FRAME

C_BER = C_BER + nnz(A-DEC_A);

end

toc()

BER = C_BER/(NUM_BIT*NUM_FRAMES)

⛄ 运行结果

⛄ 参考文献

[1]曲中水, 王建卫, 朱泳. 基于MATLAB的数字信号基带传输系统仿真[J]. 森林工程, 2004, 20(4):3.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
7天前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
11天前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
116 15
|
7天前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
137 5
|
8天前
|
传感器 机器学习/深度学习 编解码
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
|
11天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
14天前
|
人工智能 供应链 新能源
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
|
9天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
9天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
9天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
|
8天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)

热门文章

最新文章