Engee 文档

通过帧和采样进行信号处理

所用术语
  • 计算步骤 (采样时间)是单个数据项的时间。

  • 时间步骤 (时间步长)是求解器更新计算和模型状态的时间间隔。

  • 采样周期 (采样周期)是连续测量或数据项之间的时间间隔。

  • *采样是对信号进行采样后得到的单个值。

    • 在基于采样的处理过程中,数据项是与计算步骤定义的特定时间点相对应的单个值。

    • 在基于帧的处理过程中,数据项是在采样期间收集的一组值中的单个值,并作为单个帧进行处理。

基于采样的处理

基于采样的处理 - 每次处理一个数据元素。这种处理方式的特点是在每个时间步长(与采样周期相对应)进行数据更新。时间步长等于采样周期,用 表示。采样率定义为采样周期的倒数,即 - 这意味着每一步都要更新和处理数据

逐个采样处理更适合需要对每个新数据测量做出即时响应的实时系统。例如

  • 音频处理

  • 实时监控

帧处理

基于帧的处理 - 信号以帧为单位进行处理,每帧包含多个数据元素。基于帧的处理在每个时间步长(等于帧周期)更新数据。帧周期被定义为帧中元素数( )与采样周期的乘积,即 。因此,帧速率等于采样速率除以帧中元素的数量: - 这样就可以在一个时间步长内处理大量数据。

逐帧处理可高效处理大量数据。使用示例

  • 傅立叶变换

  • 数字滤波

  • 图像和视频处理

采样和逐帧处理的比较

为清晰起见,请参阅图中逐样和逐帧信号处理的示例:

based processing 1

比较表

按计数处理.s

按帧处理

  • 通过精确处理每个数据元素,提供更详细的自定义操作逻辑。

  • 对于需要精确控制内存和时间间隔的实际设备,它是最佳选择。

  • 在逐帧处理测试后的模型实现阶段使用。

  • 代码生成完全支持实际系统,如 FPGA(可编程门阵列)。

  • 适用于需要高精度和优化的最后开发阶段。

  • 适合原型设计和快速算法开发。

  • 模型以大块表示,可读性更高,更容易理解。

  • 处理整个框架,使测试和调试更容易。

  • 适用于开发和演示系统运行的初始阶段。

  • 更常用于在微控制器上实现,因为开发的简单性和速度非常重要。

因此,建议从逐帧处理开始开发,因为它便于快速制作原型和演示系统操作。由于逐帧处理简单,开发速度快,因此可以轻松地测试和调整算法,而不必担心内存处理的复杂性。一旦确信算法和模型工作正常,就可以转入逐帧处理。这种处理方式虽然实现起来更为复杂,但却能提供处理物理系统所需的高精度和优化,因为物理系统需要详细的信号和内存交互。这种方法可以让你在不同的开发阶段最大限度地发挥两种方法的优势。

示例

用块建立模型:

  • DSP Sine Wave - 提供离散正弦波。

  • Terminator - 块关闭输出端口。

  • Buffer - 强制在一帧中存储指定数量的数据元素。块 Buffer 强制逐帧处理信号。

  • Unbuffer - 强制将任意数量的帧转化为采样。使用 Unbuffer 块,可强制逐个计数信号。

  • DSP Sine WaveBufferUnbuffer 块的输出端启用信号记录signal logging 1

  • 为清晰起见,在设置窗口lk 5 的选项卡中 调试 启用:

    • 信号尺寸

    • 信号采样频率

    • 颜色突出

      sample frame based model 1

设置以下程序块参数:

  • 在程序块 DSP Sine Wave

    • *采样时间*为 0.1

    • *每帧采样*为 5

  • 在块 Buffer

    • *输出缓冲区大小(每个通道)*改为 6

  • 区块 UnbufferTerminator 没有可配置的参数。在设置窗口中,模拟间隔和求解器选择仍为默认值。

运行模拟模型start simulation button 。图形将显示正弦信号随时间的变化。X* 轴表示从 "0 "秒到 "10 "秒的模拟时间间隔,Y 轴表示正弦波的值。然后,图形窗口stateflow graphs button 将显示:

sample based buffer 1

图形显示了 Buffer 块的结果,该块强制将指定数量的数据元素存储到一个帧中。每个帧包含六个数据项,用图表中的彩色线条表示。这些线条代表帧中每个元素的状态。

线条的水平阶梯部分表示数据项的值在每一帧中保持不变。这些值每隔 0.6 秒更新一次,与帧更新间隔相对应(6 个数据项 * 0.1 秒/项 = 0.6 秒)。Buffer* 块将数据项分成 6 块,并以单帧形式显示,其中每种颜色对应一个特定的数据项。

在本例中,尽管 Buffer 块强行将数据项存储到单帧中,但还是选择了按颜色计数的处理方式。这样做是为了演示程序块如何工作,并分别显示每个数据项。


frame based unbuffer 1

图中显示的是 Unbuffer 块的输出,该块可将任意数量的帧转化为样本。包含 6 个数据元素的每个帧被分割成单个数据元素,并逐个传递到 Unbuffer 块的输出端。由此产生的图形显示正弦信号的连续数据元素返回到原始的离散形式。

由于数据元素的值每隔 `0.1`秒变化一次,因此图形是交错的。这与生成正弦信号时指定的时间步长一致。因此,Unbuffer 块将逐帧信号转换回计数,这说明了数据缓冲的逆过程。

要将图表从计数显示切换为逐帧显示,请单击图表顶部菜单中的 信号菜单 signal menu 1 按钮,然后选择 时域帧 frame based icon 1.

因此,逐帧处理和逐计数处理会以不同方式影响信号的显示和处理。Buffer* 块将样本转换为帧,将数据元素分组,使处理更有效率,以完成需要同时处理数据组的任务。Unbuffer* 块将帧返回到采样格式。

实用链接