1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaXlJ5q
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
4.部分源码
...............................................................................
SNRs = 10;%可修改参数
Modes = 4; %只支持QPSK
isldpc = 1;
%OFDM长度
Nfft = 512;
%子载波数目
NCarrier = 64;
%符号数/载波
Nsymbols = 8;
%循环前缀长度
Ncp = 10;
Nadder = Nfft+Ncp;
%位数/符号
Nbits = log2(Modes);
%LDPC相关参数
Rl = 0.5;%设置码率为
Nl = Nsymbols*NCarrier;
Ml = Nl*Rl;
Hl = mackay(Ml,Nl);
%发送天线矩阵
Tr_matrix =[1 2;-2+j 1+j];
NTr_matrix= size(Tr_matrix,1);
Nt = size(Tr_matrix',2); %发射天线数目
Nr = 2; %接收天线数目
%发射
[Nxx,data_eta,data_delta,data_eps,data_cojm] = func_trans_x(Nt,Tr_matrix,NTr_matrix);
%子载波
Carriers = (1: NCarrier) + (floor(Nfft/4) - floor(NCarrier/2));
Len_carriers = Nfft-Carriers+2;
Tx_training = func_training_symbol(Nt,NCarrier);
Nbase = NCarrier * Nsymbols;
LENS = 1000;
II = im2bw(imresize(rgb2gray(imread('a.jpg')),[Nbase/2,Nbase/2]));
%绘图信息存储矩阵
IMAGE = zeros(Nbase/2,Nbase/2);
IMAGE = II;
figure;
subplot(121);
imshow(IMAGE);
title('原始图像');
IMAGE2 = zeros(Nbase/2,Nbase/2);
Bers=zeros(length(SNRs),1);
for j_snr = 1:length(SNRs)
CNT = 0;
error = 0;
while CNT <= 127;
SNRs(j_snr)
error
CNT = CNT + 1;
Nerror = zeros(1,Nr);
data_buffer1 = zeros(NCarrier,Nsymbols,Nr);
data_bits = zeros(Nbase,Nbits,Nr);
N0 = 2*10^(-SNRs(j_snr)/10);
%生成随机数用于仿真
if isldpc == 1;
%Tsignal0 = round(rand(Nbase/2,Nbits));
Tsignal0 = IMAGE(:,2*CNT-1:2*CNT);
Tsignal = [Tsignal0;Tsignal0];
%LDPC
HS = cell(1,Nbits);
for ix = 1:Nbits
[ldpc_code,newH] = func_Enc(Tsignal0(:,ix),Hl);
Tsignal(:,ix) = [ldpc_code;Tsignal0(:,ix)];
HS{ix} = newH;
end
end
if isldpc == 0;
Tsignal0 = round(rand(Nbase,Nbits));
Tsignal = [Tsignal0];
end
Tsignal2 = bi2de(Tsignal);
%PSK/QAM调制
if Modes == 2 | Modes == 4
Tsignal_mod = pskmod(Tsignal2,Modes,0);
end
if Modes == 16 | Modes == 64
Tsignal_mod = qammod(Tsignal2,Modes,0);
end
Tcar_mat = reshape(Tsignal_mod,NCarrier,Nsymbols);
for st1=1:Nt:Nsymbols
data = [];
for st2=1:Nt
data=[data;Tcar_mat(:,st1+st2-1)];
end
%STBC
data_stbc = func_stbc(data,Tr_matrix,NTr_matrix,NCarrier,Nt);
%添加训练序列
data_stbc = [Tx_training;data_stbc];
data_rec = zeros(1,Nadder*(NTr_matrix+1),Nr);
for st11=1:Nr
for st2=1:Nt
...........................................................................
%解调
if Modes == 2 | Modes == 4
r_sym = pskdemod(data_recf,Modes,0);
end
if Modes == 16 | Modes == 64
r_sym = qamdemod(data_recf,Modes,0);
end
data_buffer1(:,st1:st1+Nt-1,st11) = r_sym;
end
end
data_bufferf = zeros(Nbase,Nr);
for st11=1:Nr
tmps1 = data_buffer1(:,:,st11);
data_bufferf(:,st11) = tmps1(:);
data_bits(:,:,st11) = de2bi(data_bufferf(:,st11));
if isldpc == 1;
Recfind = [];
%LDPC译码
for ix = 1:Nbits
[vhatsd,nb_itersd,successsd] = func_Dec(2*data_bits(:,ix,st11)-1,HS{ix},N0,30);
Recfind(:,ix) = vhatsd(Ml+1:Nl)';
end
end
if isldpc == 0;
Recfind = [];
Recfind(:,:) = data_bits(:,:,st11);
end
for st22=1:Nbase/2
for st33=1:Nbits
if Recfind(st22,st33)~=Tsignal0(st22,st33)
Nerror(st11) = Nerror(st11) + 1;
end
end
end
end
error = error + mean(Nerror);
IMAGE2(:,2*CNT-1:2*CNT) = Recfind;
end
Bers(j_snr)=error/(Nbase)/CNT/Nbits;
end
%还原图像
subplot(122);
imshow(IMAGE2);
title('接收到的图像');
% figure;
% semilogy(SNRs,Bers,'b-s');
% xlabel('信噪比/dB');
% ylabel('误码率');
% grid on
if SNRs == 2
save r1_2.mat IMAGE IMAGE2
end
if SNRs == 5
save r1_5.mat IMAGE IMAGE2
end
if SNRs == 10
save r1_10.mat IMAGE IMAGE2
end
14_028_m