⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 penddsy1.cpp

📁 matlab 专业设计 源于课本的原文件 适合于编程人员
💻 CPP
字号:
// Model: dsys_fixpt 
// Sampling period = 0.010000 seconds
//
// Input scaling:  [4    2 1000]
// State scaling:  [2   1 100  20]
// Output scaling: [1000]
//
// Generated at 05:51:12 on 02-Oct-2003

class dsys_fixpt
{
public:
    // n = #states, m = #outputs, r = #inputs
    enum {n = 4, m = 1, r = 3};

    void Initialize(const short x0[n]);
    void Update(const short u[r]);
    const short* Output(void) const { return y; }
    const short* State(void) const { return x; }

private:
    static const short a[n*n], b[n*r], c[m*n], d[m*r];
    short x[n], y[m];
};

const short dsys_fixpt::a[n*n] =
{
      1417,      0,   2257,      0,
         0,   4811,      0,   1327,
     -5025,      0,   7140,      0,
         0,  -2447,      0,   8464
};

const short dsys_fixpt::b[n*r] =
{
      9284,      0,  -4783,
        -6,   6365,   1962,
      4291,      0, -16311,
       -38,   3634,  12988
};

const short dsys_fixpt::c[m*n] =
{
      1367,   1564,   7940,   9145
};

const short dsys_fixpt::d[m*r] =
{
      7233,   3566,  -1951
};

void dsys_fixpt::Initialize(const short x0[n])
{
    int i;
    
    // Initialize x
    for (i=0; i<n; i++)
        x[i] = x0[i];
}

void dsys_fixpt::Update(const short u[r])
{
    int i, j, n_offset = 0, r_offset = 0;
    short x_next[n];
    long accum;
    
    // Evaluate x_next = A*x + B*u
    for (i=0; i<n; i++)
    {
        accum = 0;

        for (j=0; j<n; j++)
            accum += (long) a[n_offset+j]*x[j];
            
        for (j=0; j<r; j++)
            accum += (long) b[r_offset+j]*u[j];
        
        accum = (accum >> 15) * 122955;
        x_next[i] = (short) (accum >> 15);

        n_offset += n;
        r_offset += r;
    }
    
    n_offset = 0;
    r_offset = 0;
    
    // Evaluate y = C*x + D*u
    for (i=0; i<m; i++)
    {
        accum = 0;

        for (j=0; j<n; j++)
            accum += (long) c[n_offset+j]*x[j];
            
        for (j=0; j<r; j++)
            accum += (long) d[r_offset+j]*u[j];
            
        accum = (accum >> 15) * 153480;
        y[i] = (short) (accum >> 15);

        n_offset += n;
        r_offset += r;
    }
    
    // Update x to its next value
    for (i=0; i<n; i++)
        x[i] = x_next[i];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -