簡體   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