数字基带传输系统仿真分析

课程设计要求:(1)设计基于理想低通以及不同滚降系数的理想滚降数字基带传输系统,理解无码间串扰的时频域条件;(2)画出理想低通以及升余弦系统对应的时频域波形;(3)观察基带信号经过理想低通以及升余弦滤波器前后的波形;(4)对经过基带传输后的信号加入高斯白噪声,利用眼图定性分析噪声对接收信号的影响。

close all;
Ts = 1; % 码元周期
N_sample = 17; % 每个码元抽样点数
eye_num = 8; % 眼图的个数
alpha = 0.6; % 滚降系数,其中为零的时候是理想低通
N_data = 1000; % 码元数
dt = Ts/N_sample; % 抽样时间间隔
df=1.0/(20.0*Ts);%频率间隔
f=-2/Ts:df:2*Ts;%从 -2/Ts 到 2*Ts 的频率范围
t = -3*Ts:dt:3*Ts; % 设置采样
%% 基带升余弦滚降系统函数频谱
    for k=1:length(f)
        if abs(f(k))>0.5*(1+alpha)/Ts%这个阈值确定了升余弦滤波器的主瓣的宽度。如果频率超过这个阈值,说明该频率的成分将被过滤,其对应的 Xf 设置为零
            Xf(1,k)=0;
        elseif abs(f(k))<0.5*(1-alpha)/Ts
            Xf(1,k)=Ts;%如果频率低于这个阈值,说明该频率的成分将被完全通过,对应的 Xf 设置为采样周期 Ts
        else
            Xf(1,k)=0.5*Ts*(1+cos(pi*Ts/(alpha+eps)*(abs(f(k))-0.5*(1-alpha)/Ts)));%根据升余弦滤波器的频域表达式来计算频谱
        end
    end
figure; % 创建新的图形窗口
plot(f,Xf);
axis([-1 1 0 1.2]);
xlabel('f/Ts');
ylabel('升余弦系统的频域波形');

%% 产生双极性数字信号
d = sign(randn(1, N_data)); % randn随机生成数字 sign函数进行一个判断,判断其正负
xt = sigexpand(d, N_sample); % 对d进行扩张,每个间隔加入N_sample-1个零

% 基带系统冲击响应(升余弦)
ht = sinc(t/Ts).*(cos(alpha*pi*t/Ts))./(1-4*alpha^2*t.^2/Ts^2+eps); % 升余弦滚降特性的公式
st = conv(xt, ht); % 卷积函数
tt = -3*Ts:dt:(N_data+3)*N_sample*dt-dt; % 设置采样

%% 绘制基带升余弦滚降系统函数
figure; % 创建新的图形窗口
plot(t, ht);
axis([-2 2 -1.2 1.2]); % 横坐标范围,纵坐标范围
xlabel('t/Ts');
ylabel('升余弦函数');

%% 绘制基带信号
figure; % 创建新的图形窗口
stem(d);
axis([0 20 -1.1 1.1]); % 横坐标范围,纵坐标范围
xlabel('时间');
ylabel('幅度');
hold on;
grid on;
title('双极性NRZ码元序列-扩张前');
%% 绘制扩张后的信号
figure; % 创建新的图形窗口
stem(xt);
axis([0 360 -1.1 1.1]); % 横坐标范围,纵坐标范围
xlabel('时间');
ylabel('幅度');
hold on;
grid on;
title('双极性NRZ码元序列-扩张后');

%% 绘制接收端波形
figure; % 创建新的图形窗口
plot(tt, st);
axis([0 20 -1.2 1.2]); % 横坐标范围,纵坐标范围
xlabel('t/Ts');
ylabel('基带信号');

%% 绘制眼图
figure; % 创建新的图形窗口
ss = zeros(1, eye_num*N_sample); % 建立零矩阵
ttt = 0:dt:eye_num*N_sample*dt-dt; % 采样间隔
for k = 3:50
    ss = st(k*N_sample+1:(k+eye_num)*N_sample);
    drawnow; % 将还未处理完的图像实时的显示出来,实时看到图像的每一步变化情况
    plot(ttt, ss);
    hold on; % 新画图像之后不覆盖原图像
end
xlabel('t/Ts');
ylabel('基带信号眼图')

%% 添加高斯白噪声
SNR_dB = 10; % 信噪比(dB)
st_noisy = awgn(st, SNR_dB, 'measured'); % 使用awgn函数添加高斯白噪声

%% 绘制眼图
figure;
ss_noisy = zeros(1, eye_num*N_sample);
ttt_noisy = 0:dt:eye_num*N_sample*dt-dt;
for k = 3:50
    ss_noisy = st_noisy(k*N_sample+1:(k+eye_num)*N_sample);
    drawnow;
    plot(ttt_noisy, ss_noisy);
    hold on;
end
xlabel('t/Ts');
ylabel('带噪声的眼图');
title('眼图 - 带噪声');

%% 抽样判决
sample_points = round((3:17:length(st_noisy) - N_sample/2) / N_sample) * N_sample + 1; % 在每个码元的中心位置进行抽样
decisions = (sign(st_noisy(sample_points)) ); % 将符号判决映射为0和1

%% 显示抽样判决结果
figure;
stem(sample_points*dt, decisions, 'ro-', 'LineWidth', 2, 'MarkerFaceColor', 'r');
axis([0 20 -1.5 1.5]);
xlabel('时间');
ylabel('抽样判决结果 ');
title('抽样判决结果');

%% 扩展函数,转换为1维矩阵进行卷积
function [out] = sigexpand(d, M)
    N = length(d); % 基带信号码元长度
    out = zeros(M, N); % 矩阵M为采样点 N为基带信号码元数量,建立M*N的零矩阵
    out(1, :) = d; % 将零矩阵第一行换成基带信号中的8个码元
    out = reshape(out, 1, M*N); % 1行 m*n 列
end

欢迎探讨相关问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值