继续展示含有编解码BPSK调制解调器的仿真程序。来到了信道部分和接收机部分。
%%%%% 信道 %%%%%%%
% 设置信噪比
snr = 10;
%%% 高斯白噪声信道
rcos_msg_source_carrier_noise = awgn(rcos_msg_source_carrier,snr,'measured');
%%% 瑞利信道
% 暂时不考虑!
%%%%%% 接收机 %%%%%%%%%
%%%%%%%%% 解调器
%%% 载波恢复
% 生成本地载波
rcos_msg_source_noise = rcos_msg_source_carrier_noise.*cos(2*pi*fre_carrier.*time/fre_sample);
% 滤波高频,保留基带信号
LPF_fir128 = fir1(128,0.2); % 生成低通滤波器
rcos_msg_source_LP = filter( LPF_fir128, 1, rcos_msg_source_noise );
% 延时64个采样点输出。
figure(5)
plot(rcos_msg_source_LP)
title('时域波形')
figure(6)
plot(abs(fft(rcos_msg_source_LP)))
title('频域波形')
%%% 匹配滤波
% 生成匹配滤波器
rolloff_factor = 0.5; % 滚降因子
rcos_fir = rcosdesign(rolloff_factor, 6, symbol_sample_rate);
% 生成匹配滤波器 a square-root raised cosine FIR filter with rolloff factor
% 滤波
rcos_msg_source_MF = filter( rcos_fir, 1, rcos_msg_source_LP ); % filter
figure(7)
plot(rcos_msg_source_MF,'-*')
title('时域波形')
figure(8)
plot(abs(fft(rcos_msg_source_MF)))
title('频域波形')
%%% 最佳采样
% 选取最佳采样点,一个符号取一个点进行判决
decision_site = 160; % (96+128+96)/2 = 160 三个滤波器延迟值
rcos_msg_source_MF_option = rcos_msg_source_MF(decision_site : symbol_sample_rate : end);
% 涉及三个滤波器,固含有三个滤波器延迟累加。
figure(9)
plot(rcos_msg_source_MF_option,'-*')
title('时域波形')
%%% 判决
msg_source_MF_option_sign = sign(rcos_msg_source_MF_option);
aaa = 1; % 调试断点
%%%%%%%%% 译码器
%%% 帧信息送入译码器
msg_source_frame = msg_source_MF_option_sign(41:40+15*100); % 取中间一段进行译码
aaa = 1; % 调试断点
%%% 数据类型转换
msg_source_frame_bi = (msg_source_frame + 1)/2; % 二进制转换
msg_source_reshape = reshape(msg_source_frame_bi,15,length(msg_source_frame_bi)/15);
msg_source_frame_gf = gf(msg_source_reshape'); % 转换为伽罗华域
%%% BCH译码
msg_source_decode = bchdec(msg_source_frame_gf, bch_n, bch_k);
aaa = 1; % 调试断点
%%% 并串转换
msg_source_decode_s = reshape( msg_source_decode', 1, []);
%%% 伽罗华域转换为十进制数
msg_source_decode_dec = ones(1,length(msg_source_decode_s));
for i=1:length(msg_source_decode_s)
if msg_source_decode_s(i)==0
msg_source_decode_dec(i) = 0;
else
msg_source_decode_dec(i) = 1;
end
end
休息一下!
%%%% 信宿 %%%%
%%% 误码性能比对
% [err_number,bit_err_ratio] = biterr(x,y) % 函数示例
% 无编解码状态下误码性能比对
% [err_number1,bit_err_ratio1] = biterr();
% 编解码状态下误码性能比对
[err_number2,bit_err_ratio2] = biterr(msg_source(1:length(msg_source_decode_dec)),msg_source_decode_dec);
aaa = 1; % 调试断点
%%%%%%% 仿真结果 %%%%%%%%%
%%% 误码性能数据
%%% 图形显示
% semilogy
%%%%%%%%%%%%% 结论 %%%%%%%%%%%%%%%%
% 完成了BPSK编码调制解调器的仿真,程序仿真结果正确。
% 注意shape函数的用法,按列进行数据排序。所以需要进行多次矩阵转置。
% 2017-1-9
% 优化程序语句。进行有无编解码状态下误码性能比对。
% 2017-1-13
怀念身体好时在深圳吃的麻辣烫!
华为的姜美女请的客。
同学们先慢慢消化。为什么我会在BPSK仿真程序后面再加上BCH编解码呢?
20190716记录:
暑假期间继续些文章,继续录制课程,传播知识!
修订记录
20181130 完成初稿;
20190716 修订内容;