如何使用systemC AMS和TDF建模形式来计算加速速度

时间:2018-02-17 14:53:35

标签: systemc

我有一个恒定的加速度,我需要计算瞬时速度和行驶距离。 所以我们知道速度是加速度的积分,行进距离是速度的积分。 使用systemC AMS和TDF建模形式,没有积分算子,而是有拉普拉斯变换算子。

我将实现的速度和距离计算模式如下: enter image description here

NB:

// Declaration of private variables of SCA_TDF_MODULE
sca_tdf::sca_ltf_nd lft;
sca_util::sca_vector<double> num, den;

// initialisation of variables 
num(0) = 1.0;
den(0) = 1.0;

所以我认为我可以用sca_tdf::sca_ltf_nd这样计算速度:

if (throttle_is_active) {
        speed.write(lft(num, den, 2.78)); // speed is an output port
        // distance .... 
}

但我不确定这是否正确,我不知道如何保存此值以再次使用ltf计算行驶距离。 可以找到tdf模块的定义here。 有人可以帮我吗?

另请参阅随概念验证库提供的SystemC AMS用户指南

1 个答案:

答案 0 :(得分:1)

SystemC-AMS中的系数定义如下:

num(0)=1.0;
den(0)=0.0;
den(1)=1.0;

- &GT;积分器的系数是:

public override void Up()
    {
        Sql(@"CREATE TYPE IdsList AS TABLE   
                    ( 
                    Id Int
                    )
                    GO

                    Create Procedure getChildIds(
                    @IdsList dbo.IdsList ReadOnly
                    )
                    As
                    Begin
                    WITH RecursiveCTE AS
                    (
                        SELECT Id
                        FROM dbo.PhysicalObjects
                        WHERE ParentId in (Select * from @IdsList)
                        --Where Id=108
                        UNION ALL

                        SELECT t.Id
                        FROM dbo.PhysicalObjects t
                        INNER JOIN RecursiveCTE cte ON t.ParentId = cte.Id
                    )
                    SELECT * FROM RecursiveCTE
                    End");
    }

    public override void Down()
    {
        Sql(@"Drop Type IdsList
                Go
                Drop Procedure getChildIds");
    }