matlab普通仿真2(笔记)

我与影子孤独终老i 提交于 2020-01-19 07:08:13

〔实例 2.1〕试仿真得出一个幅度调制系统的输入输出波形。设输入被调制信号是一个幅度为 2v,频率为 1000Hz 的馀弦波,调制度为 0.5,调制载波信号是一个幅度为 5v,频率为 10KHz 的馀弦波。所有馀弦波的初相位为 0。

% ch2example1prg1.m
dt=1e-5;    % 仿真采样间隔
T=3*1e-3;   % 仿真终止时间
t=0:dt:T;
input=2*cos(2*pi*1000*t);       % 输入被调信号
carrier=5*cos(2*pi*1e4*t);      % 载波
output=(2+0.5*input).*carrier;  % 调制输出
% 作图: 观察输入信号, 载波, 以及调制输出
subplot(4,1,1); plot(t,input);xlabel('时间 t');ylabel('被调信号');
subplot(4,1,2); plot(t,carrier);xlabel('时间 t');ylabel('载波');
subplot(4,1,3); plot(t,output);xlabel('时间 t');ylabel('调幅输出');

% 无噪声包络检波及恢复原信号
y = hilbert(output);
am = (abs(y)/5-2)*2;
subplot(4,1,4); plot(t,am);xlabel('时间 t');ylabel('包络检波');axis([0 0.003 -2 2]);

模拟真实示波器显示的调幅仿真波形
程序中故意将输入被调信号的频率设置为1005Hz,这样其信号周期就与仿真的帧周期不是整数倍关系,运行后将看到「不断」滑动的被调信号,载波显示出相位抖动现象,而接收信号则沾染了噪声。

% ch2example1prg3.m
dt=1e-6;    % 仿真采样间隔
T=2*1e-3;   % 仿真的帧周期
for N=0:500 % 总共仿真的帧数
    t=N*T+(0:dt:T);             % 帧中的取样时刻
    input=2*cos(2*pi*1005*t);   % 输入被调信号,将1005改为1000就不会看不到动态图。
    carrier=5*cos(2*pi*(1e4)*t+0.1*randn);  % 载波
    output=(2+0.5*input).*carrier;          % 调制输出
    noise=randn(size(t));       % 噪声
    r=output+noise;             % 调制信号通过加性噪声信道
    % 作图: 观察输入信号, 载波, 以及调制输出
    subplot(3,1,1); plot([0:dt:T],input);xlabel('时间 t');
    ylabel('被调信号');text(T*2/3,1.5,['当前帧数: N=',num2str(N)]);
    subplot(3,1,2); plot([0:dt:T],carrier);
    xlabel('时间 t');ylabel('载波');
    subplot(3,1,3); plot([0:dt:T],r);
    xlabel('时间 t');ylabel('调幅输出');
    set(gcf,'DoubleBuffer','on');   % 双缓冲避免作图闪烁
    drawnow;
end

〔实例 2.2〕仿真电容的充电过程。

一个电压源通过电阻与电容串联的网络对电容充电。设 t = 0 为初始时刻(初始时刻之前电路断开,不工作),电压源输出电压 x(t) 为单位阶跃函数,电容两端的电压为 y(t),回路电流为 i(t),并将电压源视为系统输入,电容上的电压视为系统输出。电路的初始状态为 y(0)。图 2.3 给出了电路图和等价的系统模型。

根据题意建立电路方程组
y(t)=x(t)Ri(t)i(t)=Cdy(t)dt \begin{aligned} y(t) &=x(t)-R i(t) \\ i(t) &=C \frac{\mathrm{d} y(t)}{\mathrm{d} t} \end{aligned}

化简得到:

dy(t)dt=1RCx(t)1RCy(t) \frac{\mathrm{d} y(t)}{\mathrm{d} t}=\frac{1}{R C} x(t)-\frac{1}{R C} y(t)

将dy(t)=y(t+dt)-y(t)代入上式得:

y(t+dt)=y(t)+1RCx(t)dt1RCy(t)dt y(t+\mathrm{d} t)=y(t)+\frac{1}{R C} x(t) \mathrm{d} t-\frac{1}{R C} y(t) \mathrm{d} t

微分方程的欧拉算法
Δdty(t+Δ)y(t)+1RCx(t)Δ1RCy(t)Δ \Delta \approx \mathrm{d} t \\ y(t+\Delta) \approx y(t)+\frac{1}{R C} x(t) \Delta-\frac{1}{R C} y(t) \Delta

% ch2example2prg1.m
dt=1e-5;    % 仿真采样间隔
R=1e3;      % 电阻值
C=1e-6;     % 电容量
T=5*1e-3;   % 仿真区间从 -T 到 +T
t=-T:dt:T;  % 计算的离散时刻序列
y(1)=0;     % 电容电压初始值, 在时间小于零区间将保持不变
            % 如果要仿真零输入响应, 可设置 y(1)=1 等非零值.
% ----输入信号设定:可选择: 零输入,阶跃输入,正弦输入,方波输入等----
x=zeros(size(t));           % 初始化输入信号存储矩阵   
x=1*(t>=0);                 % 在0时刻的输入信号跃变为1, 即输入为阶跃信号.
                            % 如果要仿真零输入响应, 这里可设 x=0 即可
% x=sin(2*pi*1000*t).*(t>=0);   % 这是从0时刻开始的1000Hz的正弦信号
% x=square(2*pi*500*t).*(t>=0); % 这是从0时刻开始的500Hz的方波信号
% 仿真开始, 注意: 设零时刻之前电路不工作, 系统状态保持不变
for k=1:length(t)
    time=-T+k*dt;
    if time>=0 
        y(k+1)=y(k)+1./(R*C)*(x(k)-y(k))*dt; %递推求解下一个仿真时刻的状态值
    else
        y(k+1)=y(k); % 在时间小于零时设电路断开,系统不工作
    end
end
subplot(2,1,1);plot(t,x(1:length(t)));axis([-T T -1.1 1.1]);
xlabel('t');ylabel('input');
subplot(2,1,2);plot(t,y(1:length(t)));axis([-T T -1.1 1.1]);
xlabel('t');ylabel('output');

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!