我無法找出如何形成一個三角形(未鋸齒)從一個正弦波波的三角波。創建從在C++中的正弦波
我知道如何去創造一個方波:
if(sineValue >= 0)
value = amp;
else
value = -amp;
但我不知道如何改變這種以適應三角波。
我無法找出如何形成一個三角形(未鋸齒)從一個正弦波波的三角波。創建從在C++中的正弦波
我知道如何去創造一個方波:
if(sineValue >= 0)
value = amp;
else
value = -amp;
但我不知道如何改變這種以適應三角波。
的三角波爲方波的積分。所以,你需要整合(和)你方波隨着時間的推移:
if (sineValue >= 0)
{
value += delta;
}
else
{
value -= delta;
}
注意,這可以更簡潔地寫爲:
value += (sineValue >= 0) ? delta : -delta;
這是否需要正常化? –
@Tomalak:是的。但是,這是一個不同的問題(這取決於正弦波的頻率。如果你知道正弦波的頻率,那麼你可以生成三角波*先天*!) –
這將帶來嚴重的和DC雖然偏移.. 。 – tdammers
您可以使用正弦波的導數的符號產生一個三角波這樣的:
if (sineValue - oldSineValue >= 0)
{
value += delta;
}
else
{
value -= delta;
}
oldSineValue = sineValue;
您需要選擇三角形給你的三角波所需的幅度,而這當然會取決於正弦波的頻率波和採樣率。
這種方法的優點是,三角波和正弦波具有相同的相位,即,峯值和過零點重合。
爲什麼正弦波的導數? –
@Oli:如果沒有圖表就不容易解釋,但是如果您想要零交叉點和峯值重合,那麼使用導數就是實現此目的的一種方法。在正弦波導數爲正數的任何地方,您都希望三角波導數爲正值且爲常數,反之亦然*爲負值。 –
哦,我知道它會強制執行90度相移,而不是直接使用'sineValue'。確實。 –
我們可能需要更多關於你如何產生這一波的信息。它是如何表示的?你如何建立它?最終,這比C++更像是一個數學問題。 [這是它的數學描述。](http://en.wikipedia.org/wiki/Triangle_wave) –
似乎他希望能夠將正弦波Y值轉換爲三角波Y值。更多的是一個數學問題,而不是編程。 – tenfour
雖然有趣! –