如何平滑调整正弦幅度

信息处理 离散信号
2022-02-24 05:49:30

我通过发送与位移成正比的正弦波来移动设备。我想动态修改幅度和平均值。

例如,一开始我想从:

Signal(t) = 1 * sin(t) + 1

到:

Signal(t) = 0.95 *sin(t) + 0.95

我的问题是,如果我的信号没有迈出一大步,我不知道该怎么做,这对我的应用程序来说是不可接受的。现在,我所拥有的只是在“长时间”内改变系数,小步长 (1>0.99>0.98>0.97>0.96>0.95),这样输出信号中的“步长”仍然很小,但它不是很干净。

3个回答

让系数成为时间的缓慢变化函数是没有问题的,

S(t)=a(t)sin(t)+b(t),

例如线性斜坡

a(t)=(a1a0)tt0t1t0+a0
为了t[t0,t1]和类似的b(t).

在此处输入图像描述

输出是c(t)×(sin(t)+1), 在哪里c(t)是作为时间函数的系数。那是乘以c(t)在时域中,这意味着它将在频域中进行卷积。卷积有效地扩展了频谱(sin(t)+1)它最初由三个峰值(正弦波的负频率、0 Hz 和正弦波的正频率)组成。如果这种传播对您来说是个问题,您可以通过低通滤波来控制它c(t)在做乘法之前。说你低通滤波器c(t)在 10 赫兹。结果是频谱不会扩散到距离原始峰值不超过 ±10 Hz 的范围内。

在您的应用程序中,您可能不想要这样的砖墙滤波器,因为它的阶跃响应有一个过冲;它的输出超出了原始值范围c(t). 最简单的做法可能是串联使用多个相同的单极低通滤波器级。单极点低通滤波器没有过冲。两者都没有级联的无过冲滤波器级。一个阶段很简单out(t)=a in(t)+(1a) out(t), 在哪里a是一个介于 0 和 1 之间的系数。每一级将滤波器频率响应的斜率增加 6 dB/倍频程。

使用上述无限脉冲响应 (IIR) 滤波器意味着输出只会渐近地接近正确值。如果您希望在预定时间内达到正确的值,那么您可能需要研究有限脉冲响应 (FIR) 滤波器。为此,可以将常用的窗函数之一用作 FIR 滤波器的脉冲响应。脉冲响应的长度等于到达时间。

一种解决方案是选择转换时间为

sin(t)+1=0.95sin(t)+0.95=0

即什么时候tπ2+2πk.

另一种解决方案是改变第二个正弦曲线的相位,以便

sin(t)+1=0.95sin(t+ϕ)+0.95

尽管您需要确保两个信号的导数相同,而不仅仅是它们的幅度。