📄 basebandsystem.m
字号:
%+-+-+-+-输入信号及其功率谱密度-+-+-+-+%
%global dt df t f T N L %全局变量
clear; %清理数据空间
close all
clc;
k=16; %取样点幂次
N=2^k; %采样点数
L=64; %每码元的采样点数
M=N/L; %码元数
Rb=2; %码速率是2Mb/s
Ts=1/Rb; %码元间隔
TS=1/3; %系统带宽为(1+alpha)/(2*TS)MHz=2.99MHz
dt=Ts/L; %时域采样间隔
df=1/(N*dt); %频域采样间隔
T=N*dt; %截短时间
Bs=N*df/2; %系统带宽
alpha=0.33; %升余弦滤波器滚降系数0.5
Na=4; %示波器扫描宽度为4个码元
SNR=30; %信噪比为30dB
ratio=0; %误码率初始值设为0
t=[-T/2+dt/2:dt:T/2]; %时域横坐标,-T/2+dt的目的是对开分母为0的那个点
f=[-Bs+df/2:df:Bs]; %频域横坐标
tt=[0:dt:Na*L*dt]; %显示眼图的时域坐标
EP=zeros(1,N); %用于存储结果数据
EP_in=zeros(1,N);
EP_out=zeros(1,N);
%+-+-+-+-升余弦滤波器-+-+-+-+%
g1=sin(pi*t/TS)./(pi*t/TS);
g2=cos(alpha*pi*t/TS)./(1-4*(alpha*t/TS).^2);
g=g1.*g2; %升余弦脉冲时域波形
G=T2F(g,N,dt)/TS;
S_RCos=sqrt(abs(G)); %根号升余弦滤波器是将升余弦滤波器的幅频响应取根号
%循环嵌套,对结果进行平均作为输出
for jj=1:20 %通过100次迭代,使得a中的0、1基本保持等概出现
a=round(rand(1,M)); %码元矢量
%rand(1,M)表示产生一行M列0~1之间的随机数,round(X)表示对X进行
%四舍五入使其编程0、1从而产生随机数字脉冲值
s=zeros(1,N); %用于存储采样后的码元序列数据
%内层循环产生NRZ码
for ii=1:L %循环一次即对所有码元进行一次采样,循环次数=采样率
s(ii+[0:M-1]*L)=a;
end
%计算功率谱,当输入信号的时域波形为s
S=T2F(s,N,dt); %输入信号的傅氏变换
P=S.*conj(S)/T; %S和S的共轭(conj(S)相乘为能量,对时间平均得到功率
EP=(EP*(jj-1)+P)/jj; %对jj从1到100次产生的NRZ码变换得到的功率值进行累计平均
S_in=S.*S_RCos;
%经过根号升余弦后的输入信号功率谱
P_in=S_in.*conj(S_in)/T;
EP_in=(EP_in*(jj-1)+P_in)/jj;
%经过根号下升余弦滤波器后的输入信号的眼图
s_in=real(F2T(S_in,N,dt)); %经过根号下升余弦系统后的输出
%传输信道中加入高斯白噪声
s_noise = awgn(s_in,SNR,'measured'); % Add white Gaussian noise.
Noise=T2F(s_noise,N,dt);
S_out=Noise.*S_RCos;
s_out=real(F2T(S_out,N,dt));
temp=round(s_out);
Temp=T2F(temp,N,dt);
P=Temp.*conj(Temp)/T;
EP_out=(EP_out*(jj-1)+P)/jj;
[error_number,ratio]=biterr(s,round(s_out));
ratio=(ratio*(jj-1)+ratio)/jj;
end
%显示单极性不归零码序列
disp('按任意键显示输入信号的相关信息');pause;
figure(1)
set(1,'position',[10,50,300,200]); %设定窗口位置及大小
figure(2)
set(2,'position',[350,50,300,200]);%设定窗口位置及大小
figure(1)
plot(t,s,'r')
grid;axis([-10,+10,-1,+2]);
xlabel('t(us)');ylabel('s(t)(V)' );
title('输入信号的时域波形');
%显示单极性不归零码的功率谱
figure (2)
aa=30+10*log10(EP+eps); %加eps以避免除以零
plot(f,aa,'g');
grid;axis([-10,+10,-50,+50]);
xlabel('f(MHZ)');ylabel('Ps(dBm)');
title('输入信号的功率谱');
%figure(3)
%lgEP=30+10*log10(EP_in+eps);
%plot(f,lgEP);
%axis([-10,10,-50,50]);title('输入信号经滤波器后的功率谱');
figure(4)
hold on;
for kk=1:Na*L:(N-Na*L)
plot(tt,s_in(kk:(kk+Na*L)));
end
title('经过根号下升余弦滤波器后输入信号的眼图');
figure(5)
plot(t,s,t,s_in);
axis([-10,10,-1,2]);
title('经过根号升余弦后输入信号时域波形');
legend('输入脉冲信号','经过滤波器后的信号');
disp('按任意键显示经过信道输出信号的信息');pause;
figure(6)
hold on
for kk=1:Na*L:(N-Na*L)
plot(tt,s_out(kk:(kk+Na*L)));
end
title('输出信号的眼图');
[error_number,ratio]=biterr(s,round(s_out));
ratio
figure(7)
p_out=30+10*log10(EP_out+eps);
plot(f,p_out,'k');
grid;axis([-10,+10,-50,+50]);
xlabel('f(MHZ)');ylabel('Ps(dBm)');title('输出信号的功率谱');
figure(8)
plot(t,temp,'r')
grid;axis([-10,+10,-1,+2]);
xlabel('t(us)');ylabel('s(t)(V)' );title('经采样判决后的饿输出信号波形');
disp('按任意键显示在信噪比为30dB条件下的误码率');pause;
ratio;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -