📄 数字信号发生器.m
字号:
%Auther:杨登锋
%Date:3/26/2008
%Describtion:产生单极性或双极性归零码或不归零码,并显示其波形及频谱
global dt df t f N
close all
disp('请选择模式:'); %输出提示信息
disp('1.单极性不归零码,');
disp('2.双极性不归零码,');
disp('3.单极性归零码,');
disp('4.双极性归零码.');
mode=input('mode=[1]:'); %选择模式
if isempty(mode), mode=1;end
if (mode==3) ||(mode==4)
Rt=input('归零码的占空比,Rt=[0.5]:');%Rt为占空比
if isempty(Rt),Rt=0.5;end
end
k=input('取样点数=2^k, k=[14]');
if isempty(k), k=14; end
N=2^k; %采样点数
L=64; %每码元的采样点数
M=N/L; %码元数
Ts=0.5; %码元宽度是0.5us
dt=Ts/L;
df=1/(N*dt); %MHz
T=N*dt; %截短时间
Bs=N*df/2 ; %系统带宽
t=[-T/2+dt/2:dt:T/2]; %时域横坐标
f=[-Bs+df/2:df:Bs]; %频域横坐标
EP=zeros(size(f));
for ii=1:50
switch mode
case 1 %单极性不归零码
rcode=round(rand(1,M)); %产生随机码
bc=ones(1,L); %定义复制的次数
c=rcode(bc,:); %将a的第一行复制L次,生成L*M矩阵
e=reshape(c,1,L*M); %将c重排成1*L*M数组
s=e;
case 2 %双极性不归零码
rcode=sign(randn(1,M)); %产生随机码
bc=ones(1,L); %定义复制的次数
c=rcode(bc,:); %将a的第一行复制L次,生成L*M矩阵
e=reshape(c,1,L*M); %将c重排成1*L*M数组
s=e;
case 3 %单极性归零码
rcode=round(rand(1,M)); %产生随机码
s=zeros(1,N);
for jj=1:M
for tt=1:Rt*Ts/dt;
s(tt+(jj-1)*L)=rcode(jj);
end
end
case 4 %双极性归零码
rcode=sign(randn(1,M)); %产生随机码
s=zeros(1,N);
for jj=1:M
for tt=1:Rt*Ts/dt;
s(tt+(jj-1)*L)=rcode(jj);
end
end
otherwise
disp('输入错误!');
end
S=t2f(s); %信号的傅氏变换
P=S.*conj(S)/T; %信号的功率谱
EP=(EP*(ii-1)+P)/ii; %累计平均,提高仿真度
subplot(1,2,1)
aa=30+10*log10(EP+eps); %加eps以避免除以零
plot(f,aa,'r');
grid
axis([-5,+5,-50,50])
xlabel('f (MHz)')
ylabel('Ps(f) (dBm/MHz)')
title(['频域:采样点数2∧',int2str(k),'=',int2str(2^k)])
subplot(1,2,2)
plot(t,s,'r')
grid
axis([-2,+2,-1.5,1.5])
xlabel('t (us)')
ylabel('s(t) (V)')
title(['时域:采样点数2∧',int2str(k),'=',int2str(2^k)])
end
if (mode==3) ||(mode==4)
gtext(['占空比:Rt=',num2str(Rt)])
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -