继续讲解!上堂课留了两个问题给同学们。不知道同学们有没有在课后查找资料!无思考,无进步!那滚降成型滤波器到底如何使用呢?什么是EbNo呢?先看看百度怎么讲的?数字信号在传输过程中受到叠加干扰与噪声,从而出现波形失真。1928年,瑞典科学家奈奎斯特为解决电报传输问题提出了数字波形在无噪声线性信道上传输时的无失真条件,称为奈奎斯特准则。其中奈奎斯特第一准则是抽样点无失真准则,是关于接收机不产生码间串扰的接收脉冲形状问题。对于基带传输系统,要达到上述目的,系统传输函数 H(f) 是单边带宽为1/2T的矩形函数(理想奈奎斯特滤波器),其时域波形为 h(t)=sinc(t/T),称为理想奈奎斯特脉冲成形。理想奈奎斯特滤波系统的传输函数形状为矩形,其脉冲响应为无限长,显然该脉冲成形滤波器在物理上是不可实现的,只能近似,称为奈奎斯特滤波器和奈奎斯特脉冲。奈奎斯特滤波器的频率传输函数可以表示为矩形函数和任意一个实偶对称频率函数的卷积;奈奎斯特脉冲可以表示为 sinc(t/T) 函数与另一个时间函数的乘积。脉冲成形就是一种滤波。数字通信系统的信号都必须在一定的频带内,但是基带脉冲信号的频谱是一个Sa函数,在频带上是无限宽的,那么单个符号的脉冲将会延伸到相邻符号码元内产生码间串扰,这样就会干扰到其他信号,这是不允许的。为了消除干扰,信号在发射之前要进行脉冲成形滤波,把信号的频谱约束在带内,这样就不会和其他信号产生冲突。
在MATLAB中,涉及升余弦滤波器的函数有很多:rcosflt 使用升余弦滤波器对输入信号进行滤波,rcosine设计升余弦滤波器,rcosiir 设计升余弦IIR滤波器,firrcos 升余弦滤波器设计。它们大部分已经逐渐被抛弃(新版本的MATLAB将逐渐的不再使用这些函数,但是会因为兼容性的历史原因被保留)。建议使用新函数来替代!下堂课再讲EbNo的相关内容。
先来看看有编码的BPSK程序是什么样子?
%%% BPSK调制解调器误码性能仿真程序 %%%
%%%% code_BPSK_modem_sim1.m %%%
%% date: 2016-01-05 author: 算法工匠 %%
%%%%% 程序说明
% 完成BPSK调制解调器的仿真,含有编解码。
% 比较不同信噪比下的误码性能。
% 通信体制具体内容如下:
% 调制方式:BPSK 编码方式:bch
% 滚降因子:0.5
% 解调方式:相干解调 译码方式:时域译码
% 噪声:加性高斯白噪声 中频信号仿真
%%% 仿真环境
% 软件版本:matlab 2015b
% 有些函数已经不用,但程序依旧正常运行。
%%% sim系列说明之处
%
clear all;
close all;
format long;
%%************* 程序主体 *************%%
%%%%%% 系统参数 %%%%%
bit_rate = 1000;
symbol_rate = 1000;
fre_sample = 16000;
symbol_sample_rate = 16; % 一个符号内的采样倍数
fre_carrier = 4000;
%%%%%%%% 信源 %%%%%%%
%%% 帧信息
% msg_source = randint(1,1000);
msg_source = randint(1,960); % 随机信号
% 通常帧头会采用扩频序列,为了方便调试,可以采用全1和全0。
% randint函数需要用randi函数来替换。
%%% 帧头
frame_head = [ones(1,20) zeros(1,20)];
%%%%%%% 发射 %%%%%%
%%%%%% 编码器
%%% BCH编码
bch_m = 4;
bch_n = 2^bch_m-1;
% Codeword length
bch_k = 5;
% Message length
nwords = 10;
% Number of words to encode
%%% 函数应用示例
% rand_msg = randi([0 1], nwords, bch_k);
% msg = gf(rand_msg);
% msg_code = bchenc( msg, bch_n, bch_k);
% Encode the message
%%% 串并转换
msg_source_reshape = reshape(msg_source,5,length(msg_source)/5);
msg_source_gf = gf(msg_source_reshape');
msg_source_code = bchenc(msg_source_gf, bch_n, bch_k);
% Encode the message
% 只对帧内容进行编码
%%% 并串转换
msg_source_code_s = reshape( msg_source_code', 1, []);
%%% 伽罗华域转换为十进制数
msg_source_code_dec = ones(1,length(msg_source_code_s));
for i=1:length(msg_source_code_s)
if msg_source_code_s(i)==0
msg_source_code_dec(i) = 0;
else
msg_source_code_dec(i) = 1;
end
end
%%%%%% 组帧
frame_msg_code = [frame_head msg_source_code_dec];
%%%%%%%% 调制器
%%% 双极性变换
bipolar_msg_source = 2*frame_msg_code - 1;
%%% 滤波器
% rcosflt 滚降成型滤波函数
rcos_msg_source = rcosflt(bipolar_msg_source,1000,16000);
% Rolloff factor=0.5。
% 建议替换!可以使用rcosine和filter两个函数来替换!
% 时域频域观察
fft_rcos_msg_source = abs(fft(rcos_msg_source));
figure(1)
plot(rcos_msg_source)
title('时域波形')
figure(2)
plot(fft_rcos_msg_source)
title('频域波形')
aaa = 1; % 调试断点
%%% 载波发送
time =[1:length(rcos_msg_source)];
rcos_msg_source_carrier = rcos_msg_source'.*cos(2*pi*fre_carrier.*time/fre_sample);
% 时域频域观察
fft_rcos_msg_source_carrier = abs(fft(rcos_msg_source_carrier));
figure(3)
plot(rcos_msg_source_carrier)
title('时域波形')
figure(4)
plot(fft_rcos_msg_source_carrier)
title('频域波形')
aaa = 1; % 调试断点
%%%%%%%% 信道 %%%%%%%%
% 设置信噪比
snr = 10; % 不是比特信噪比哦!!!
%%% 高斯白噪声信道
rcos_msg_source_carrier_noise = awgn(rcos_msg_source_carrier,snr,'measured');
%%% 瑞利信道(暂不考虑)
接收机部分会是什么样子呢?下节课继续讲解。真正的干货啊!如何来理解滚降因子的差异呢?BCH编解码的概念有吗?再提出一个问题:什么是蒙特卡洛测试?为什么要仿真这么长的信号呢?难道是巧合?建议大家去看《什么是误码率》系列文章!如果你想在通信专业领域发展,“误码率”这座山必须爬过去!
知识进阶之路!对于通信专业的学生,仿真入门很重要!这应该是在大学时期做的事情。多写代码是最好的晋级方式。
未完,待续!
20181106记录:
金庸走了,江湖再见。有种莫名的失落。小学生的时候就拜读了您的作品,被深深吸引。那时没敢贪读,现在也许该重新看看了。
上次有同感是在钱学森院士走的时候。这次查老走了,也是此种感觉!大师就是大师,人走了,影响力还在。时光一去不复返,作品会不断的影响一代又一代。
附上另一位浙江大师级人物圆寂时的照片。弘一法师(李叔同)为律宗大师。每个人离开世间的方式都不一样,希望所有人都能没有痛苦安详离开。此刻又想到了我的董老师,愿痛苦远离她。
修订记录
20181107 完成初稿;
20221130 修订内容v2;
原文标题:计算机通信与网络v2 实验课程(17)
文章出处:【微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !