本文旨在通过 MATLAB 模拟和分析双极性基带信号通过升余弦滚降响应信道的传输过程。重点放在信号波形的生成、升余弦滚降处理,以及眼图的绘制上,展示信号的传输特性和信道性能。
双极性基带传输是一种重要的信号调制技术,它将二进制数据(0和1)映射到两个不同的电平值上,通常是正负电压。与单极性和归零编码相比,双极性编码在相同的数据速率下提供了更好的性能,尤其是在抗干扰和误码率方面。升余弦滚降滤波器是通信系统中常用的一种滤波器,其主要作用是平滑信号边缘,从而减少带宽占用并控制码间干扰。滚降系数(α)决定了频谱的形状;α值较小意味着更尖锐的频谱,而较大的α值则提供更平滑的过渡。
MATLAB 模拟步骤:
- 生成双极性基带信号:首先生成一个随机的二进制序列,然后将其转换为双极性信号,即将二进制的0和1分别映射到-1和+1的电平值。
- 设计升余弦滚降滤波器:接下来,设计一个升余弦滚降滤波器,其主要参数包括滚降系数和码元长度。
- 信号卷积与波形生成:通过对双极性信号与滤波器的脉冲响应进行卷积,获得经过信道传输的信号波形。
- 绘制眼图:最后,绘制眼图来评估信号的质量,特别是在码间干扰和同步误差方面。
仿真代码
% 关闭所有图形窗口并清除所有变量
close all;
clear all;
%----生成双极性基带信号----
symbol_num = 1000; % 码元数量
data = sign(randn(1,symbol_num)); % 生成随机双极性数据
fs = 101; % 采样频率,单个码元内的采样数量
data_conv = zeropad(data,fs); % 生成需要卷积的序列
%----基带冲激响应(升余弦滚降)----
a = 1; % 滚降系数
Ts = 1; % 码元长度为1
dt = Ts/fs; % 采样间隔
t_sample = -3*Ts:dt:3*Ts; % 采样的时间范围
nrz = ones(1,fs); % 单个NRZ波形
% 计算升余弦滚降滤波器的脉冲响应
ht = sinc(t_sample/Ts).*cos(pi*a/Ts*t_sample)./(1-4*a^2.*t_sample.^2/Ts^2+eps);
st1 = conv(data_conv,nrz); % 原始NRZ码元信息
st2 = conv(data_conv,ht); % 卷积后的升余弦滚降信号
% 设置时间轴
t1 = 0:dt:symbol_num*Ts-dt;
t2 = -3*Ts:dt:(symbol_num+3)*Ts-dt;
% 绘制原始NRZ信号和升余弦滚降信号
figure('NumberTitle', 'off', 'Name','双极性基带信号的升余弦滚降传输');
subplot(2,1,1);
plot(t1,st1(1:length(t1)));
axis([0 20 -1.5 1.5]);
grid on;
hold on;
plot(t1,zeros(1,length(t1)),'r--');
xlabel('时间t');
ylabel('双极性NRZ信号:原始码元');
subplot(2,1,2);
plot(t2,st2);
axis([0 20 -1.5 1.5]);
grid on;
xlabel('时间t');
ylabel('升余弦滚降传输信号');
%----绘制眼图(无码间干扰,无噪声)---
figure('NumberTitle', 'off', 'Name','升余弦信道传输双极性基带信号时的眼图');
eye_num = 4; % 示波器上展示的眼图数量
t_eye = 0:dt:eye_num*fs*dt-dt; % 示波器的时间轴
for k = 10:309 % 绘制300次完整的示波器显示眼图
temp_eye = st2(k*fs+1:(k+eye_num)*fs); % 每一次在示波器上显示的波形
drawnow; % 动态绘图
plot(t_eye,temp_eye);
hold on; % 模拟示波器的“余辉”效应
end
grid on;
xlabel('时间t');
ylabel('升余弦滚降传输信号');
仿真结果
在MATLAB中运行上述代码后,我们可以观察到原始的双极性基带信号和经过升余弦滚降处理后的信号波形。通过比较这两种波形,可以清晰地看到升余弦滚降对信号形状的影响。眼图展示了信号在不同时间窗口的叠加,为我们评估信道传输性能和可能的同步误差提供了直观的视图。