⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basebandsystem.m

📁 数字基带仿真
💻 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 + -