繁体   English   中英

在MATLAB中创建正弦波

[英]Creating a sinusoidal wave in matlab

我想创建一个具有以下特性的正弦波:

  • 从0到2s的f = 400Hz amp = 1的正弦波

  • f = 200Hz amp = 1的正弦波从2到3s

  • f = 800Hz amp = 2的正弦波从3到5s

这是我的matlab代码:

t=linspace(0,5,5000);
x=zeros(1,length(t));
n1=0:1999;
n2=2000:2999;
n3=3000:4999;
x(1:2000)=1*sin(2*pi*400*n1);
x(2001:3000)=1*sin(2*pi*200*n2);
x(3001:5000)=2*sin(2*pi*800*n3);
plot(t,x)

这是我所拥有的情节,看起来还是不合逻辑,所以我想知道代码中的错误

在此处输入图片说明

在这种类型的问题中,您自然地要查看物理量,因此在整个计算过程中始终与这一点保持一致非常有帮助。

具体来说,您指定Hz(1 /秒),这是一个物理单位,因此当您计算其他所有内容时,您需要与之保持一致。

要在方程式中做到这一点,最直接的方法就是将时间直接放在sin函数中,例如sin(2*pi*f*t) 但是,由于您想使用不同的n分解数组,因此可能最容易做到这一点,然后使用t=linspace(0,5,50000)dt = 5.0/50000dt = t(2) - t(1)sin(2*pi*400*dt*n1) 看这是dt*n1转换的整数n1时间以秒计。

还要注意物理单位:上面的400实际上是400Hz ,时间以秒为单位,因此2*pi*400*dt*n12*pi*f*tHz * s = 1 ,即,单位会取消,这是您需要的。

程序员倾向于定义一些单位,例如seconds=1 这是可能的,并且在技术上是正确的,并且可以节省一两个乘法。 它几乎总是导致错误。

还要注意,您应该从t=linspace(0,5,5000)更改为t=linspace(0,5,50000) 现在,原因应该很清楚:您正在查看400-800Hz或几乎1kHz或每毫秒1次振荡的频率。 要查看正弦波,您需要在每次振荡中获取几个数据点,并且5秒内的50000点现在将为每毫秒10个点,这几乎不足以看到一个合理的正弦波。 或者,但是,您想考虑一下计算,就需要以某种方式确保以足够高的速率采样。

就是说,您遇到的特定错误是,对于时间数组,使用整数而不是一秒的小数,对于sin函数您将花费太多步骤。 这总是与一个可能出现的问题sin的功能,但即使你没有绘制sin ,看上去像一个sin (比如,通过使用像0.003Hz,而不是400Hz的频率),它仍然是不正确的,因为它不会有适当的时间轴。 因此,您既需要正确设置单位,又要确保每次振荡都获得足够的数据以查看正弦波(或碰巧正在寻找的任何东西)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM