【 MATLAB 】MATLAB 实现模拟信号采样后的重建(二)零阶保持(ZOH)
上篇博文采样sinc函数内插的方式实现了模拟信号的重建:【 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时,用零阶保持的重建信号表示如下:
第三幅图就是零阶保持恢复信号。
放大第三幅图:
当采样率Fs为1000样本/s时,使用零阶保持恢复信号示意图如下:
放大第三幅图:
零阶保持直接使用stairs函数画出模拟信号的ZOH波形。
可见,采样率为5000时,重建信号比采样率为1000时,重建信号好太多了。但是依然有点粗糙,这就让我们接下来的博文继续探索其他重建方式。