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

📄 数字信号发生器.m

📁 数字信号发生器,可以产生单极性、双极性归零、不归零共四种码型
💻 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 + -