在本系列文章发布了四年之后,我写了这篇文章。因为和仿真初期知识相关,因为依旧是作为绪论发出。根据我这几年的教学经验,必须在学生学习通信原理的时候就要强化仿真,等到大四的时候,很多学生连通信知识都忘的差不多了。根据课程进度,大三的学生们往往在学数字调制的知识时候,大家还没有开始学习数字信号处理课程中里面关于滤波器的知识,因此在完整的调制仿真程序当中,涉及的大量的滤波器知识就会让同学们学得很迷茫。通过怎样的方法能够让学生们能暂时撇开滤波器还能做好通信仿真呢?听我娓娓道来。
在学数字调制之前,大家接触的是模拟调制。如何写好模拟调制的仿真程序也是一个非常重要的能力。虽然知识是基础内容,但想要写好也是有一定难度的。我在课堂上给学生讲了多种模拟调制的原理和仿真过程,不知他们是否能消化?从写的过程中,我感觉到大家对MATLAB当中涉及的知识点都已经掌握了,但是就是对通讯设计的知识还处于非常朦胧的状态。比如说为什么信号源的采样率和载波的采样率,这些小的知识点很多同学是没概念的。
2024年下半年,在帮助通信工程专业学生学习通信原理的时候,发现大家有太多的不解之处。而且如何从模拟通信仿真过渡到数字通信仿真又没有相关的资料,因此我决定写一篇文章帮助学生来实现这种过渡。
之前的绪论让大家了解了误码性能和基带仿真的概念,那么在学习完整的BPSK调制解调器之前要有哪些准备呢?最主要是关于数字滤波器的知识!但很多同学往往此时还没有学数字滤波器的内容。所以我就需要在此篇文章中根据代码进行讲解,以帮助学生们完成学习的过渡。看看教材中的内容!
这些内容是不是很难理解?唯有通过程序才能真正消化每个部分的知识吧!在没有学过数字滤波器的知识前,大家可以把信号成形器看成是矩形波!
刚开始学数字调制,肯定不知道信号成形滤波器的含义,那就先不管它,把它当成 矩形波,也就是少了上图c中的过程。看看代码该如何写?程序假设使用加性高斯白噪声(AWGN)信道,并使用蒙特卡洛模拟来估计误码率(BER)。
% 参数设置
N = 1e6; % 仿真比特数
EbN0_dB = 0:2:10; % 信噪比 (dB)
EbN0 = 10.^(EbN0_dB/10); % 信噪比 (线性)
BER_sim = zeros(size(EbN0)); % 误码率初始化
% 信号生成
data_bits = randi([0 1], 1, N); % 生成随机比特流
bpsk_symbols = 2*data_bits - 1; % BPSK调制(0->-1, 1->+1)
% 虽然语句注明了是BPSK调制方式,但如果大家此时还没有学到数字调制的时候,可以把这个语句理解为电平转换过程!
% 双极性变化,可以抗更大的噪声。
for i = 1:length(EbN0)
% 添加噪声
noise = sqrt(1/(2*EbN0(i))) * randn(1, N); % 加性高斯白噪声
received_signal = bpsk_symbols + noise; % 通过AWGN信道
% 判决
detected_bits = received_signal > 0; % 检测阈值为0
detected_bits = double(detected_bits); % 将逻辑值转换为数值类型
% 计算误码率
BER_sim(i) = sum(detected_bits ~= data_bits) / N;
end
% 理论误码率
BER_theory = qfunc(sqrt(2*EbN0));
% 绘制结果
figure;
semilogy(EbN0_dB, BER_sim, 'bo-');
hold on;
semilogy(EbN0_dB, BER_theory, 'r--');
xlabel('Eb/N0 (dB)');
ylabel('Bit Error Rate (BER)');
legend('Simulation', 'Theory');
title('BPSK with Rectangular Filter - BER Performance in AWGN');
为了在代码中体现采样率(采样的概念早在数字信号处理课程的第一章就已经接触了,只不过同学们需要从奈奎斯特采样扩展到带通采样,怎么理解这两种采样的差别,靠仿真),可以在传输过程中对BPSK信号进行过采样(即每个符号由多个采样点表示),这样可以更真实地模拟出实际通信系统中的采样率和矩形滤波器的效果。我们可以定义一个采样率(可以明确每个符号包含的采样点数),并用矩形滤波器对BPSK符号进行成形。
% 过采样并进行成形
tx_signal = upsample(bpsk_symbols, samples_per_symbol); % 将符号过采样
tx_signal = conv(tx_signal, rect_filter, 'same'); % 应用矩形滤波器
% 在通信里面第一次遇到了卷积的概念!!!
% 之前模拟调制过程好像没有这个吧?