登录论坛

查看完整版本 : Matlab中的离散函数


poster
2019-12-14, 20:13
我具有以下功能和一组值:

z(t): {R 鈫?[-2,3] | z(t) = sin(0.5脳蟺脳t) + cos(2脳蟺脳t) + 1 t = [-1 : 0.001 : 1] 我需要使用采样周期Ts=0.01确定z(n脳Ts) = z(n) ,因此离散化了函数。

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

还有其他方法吗?



回答:

如果您希望信号的零阶保持近似,则可以通过以下代码完成:

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'); 如图所示,这将为您提供输出。 https://i.stack.imgur.com/7xvuf.png

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



更多&回答... (https://stackoverflow.com/questions/5183878)