我将信号的相位从 0 度更改为 360 度以获得最大电压值。因为如果我改变信号的相位,电压也会改变。我有下面的代码来找到最大值。
void Maxphase(float *max, unsigned int *index)
{
*max = 0.0;
float value;
unsigned int i, data;
for (i=0;i<=360;i++)
{
phaseset(i);
delay_ms(100);
data = readvalue();
value = voltage(mux1);
if(value > *max) //find max value
{
*max = value; //max voltage
*index = i;
}
}
}
从上面的代码中,我在 38 秒(360*100)后得到最大值(电压),因为对于每次读取操作,我的设备都需要 100 毫秒的延迟。这太大了,我无法更改硬件,因此我想通过优化软件在 2 到 3 秒内获得最大值。然后我尝试使用休闲代码。
void Maxphase(float *max1, unsigned int *index1)
{
max = 0.0;
float value;
unsigned int i,j,data;
for (i=0;i<=360;i+=10)
{
phaseset(i);
delay_ms(100);
data = readvalue();
value = voltage(mux1);
if(value > max) //find max value
{
max = value; //max voltage
index = i;
}
}
*max1=max;
*index1=index;
for (i=*index1-9;i<=*index1+9;i+=1)
{
j=i;
phaseset(j);
delay_ms(100);
data = readvalue();
value = voltage(mux1);
if(value > *max1) //find max value
{
*max1 = value; //max voltage
*index1 = i;
}
}
}
我将时间从 45 秒减少到 7 秒。我将迭代次数从 360 减少到 54(54*100)。我想将它减少 7 秒到 2 秒。
任何人都可以帮助我更好的算法,我可以在 2 秒内获得(0 到 360)的最大值。
我通过改变相位使用范围测量了电压值。我在下面写了它如何随相位改变电压。
Phase (degree) voltage(max)
0 0.9mv
45 9.5mv
90 9.0mv
135 0.9mv
180 292mv
225 601mv
270 555mv
315 230mv
360 0.9mv
我是 C 编程新手。任何人都可以提供最佳算法的示例代码。