%解码与F、检测与F、放大与转发的比较
%带WGN的平坦衰落中的BPSK:
%绘制了误码率的仿真结果和理论结果。
%使用MRC组合两个信号
%使用平均BER
clc
clear all
close all
sum_dcf = 0;
sum_dtf = 0;
sum_af = 0;
N_bits = 15000; %数据位数
%对结果进行平均的迭代次数
N_iter = 15;
for iter = 1:N_iter
%随机数据位
data = round(rand(N_bits,1));
%使用速率1/2卷积码的信道编码:
trellis = poly2trellis(3,[5 7]); %格子结构
c_data = convenc(data,trellis);
%BPSK调制
tx = 2*c_data - 1;
%频道特性
SNRdB = -3:20; %研究BER的SNR范围
%附加噪声和中继信道的信道响应:
%源上行信道:
noise_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
h_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
%用户间通道:
noise_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
h_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
%对于中继上行链路:
noise_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
h_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1));
for k = 1:length(SNRdB)
SNR = 10^(SNRdB(k)/10); %将SNRdB转换为线性值SNR
ftx_r1 = sqrt(SNR) * h_r1 .* tx + noise_r1;
%均衡
eq_rx1 = ftx_r1 .* conj(h_r1);
%硬判决与双极转换
r_bits = (sign(real(eq_rx1)) + 1)/2;
%通道解码:
dec_dcf_r1 = vitdec(r_bits,trellis,3,'term','hard');
%使用与Source相同的过程重新编码:
c_data2 = convenc(dec_dcf_r1,trellis);
%用于继电器编码数据的BPSK信号:
tx2_dcf = 2 * c_data2 - 1;
%检测
dec_dtf_r1 = sign(real(eq_rx1));
tx2_dtf = dec_dtf_r1;
%放大:
beta = sqrt(1./((SNR * abs(h_r1).^2) + 1));
%amplification:
ftx_amp = ftx_r1 .* beta;
%中继到目标%
%DCF
ftx_dcf_r2 = sqrt(SNR) * tx2_dcf .* h_r2 + noise_r2 ;
%DTF
ftx_dtf_r2 = sqrt(SNR) * tx2_dtf .* h_r2 + noise_r2 ;
%AF
ftx_af_r2 = sqrt(SNR) * ftx_amp .* h_r2 + noise_r2 ;
%%%%%%%%%%%%%%%%% At the Destination%%%%%%%%%%%
ftx_d = sqrt(SNR)* tx .* h_d + noise_d;
%%%%%%%%%%%%%%%%%%%%%%%%DCF%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%MRC%%%%%%%%%%%%%%%
R_dcf = ftx_dcf_r2 .* conj(h_r2) + ftx_d .* conj(h_d);
%hard
dec_com_dcf = sign(real(R_dcf));
%误码率计算
%at destination:
err_com1(k) = sum(abs(dec_com_dcf - tx)/2);
simber_com1(k) = err_com1(k) / (2 * N_bits);
R_dtf = ftx_dtf_r2 .* conj(h_r2) + ftx_d .* conj(h_d);
%hard decision
dec_com_dtf = sign(real(R_dtf));
%误码率计算
%at destination:
err_com2(k) = sum(abs(dec_com_dtf - tx)/2);
simber_com2(k) = err_com2(k) / (2 * N_bits);
R_af = ftx_af_r2 .* conj(h_r2) .* conj(h_r1) + ftx_d .* conj(h_d);
dec_com_af = sign(real(R_af));
%误码率计算
err_com3(k) = sum(abs(dec_com_af - tx)/2);
simber_com3(k) = err_com3(k) / (2 * N_bits);
theberawgn(k) = 0.5 * erfc (sqrt(SNR));%AWGN的理论误码率
theberrayleigh(k) = 0.5 * (1 - sqrt(SNR./(1 + SNR))); %理论瑞利
mue = sqrt(SNR/(1+SNR));
mrcth(k) = 0.25 * (2 + mue) * (1-mue)^2;%理论2Rx MRC
end
sum_dcf = sum_dcf + simber_com1;
sum_dtf = sum_dtf + simber_com2;
sum_af = sum_af + simber_com3;
end
%average BER:
avgber_dcf = sum_dcf/N_iter;
avgber_dtf = sum_dtf/N_iter;
avgber_af = sum_af/N_iter;
%误码率图
figure
semilogy(SNRdB,avgber_dcf,SNRdB,avgber_dtf,SNRdB,avgber_af,SNRdB,theberawgn,SNRdB,theberrayleigh,SNRdB,mrcth);
axis([SNRdB(1) max(SNRdB) 10^-5 0.5]);
grid on
legend('DCF','DTF','AF','AWGN','Rayleigh','MRC 2 senders');
xlabel('SNR dB');
ylabel('BER');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2022A,包含仿真操作录像,中文注释,操作录像使用windows media player播放。 2.领域:卷积编码维特比译码+BPSK+MRC通信链路 3.内容:基于卷积编码维特比译码+BPSK+MRC通信链路matlab误码率仿真。 卷积编码:发送端使用卷积编码器对数据进行编码,以增加数据的冗余度并提高抗干扰能力。 BPSK调制:经过卷积编码后的数据被映射到BPSK调制符号上。 最大比合并(MRC):接收端使用多个接收天线接收信号,并利用最大比合并技术对接收到的信号进行合并。 维特比译码:经过MRC合并后的信号被送入维特比译码器进行译码。 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论
收起资源包目录
基于卷积编码维特比译码+BPSK+MRC通信链路matlab误码率仿真.rar (2个子文件)
Runme.m 4KB
20231213_162101.mp4 1.32MB
共 2 条
- 1
资源评论
- 2301_773215762024-01-07非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
fpga和matlab
- 粉丝: 15w+
- 资源: 2548
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功