diff --git a/ch32v/ch32v203-goertzel/adcgoertzel.c b/ch32v/ch32v203-goertzel/adcgoertzel.c
index 08e05bc..d74fa3a 100644
--- a/ch32v/ch32v203-goertzel/adcgoertzel.c
+++ b/ch32v/ch32v203-goertzel/adcgoertzel.c
@@ -68,20 +68,32 @@ SOFTWARE.
#include "ssd1306.h"
-#define PWM_PERIOD (31-1)
-
#define ADC_BUFFSIZE 512
-#define GOERTZEL_BUFFER 16384
+#define GOERTZEL_BUFFER 8192
volatile uint16_t adc_buffer[ADC_BUFFSIZE];
-//const int32_t g_goertzel_omega_per_sample = 151198; // 51/128 * 3.14159 * 65536 * 2
-//const int32_t g_goertzel_coefficient = -88021;//2 * cos( g_goertzel_omega_per_sample / 65536 * 180 / 3.141592) * 65536;
-//const int32_t g_goertzel_coefficient_s = 97118;//2 * sin( g_goertzel_omega_per_sample / 65536 * 180 / 3.141592 ) * 65536;
-const int32_t g_goertzel_omega_per_sample = 1238618695; // 47/256 -> 27.01920 MHz
-const int32_t g_goertzel_coefficient = 870249096;
-const int32_t g_goertzel_coefficient_s = 1963250500;
+//#define PWM_PERIOD (31-1)
+//const int32_t g_goertzel_omega_per_sample = 1238618695; // 47/256 -> 27.01920 MHz
+//const int32_t g_goertzel_coefficient = 870249096;
+//const int32_t g_goertzel_coefficient_s = 1963250500;
+
+/*
+#define PWM_PERIOD (31-1)
+const int32_t g_goertzel_omega_per_sample = 1228662895; // 0.182118 of whole per step / 27.025000MHz
+const int32_t g_goertzel_coefficient = 888414806;
+const int32_t g_goertzel_coefficient_s = 1955097223;
+*/
+
+#define PWM_PERIOD (28-1)
+const int32_t g_goertzel_omega_per_sample = 1154616630; // 0.171143 of whole per step / 0.880162MHz
+const int32_t g_goertzel_coefficient = 1021021706;
+const int32_t g_goertzel_coefficient_s = 1889232832;
+
+
+
+
#define LOG_GOERTZEL_LIST 256
int32_t gertzellogs[LOG_GOERTZEL_LIST*2];
diff --git a/ch32v/lib/calculator.html b/ch32v/lib/calculator.html
index e583b0b..8949316 100644
--- a/ch32v/lib/calculator.html
+++ b/ch32v/lib/calculator.html
@@ -25,11 +25,11 @@ function DrawSpan( colspan, freq, target, docolor, extrastr = "" )
function Goertz( n, mhz, fr )
{
- let omega = fr * 2 * 3.1415926535*2.0;
+ let omega = fr * 3.1415926535*2.0;
var textarea = document.getElementById("goertzeloutput");
textarea.value =
"#define PWM_PERIOD ("+n+"-1)\n" +
- "const int32_t g_goertzel_omega_per_sample = " + ( omega*2*(1<<29)).toFixed(0) + "; // " + mhz.toFixed(6) + "MHz\n" +
+ "const int32_t g_goertzel_omega_per_sample = " + ( omega*2*(1<<29)).toFixed(0) + "; // " + ( omega / (3.1415926535*2.0)).toFixed(6) + " of whole per step / " + mhz.toFixed(6) + "MHz\n" +
"const int32_t g_goertzel_coefficient = " + (2 * Math.cos( omega ) * (1<<30)).toFixed(0) + ";\n" +
"const int32_t g_goertzel_coefficient_s = "+ (2 * Math.sin( omega ) * (1<<30)).toFixed(0) + ";\n";
@@ -42,11 +42,14 @@ function Goertz( n, mhz, fr )
function computeTable()
{
- const max_harmonics = 28|0;
- const min_harmonics = 1|0;
let xtal = Number(document.getElementById("crystalmhz").value );
let target = Number(document.getElementById("targetmhz").value );
let quadrature = document.getElementById("QUADRATURE").checked;
+ let quanta = Math.round(Number(document.getElementById("quanta").value));
+
+
+ const max_harmonics = 28|0;
+ const min_harmonics = (quadrature?1:0)|0;
let contents = "";
@@ -74,7 +77,7 @@ function computeTable()
"
" +
"| Goertzel |
" +
"| Goertzel (Inverse) |
" +
- "
";
+ "";
}
contents += "";
@@ -89,15 +92,22 @@ function computeTable()
let freq = ( xtal / n );
let goertzelpoint = 0;
let goertzelpointinv = 0;
+ let tgoertzelp = 0;
+ let tgoertzelpi = 0;
for( let h = 0|min_harmonics; h <= max_harmonics; h++ )
{
let base = freq * h;
let next = freq * (h+1);
if( target <= next && target >= base )
{
+ var t;
goertzelpoint = ( target - base ) / ( next - base );
+ goertzelpoint = Math.round(quanta * goertzelpoint)/quanta;
- goertzelpointinv = - (1.0 - ( target - base ) / ( next - base ));
+ tgoertzelp = h;
+ goertzelpointinv = (1.0 - ( target - base ) / ( next - base ));
+ goertzelpointinv = Math.round(quanta * goertzelpointinv)/quanta;
+ tgoertzelpi = h+1;
}
}
contents += "";
@@ -124,7 +134,9 @@ function computeTable()
{
if( mode == 0 )
{
- contents += "| ↑" + (-goertzelpointinv).toFixed(6) + " | ";
+ contents += ""
+ if( tgoertzelp == h ) contents += "↑" + (goertzelpoint).toFixed(6) + "";
+ contents += " | ";
}
else if( mode == 1 )
{
@@ -132,11 +144,13 @@ function computeTable()
}
else if( mode == 2 )
{
- contents += "↓" + goertzelpoint.toFixed(6) + " | ";
+ contents += ""
+ if( tgoertzelp == h-1 ) contents += "↓" + goertzelpointinv.toFixed(6) + "";
+ contents += " | ";
}
else if( mode == 3 )
{
- contents += DrawSpan( 2, freq * (h+goertzelpointinv), target, true );
+ contents += DrawSpan( 2, freq * (h-goertzelpointinv), target, true );
}
}
}
@@ -156,6 +170,7 @@ function computeTable()