1

我有以下功能和一组值:

z(t):   {R → [-2,3] | z(t) = sin(0.5×π×t) + cos(2×π×t) + 1

t = [-1 : 0.001 : 1]

我需要确定z(n×Ts) = z(n),使用采样周期Ts=0.01,因此离散化函数。

我尝试使用 d2d,但据我所知,只能应用于 zpk 函数。

还有其他方法吗?

4

1 回答 1

2

如果您想要信号的零阶保持近似值,可以通过以下代码完成:

Ts = 0.01;
t = -1:0.001:1;
n = t./Ts;

nSampled = nan(size(t));
nSampled(1:10:end) = n(1:10:end);

zCont = @(t)(sin(pi*t/2)+cos(2*pi*t)+1);
zZOH  = @(n,Ts)(zCont(floor(n).*Ts));
zDisc = @(n,Ts)(zCont(n.*Ts));

figure;
plot(t,zCont(t),'b','DisplayName','Continuous'); hold on;
plot(t,zZOH(n,Ts),'r','DisplayName','ZOH'); 
stem(t,zDisc(nSampled,Ts),'k','DisplayName','Discrete'); 
legend('show');

这将为您提供如图所示的输出。在此处输入图像描述

您可以尝试使用 ceil() 或 round() 而不是 floor() 来获得稍微不同的行为。如果您只需要 n 整数值的样本,那完全不同,并且在一般情况下实现的完全不同(由于浮点数的舍入误差)。但是:对于您的情况,它只需像在 nSampled 中那样对索引进行二次采样,因为二次采样因子为 10。对于非整数二次采样因子,这将无法正常工作。

于 2011-03-03T21:27:50.060 回答