我想爲octave寫一個.oct函數,給定一個正弦波值,在-1和1之間,正弦波週期返回一個週期長度的正弦波矢量,矢量中的最後一個值是給定的正弦波值。我的代碼到目前爲止是:遞歸創建一個正弦波給定一個單一的正弦波值和週期
#include <octave/oct.h>
#include <octave/dColVector.h>
#include <math.h>
#define PI 3.14159265
DEFUN_DLD (sinewave_recreate, args, , "args(0) sinewave value, args(1) is period")
{
octave_value_list retval;
double sinewave_value = args(0).double_value();
double period = args(1).double_value();
ColumnVector output_sinewave(period);
double degrees_inc = 360/period;
double output_sinewave_degrees;
output_sinewave_degrees = asin(sinewave_value) * 180/PI;
output_sinewave(period-1) = sin(output_sinewave_degrees * PI/180);
for (octave_idx_type ii (1); ii < period; ii++) // Start the loop
{
output_sinewave_degrees = output_sinewave_degrees - degrees_inc;
if (output_sinewave_degrees < 0)
{
output_sinewave_degrees += 360 ;
}
output_sinewave(period-1-ii) = sin(output_sinewave_degrees * PI/180);
}
retval(0) = output_sinewave;
return retval;
}
但給補丁結果。我的意思是,它有時會相當精確地重新創建正弦波,而其他時間則會消失。我只是通過創建一個給定的正弦波來確定這一點,將時間的最後一個值填入函數中,通過時間向後重新創建正弦波,然後比較兩者的曲線。顯然我做錯了什麼,但我似乎無法確定什麼。
http://pizer.wordpress.com/2010/02/08/fast-digital-sine-oscillator/ – sellibitze 2010-10-19 05:37:00
一般來說,任何給定值都有兩個答案,具體取決於正弦波在經過給定值時是上升還是下降。 – 2010-10-20 01:23:53