MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   Matlab中的离散函数 (https://www.labfans.com/bbs/showthread.php?t=26476)

poster 2019-12-14 20:13

Matlab中的离散函数
 
我具有以下功能和一组值:

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函数。

还有其他方法吗?



[B]回答:[/B]

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

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

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



[url=https://stackoverflow.com/questions/5183878]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 05:00

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.