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');

これにより、添付の図のような出力が得られます。ここに画像の説明を入力してください

floor()の代わりにceil()またはround()を試して、わずかに異なる動作を取得することができます。nの整数値のサンプルのみが必要な場合、それはまったく異なるものであり、一般的なケースで達成するのはまったく異なります(floatの丸め誤差のため)。ただし、あなたの場合、サブサンプリング係数が10であるため、nSampledで行われるように、インデックスをサブサンプリングするだけで機能します。非整数のサブサンプリング係数の場合、これは正しく機能しません。

于 2011-03-03T21:27:50.060 に答える