Main Content

Sine Wave Function

使用外部信号作为时间源来生成正弦波

  • Sine Wave Function block

库:
Simulink / Math Operations

描述

Sine Wave Function 模块输出正弦曲线波形。此模块可在基于时间或基于采样的模式下运行。

注意

此模块相当于 Math Operations 模块库中的 Sine Wave 模块。如果您在模块对话框中为时间参数选择了使用仿真时间,您将获得 Sine Wave Function 模块。

基于时间的模式

该模块可计算输出波形。

y=amplitude×sin(frequency×time+phase)+bias.

在基于时间的模式下,采样时间参数的值确定模块是在连续模式还是离散模式下运行。

  • 0(默认值)将使得模块在连续模式下运行。

  • >0 将使得模块在离散模式下运行。

有关详细信息,请参阅指定采样时间

连续模式下的模块行为

在连续模式下运行时,由于随着时间变得非常大,导致精度损失,因此 Sine Wave 模块可能会变得不准确。

离散模式下的模块行为

如果采样时间参数的值大于零,将会导致模块好像在驱动一个采样时间设置为该值的 Zero-Order Hold 模块。

通过这种方式,您可以构建具有纯离散正弦波源的模型,而不是混合了连续/离散系统的模型。混合系统本质上更复杂,因此需要更长的仿真时间。

在离散模式下,此模块使用微分增量算法,而不是基于绝对时间的算法。因此,此模块对于要在无限长时间内运行的模块(如振动或疲劳测试)非常有用。

微分增量算法根据在上一采样时间计算出的值来计算正弦值。此方法使用下列三角恒等式:

sin(t+Δt)=sin(t)cos(Δt)+sin(Δt)cos(t)cos(t+Δt)=cos(t)cos(Δt)sin(t)sin(Δt)

采用矩阵形式,这些恒等式表示为:

[sin(t+Δt)cos(t+Δt)]=[cos(Δt)sin(Δt)sin(Δt)cos(Δt)][sin(t)cos(t)]

由于 Δt 是常量,所以下列表达式是常量:

[cos(Δt)sin(Δt)sin(Δt)cos(Δt)]

因此,问题就变为一种矩阵乘法,用 sin(t) 的值乘以一个常量矩阵以得出 sin(t+Δt)

离散模式只能减少但不能消除舍入误差的累积,例如 (4*eps)。发生累积是因为模块在每个时间步的输出的计算都取决于上一个时间步的输出值。

离散模式下的舍入误差的处理方法

要处理 Sine Wave block 模块在基于时间的离散模式下运行时产生的舍入误差,请使用下列方法之一。

方法原理说明

在 Sine Wave 模块的直接下游插入一个 Saturation 模块。

通过为 Sine Wave 模块输出设置饱和界限,可以避免由于舍入误差累积而出现的过冲。

将 Sine Wave 模块设置为使用 sin() 数学模块库函数来计算模块输出。

  1. 在 Sine Wave 模块对话框中,将时间设置为使用外部信号,这样模块图标上将出现一个输入端口。

  2. 使用 Digital Clock 模块将一个时钟信号连接到此输入端口上。

  3. 将时钟信号的采样时间设置为 Sine Wave 模块的采样时间。

sin() 数学模块库函数单独计算每个时间步的模块输出,从而可以避免舍入误差的累积。

基于采样的模式

基于采样的模式使用以下公式计算 Sine Wave 模块的输出。

y=Asin(2π(k+o)/p)+b

  • A 是正弦波的振幅。

  • p 是每个正弦波周期内的时间采样数。

  • k 为重复的整数值,范围从 0 到 p–1。

  • o 是信号的偏移量(相位偏移)。

  • b 是信号偏差。

在此模式下,Simulink® 将第一个时间步的 k 设置为等于 0,并使用该公式计算模块输出。在下一个时间步,Simulink 递增 k,然后重新计算模块输出。当 k 达到 p 时,Simulink 在计算模块输出之前将 k 重置为 0。此过程会一直继续,直到仿真结束。

在计算给定时间步的模块输出时,基于采样的方法不依赖于上一个时间步的输出。因此,这种模式可以避免舍入误差的累积。基于采样的模式还支持在提供语义的子系统中重置语义。例如,如果 Sine Wave 模块在一个可重置子系统中,子系统收到一个重置触发事件,重复的整数 k 将重置,模块输出将重置为其初始条件。

端口

输入

全部展开

正弦波计算中所使用的时间源输入信号。

数据类型: double

输出

全部展开

所创建的正弦波输出信号。

数据类型: double

参数

全部展开

指定此模块生成的正弦波的类型。根据您选择的是基于时间还是基于采样,对话框中将出现某些参数。

编程用法

模块参数SineType
类型:字符向量
'Time based' | 'Sample based'
默认值'Time based'

指定是使用仿真时间还是外部源作为时间变量值的来源。如果指定外部时间源,模块将为该时间源创建一个输入端口。

编程用法

模块参数TimeSource
类型:字符向量
'Use simulation time' | 'Use external signal'
默认值'Use external signal'

指定正弦波输出信号的振幅。

编程用法

模块参数Amplitude
类型:字符向量
:标量
默认值'1'

指定为了生成输出在正弦中添加的常量值。

编程用法

模块参数Bias
类型:字符向量
:标量
默认值'0'

以 rad/sec 为单位指定信号频率。

依存关系

要启用此参数,请将正弦类型设置为基于时间

编程用法

模块参数Frequence
类型:字符向量
:标量
默认值'1'

指定正弦波的相移。

如果将时间(t) 设置为使用仿真时间,则不能将此参数配置为在生成的代码中显示为可调全局变量。例如,如果将默认参数行为设置为可调或将某个存储类应用于 Simulink.Parameter 对象,则相位参数不会在生成的代码中显示为可调全局变量。

要生成代码以便在执行期间可以调整相位,请将时间(t) 设置为使用外部信号。您可以提供您自己的时间输入信号,或使用 Digital Clock 模块生成时间信号。有关示例,请参阅Tune Phase Parameter of Sine Wave Block During Code Execution (Simulink Coder)

依存关系

要启用此参数,请将正弦类型设置为基于时间

编程用法

模块参数Phase
类型:字符向量
:标量
默认值'0'

指定每个周期的采样数。

依存关系

要启用此参数,请将正弦类型设置为基于采样

编程用法

模块参数Samples
类型:字符向量
:标量
默认值'10'

以采样次数为单位指定偏移量(离散相位偏移)。

依存关系

要启用此参数,请将正弦类型设置为基于采样

编程用法

模块参数Offset
类型:字符向量
:标量
默认值'0'

以秒为单位指定采样周期。默认值为 0。如果正弦类型是基于采样,则采样时间必须大于 0。请参阅 指定采样时间

编程用法

模块参数SampleTime
类型:字符向量
:标量
默认值'0'

指定当其他参数是单行和单列矩阵时输出维度为一维向量信号。如果不选中此框,模块将输出与数值参数具有相同维数的信号。请参阅确定源模块的输出维度。当利用外部信号指定时间时,此参数不可用。在这种情况下,如果数值参数是列或行矩阵值,输出则为 1 维向量。

编程用法

模块参数VectorParams1D
类型:字符向量
'off' | 'on'
默认值'on'

模块特性

数据类型

double

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

|