我想为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