双延时离散时间机的状态机 - 状态转移图

时间:2017-03-09 17:33:26

标签: state-machine

我正在通过MIT OCW课程Introduction to Electrical Engineering and Computer Science I,在其中使用状态机。我注意到课程教师没有为他们讨论的大多数状态机绘制状态转换图。

一个问题是设计& Python编码状态机,其状态是过去两个时间间隔的输入。我认为这是一个无限状态机,状态转换图可能对于获得一般想法很有用,同时只显示几个状态。

我想知道是否可以为这种双延迟机器绘制状态转换图。到目前为止,所有的例子都有一个过渡线,它出现在一个标有输入和结果输出的状态泡沫中,然后指向下一个状态。对于双延迟机器,输入结果在前两个时间段输入。 problem instructions表示机器的所有状态内存都在一个参数中。没有提到输入内存,我认为这是必要的。

我的问题:

  1. 是否可以为此状态机绘制状态转换图?

  2. 输入内存是否属于此设计的一部分?

1 个答案:

答案 0 :(得分:0)

绘制图表是不可能的,因为所有可能状态的集合包括任何数据类型的任何值,在读数中的(单个)延迟状态机的示例中给出。因此,无法定义可能状态的数量。请参阅Chapter 4: State Machines

在问题描述中,它指出:

  

任何状态机中的 init 和getNextValues方法都必须不设置或读取除self.startState之外的任何实例变量(甚至不是self.state)。所有内存(state)必须位于getNextValues的state参数中。请查看课程笔记的第4.1节中的示例。

所以状态就是你需要的所有记忆。没有理由不使用数组作为状态来保留最后两个输入。

首先我们将两个值保存在内存(状态)

class Delay2Machine(StateMachine):
    def __init__(self, val0, val1):
        self.startState = (val0, val1)

遵循读数中给出的超类SM步骤函数实现:

def step(self, inp):
    (s, o) = self.getNextValues(self.state, inp)
    self.state = s
    return o

输出将是内存中保存的第一个值,状态将更新为包含新输入

    def getNextValues(self, state, inp):
        return ((state[1], inp), state[0])