DDSパラメータを求める

DDSの加算値としきい値を求める。

DDSの加算値としきい値を求める。

  • タグ:
  • タグはありません
/*
DDS使
clk_in :
max :
add :
count :
clk_out :
if(clk_in){
if(count>max){
count -= max;
clk_out();
}
else{
count += add;
}
}
*/
#include<stdio.h>
#include<math.h>
int main(void)
{
const int base = 50000000; //
const double goal = 1789772.5; //
int hz, count, add, max;
int amari;
int div = (int)(base / goal + 0.5);
int best_add, best_max;
double best_gosa = base;
for(add=1; add<100; add++){
double gosa_min;
gosa_min = 0x7FFFFFFF;
int hosei = -add;
for(;;){
max = div * add + hosei;
hz = 0;
count = 0;
amari = 0;
for(int i=0; i<base; i++){
if(count>max){
count -= max;
amari += count;
hz++;
}
else{
count += add;
}
}
double Hz;
Hz = hz + (double)count / max;
double p;
p = Hz - goal;
if(fabs(p) < gosa_min){
printf(" %3d %6d %3d %f\n", add, max, hosei, p);
gosa_min = fabs(p);
if(gosa_min < best_gosa){
best_add = add;
best_max = max;
best_gosa = gosa_min;
printf(" %f\n", gosa_min);
}
}
else break;
if(p>0){
hosei++;
}
else{
hosei--;
}
}
}
printf(" %d %d %f\n", best_add, best_max, best_gosa);
return 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX