【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

上篇博文采样sinc函数内插的方式实现了模拟信号的重建:【 MATLAB 】MATLAB 实现模拟信号采样后的重建(一)

这篇博文我们使用零阶保持器(ZOH)来重建信号,采用的案例依然是上篇博文中的案例:

模拟信号:

【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

对该信号使用两种不同的采样频率采样。

a. 在 fs = 5000 对信号进行采样

b. 在 fs = 1000 对信号采样


这里直接给出MATLAB脚本:

clc
clear
close all
 
% Analog signal
Dt = 0.00005;
t = - 0.005:Dt:0.005;
xa = exp(-1000 * abs(t));

subplot(3,1,1);
plot(1000*t,xa);
title('Analog signal');
xlabel('t in msec');
ylabel('xa');
 
%Fs = 5000,Ts = 0.0002
% Discrete-time signal
Ts = 0.0002;
Fs = 1/Ts;
n = -25:25;
nTs = n*Ts;
x = exp(-1000*abs(nTs));

subplot(3,1,2)
plot(1000*t,xa);
hold on
stem(n*Ts*1000,x);
title('Discrete-time signal');
hold off

% Analog signal reconstruction
subplot(3,1,3);
stairs(nTs*1000,x);
title('Analog signal reconstruction');
xlabel('t in msec');
ylabel('xa after reconstruction');
hold on 
stem(n*Ts*1000,x)
hold off

% Fs = 1000, Ts = 1ms
% Discrete-time signal
Ts = 0.001;
Fs = 1/Ts;
n = -5:5;
nTs = n*Ts;
x = exp(-1000*abs(nTs));

figure 

subplot(3,1,1);
plot(1000*t,xa);
title('Analog signal');
xlabel('t in msec');
ylabel('xa');

subplot(3,1,2)
plot(1000*t,xa);
hold on
stem(n*Ts*1000,x);
title('Discrete-time signal');
hold off

% Analog signal reconstruction
subplot(3,1,3);
stairs(nTs*1000,x);
title('Analog signal reconstruction');
xlabel('t in msec');
ylabel('xa after reconstruction');
hold on 
stem(n*Ts*1000,x)
hold off



当采样率Fs为5000 样本/s时,用零阶保持的重建信号表示如下:

【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

第三幅图就是零阶保持恢复信号。

放大第三幅图:

【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

当采样率Fs为1000样本/s时,使用零阶保持恢复信号示意图如下:

【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

放大第三幅图:

【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)

零阶保持直接使用stairs函数画出模拟信号的ZOH波形。

可见,采样率为5000时,重建信号比采样率为1000时,重建信号好太多了。但是依然有点粗糙,这就让我们接下来的博文继续探索其他重建方式。