首页/文章/ 详情

通信原理与matlab仿真 编码调制一起来(2)

5年前浏览4177

继续展示含有编解码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 修订内容;

MATLAB电子
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2019-07-16
最近编辑:5年前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 395粉丝 2585文章 340课程 40
点赞
收藏
未登录
1条评论
小丑
无知不是生存的障碍,傲慢才是!
5年前
生活工作两不误
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈