1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWcm5hw
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
Polar码的主要思想是将多个子信道合并成一个等效信道,然后将等效信道分裂成多个信道容量呈两极分化(信道容量接近0或者1)的子信道,最后将信息在信道容量接近1的无噪子信道发送信息,而在信道容量接近0的子信道上发送收发已知的比特信息,从而提高信息传输的可靠性。
Polar码的极化过程主要由两步来完成,第一步:信道联合;第二步:信道分裂。
4.部分源码
.........................................................................
n = 7;%128
N = 2^n;
[Vals,Inds]= func_rates(n,0.5);
for i=1:length(SNR)
%设置误码率参数
Bit_err(i) = 0;
Num_err = 0;
%误码率累加器
Numbers = 0;
K = round(rate*N);
frozen_pos = Inds(1:N-K);
free_pos = sort(Inds(N-K+1:N),'ascend');
z = ones(N,1);
z(frozen_pos) = 0;
sigma = 1/sqrt(10^(SNR(i)/10));
while Num_err <= LENS(i)
fprintf('SNR = %f\n', SNR(i));
Num_err
data_in = randsrc(K,1,[0 1]);
u = zeros(N,1);
u(free_pos) = data_in;
x = func_encode(u);
Trans_BPSK = 2*x-1;
Rec_sd_1 = Trans_BPSK + sigma*randn(N,1);
Rec_sd = Rec_sd_1;
%接收端
y2 = Rec_sd;
L2 = exp(-2*y2);
v2 = func_SCdecoder(L2,z);
data_out2 = v2(free_pos);
nberr1 = length(find(data_out2~=data_in'));
Num_err = Num_err+nberr1;
Numbers = Numbers+1;
end
Bit_err(i) = Num_err/(length(data_in)*Numbers);
end
if rate==0.6
save R2_6.mat SNR Bit_err
end
if rate==0.5
save R2_5.mat SNR Bit_err
end
if rate==0.4
save R2_4.mat SNR Bit_err
end
figure;
semilogy(SNR,Bit_err,'b-o','linewidth',1);
xlabel('SNR per bit rS-D(dB)');
ylabel('Bit error rate(BER)');
grid on;
14_027_m