third commit
This commit is contained in:
parent
ba9da78176
commit
52541c9f3f
|
|
@ -12,5 +12,6 @@
|
|||
"idf.flashType": "UART",
|
||||
"idf.portWin": "COM16",
|
||||
"idf.espIdfPathWin": "C:\\Espressif\\frameworks\\esp-idf-v5.5",
|
||||
"idf.toolsPathWin": "C:\\Espressif"
|
||||
"idf.toolsPathWin": "C:\\Espressif",
|
||||
"idf.pythonInstallPath": "C:\\Espressif\\tools\\idf-python\\3.11.2\\python.exe"
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
539a7c49b582902925f4a1ed7feaaf69 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
|
||||
3b43ab5cc204de19f924d47660787b3f C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
|
||||
|
|
|
|||
Binary file not shown.
1322
build/.ninja_log
1322
build/.ninja_log
File diff suppressed because it is too large
Load Diff
|
|
@ -1 +1 @@
|
|||
1f3f204b0ecebdd860e0b512a4f1512f37b33806
|
||||
ba9da781769375417fbc7e90eb2c01a174126017
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -294,3 +294,9 @@
|
|||
30 186 7805695434134522 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
30 144 7805695761097735 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
30 144 7805695761097735 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
49 425 7807282325442052 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
49 425 7807282325442052 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
57 280 7807285303930806 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
57 280 7807285303930806 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
42 204 7807290956912404 esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
42 204 7807290956912404 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/esp-idf/esptool_py/CMakeFiles/bootloader_check_size 478611ec8c141aec
|
||||
|
|
|
|||
|
|
@ -3238,7 +3238,7 @@ build esp-idf/partition_table/CMakeFiles/partition_table-flash | ${cmake_ninja_w
|
|||
build cmake_object_order_depends_target___idf_esp_app_format: phony || cmake_object_order_depends_target___idf_esp_bootloader_format
|
||||
|
||||
build esp-idf/esp_app_format/CMakeFiles/__idf_esp_app_format.dir/esp_app_desc.c.obj: C_COMPILER____idf_esp_app_format_unscanned_ C$:/Espressif/frameworks/esp-idf-v5.5/components/esp_app_format/esp_app_desc.c || cmake_object_order_depends_target___idf_esp_app_format
|
||||
DEFINES = -DESP_PLATFORM -DIDF_VER=\"v5.5\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -D PROJECT_NAME=\"SIM_S3_1\" -DPROJECT_VER=\"1f3f204-dirty\"
|
||||
DEFINES = -DESP_PLATFORM -DIDF_VER=\"v5.5\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -D PROJECT_NAME=\"SIM_S3_1\" -DPROJECT_VER=\"ba9da78-dirty\"
|
||||
DEP_FILE = esp-idf\esp_app_format\CMakeFiles\__idf_esp_app_format.dir\esp_app_desc.c.obj.d
|
||||
FLAGS = -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-error=extra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -mdisable-hardware-atomics -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/29096/Desktop/work/SIM/SIM_S3_1=. -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration
|
||||
INCLUDES = -IC:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/config -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_app_format/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -IC:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32s3 -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32s3/. -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/. -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -IC:/Espressif/frameworks/esp-idf-v5.5/components/log/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32s3 -IC:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32s3/register -IC:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32s3/include/esp32s3 -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32s3 -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -IC:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -IC:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32s3/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/include/apps -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/include/apps/sntp -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/lwip/src/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/port/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/port/freertos/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/port/esp32xx/include -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/port/esp32xx/include/arch -IC:/Espressif/frameworks/esp-idf-v5.5/components/lwip/port/esp32xx/include/sys
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
Command: ninja all
|
||||
|
|
@ -0,0 +1 @@
|
|||
Command: ninja all
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,18 @@
|
|||
Command: ninja all
|
||||
[1/9] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/main.c.obj
|
||||
[2/9] Performing build step for 'bootloader'
|
||||
[1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\bootloader\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/bootloader/bootloader.bin"
|
||||
Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free.
|
||||
[3/9] No install step for 'bootloader'
|
||||
[4/9] Linking C static library esp-idf\main\libmain.a
|
||||
[5/9] Completed 'bootloader'
|
||||
[6/9] Generating esp-idf/esp_system/ld/sections.ld
|
||||
[7/9] Linking CXX executable SIM_S3_1.elf
|
||||
[8/9] Generating binary image from built executable
|
||||
esptool.py v4.9.1
|
||||
Creating esp32s3 image...
|
||||
Merged 2 ELF sections
|
||||
Successfully created esp32s3 image.
|
||||
Generated C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin
|
||||
[9/9] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\29096\Desktop\work\SIM\SIM_S3_1\build\esp-idf\esptool_py && C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe C:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 partition --type app C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/partition_table/partition-table.bin C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build/SIM_S3_1.bin"
|
||||
SIM_S3_1.bin binary size 0x48a60 bytes. Smallest app partition is 0x300000 bytes. 0x2b75a0 bytes (91%) free.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": "1.2",
|
||||
"project_name": "SIM_S3_1",
|
||||
"project_version": "1f3f204-dirty",
|
||||
"project_version": "ba9da78-dirty",
|
||||
"project_path": "C:/Users/29096/Desktop/work/SIM/SIM_S3_1",
|
||||
"idf_path": "C:/Espressif/frameworks/esp-idf-v5.5",
|
||||
"build_dir": "C:/Users/29096/Desktop/work/SIM/SIM_S3_1/build",
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ void test_signal_generation(void) {
|
|||
|
||||
// 初始化正弦波生成器
|
||||
sine_generator_init(&g_sine_gen, 20000.0f); // 20kHz生成率
|
||||
sine_generator_set_frequency(&g_sine_gen, 10.0f); // 100Hz正弦波
|
||||
sine_generator_set_frequency(&g_sine_gen, 10.0f); // 10Hz正弦波
|
||||
sine_generator_set_amplitude(&g_sine_gen, 5.0f); // 5mV
|
||||
|
||||
// 创建定时器配置
|
||||
|
|
|
|||
|
|
@ -35,6 +35,11 @@ typedef struct {
|
|||
float* ecg_lookup_table; // ECG查找表
|
||||
uint32_t table_size; // 查找表大小
|
||||
uint32_t table_index; // 当前索引
|
||||
|
||||
// 按比例重复采样
|
||||
uint32_t ideal_table_size; // 理想表大小(理论周期点数)
|
||||
uint32_t samples_per_point; // 每个表点对应的样本数
|
||||
uint32_t sample_counter; // 当前表点的样本计数器
|
||||
} ecg_generator_t;
|
||||
|
||||
// 函数声明
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ typedef struct {
|
|||
float* sine_lookup_table; // 正弦波查找表
|
||||
uint32_t table_size; // 查找表大小
|
||||
uint32_t table_index; // 当前索引
|
||||
|
||||
// 按比例重复采样
|
||||
uint32_t ideal_table_size; // 理想表大小(理论周期点数)
|
||||
uint32_t samples_per_point; // 每个表点对应的样本数
|
||||
uint32_t sample_counter; // 当前表点的样本计数器
|
||||
} sine_generator_t;
|
||||
|
||||
// 函数声明
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include "esp_log.h"
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
// 初始化ECG生成器
|
||||
void ecg_generator_init(ecg_generator_t *generator, float sample_rate) {
|
||||
|
|
@ -31,6 +32,12 @@ void ecg_generator_init(ecg_generator_t *generator, float sample_rate) {
|
|||
generator->ecg_lookup_table = NULL;
|
||||
generator->table_size = 0;
|
||||
generator->table_index = 0;
|
||||
generator->sample_counter = 0;
|
||||
|
||||
// 按比例重复采样参数
|
||||
generator->ideal_table_size = 0;
|
||||
generator->samples_per_point = 0;
|
||||
generator->sample_counter = 0;
|
||||
|
||||
// 生成初始查找表
|
||||
ecg_generator_generate_lookup_table(generator);
|
||||
|
|
@ -104,10 +111,19 @@ float ecg_generator_get_next_sample(ecg_generator_t *generator) {
|
|||
}
|
||||
|
||||
if (generator->ecg_lookup_table != NULL && generator->table_size > 0) {
|
||||
// 使用查找表
|
||||
// 使用查找表,按比例重复采样
|
||||
float ecg_value = generator->ecg_lookup_table[generator->table_index];
|
||||
generator->table_index = (generator->table_index + 1) % generator->table_size;
|
||||
|
||||
// 更新样本计数器
|
||||
generator->sample_counter++;
|
||||
generator->sample_count++;
|
||||
|
||||
// 检查是否需要切换到下一个表点
|
||||
if (generator->sample_counter >= generator->samples_per_point) {
|
||||
generator->sample_counter = 0;
|
||||
generator->table_index = (generator->table_index + 1) % generator->table_size;
|
||||
}
|
||||
|
||||
return ecg_value;
|
||||
} else {
|
||||
// 查找表未准备好,使用实时计算(备用方案)
|
||||
|
|
@ -182,20 +198,33 @@ void ecg_generator_generate_lookup_table(ecg_generator_t *generator) {
|
|||
// 释放旧的查找表
|
||||
ecg_generator_free_lookup_table(generator);
|
||||
|
||||
// 计算查找表大小:一个完整RR间期的样本数
|
||||
// 表大小 = 生成率 / 心率频率
|
||||
// 计算理想表大小:一个完整RR间期的样本数
|
||||
// 理想表大小 = 生成率 / 心率频率
|
||||
float heart_rate_freq = generator->heart_rate / 60.0f; // 转换为Hz
|
||||
generator->table_size = (uint32_t)(generator->sample_rate / heart_rate_freq);
|
||||
generator->ideal_table_size = (uint32_t)(generator->sample_rate / heart_rate_freq);
|
||||
|
||||
// 设置实际表大小上限:最大10000个点
|
||||
const uint32_t MAX_TABLE_SIZE = 10000;
|
||||
generator->table_size = generator->ideal_table_size;
|
||||
if (generator->table_size > MAX_TABLE_SIZE) {
|
||||
generator->table_size = MAX_TABLE_SIZE;
|
||||
}
|
||||
|
||||
// 确保表大小至少为1
|
||||
if (generator->table_size < 1) {
|
||||
generator->table_size = 1;
|
||||
}
|
||||
|
||||
// 分配内存
|
||||
generator->ecg_lookup_table = (float*)malloc(generator->table_size * sizeof(float));
|
||||
// 计算每个表点对应的样本数
|
||||
generator->samples_per_point = generator->ideal_table_size / generator->table_size;
|
||||
if (generator->samples_per_point < 1) {
|
||||
generator->samples_per_point = 1;
|
||||
}
|
||||
|
||||
// 分配内存到PSRAM
|
||||
generator->ecg_lookup_table = (float*)heap_caps_malloc(generator->table_size * sizeof(float), MALLOC_CAP_SPIRAM);
|
||||
if (generator->ecg_lookup_table == NULL) {
|
||||
ESP_LOGE("ECG_GEN", "Failed to allocate memory for ECG lookup table");
|
||||
ESP_LOGE("ECG_GEN", "Failed to allocate memory for ECG lookup table in PSRAM");
|
||||
generator->table_size = 0;
|
||||
return;
|
||||
}
|
||||
|
|
@ -251,18 +280,21 @@ void ecg_generator_generate_lookup_table(ecg_generator_t *generator) {
|
|||
}
|
||||
|
||||
generator->table_index = 0; // 重置索引
|
||||
ESP_LOGI("ECG_GEN", "Generated ECG lookup table: %u points, %.1f BPM", generator->table_size, generator->heart_rate);
|
||||
generator->sample_counter = 0; // 重置样本计数器
|
||||
ESP_LOGI("ECG_GEN", "Generated ECG lookup table: %u points (ideal %u, %u samples/point), %.1f BPM",
|
||||
generator->table_size, generator->ideal_table_size, generator->samples_per_point, generator->heart_rate);
|
||||
}
|
||||
|
||||
// 释放ECG查找表
|
||||
void ecg_generator_free_lookup_table(ecg_generator_t *generator) {
|
||||
if (generator == NULL) return;
|
||||
if (generator->ecg_lookup_table != NULL) {
|
||||
free(generator->ecg_lookup_table);
|
||||
heap_caps_free(generator->ecg_lookup_table);
|
||||
generator->ecg_lookup_table = NULL;
|
||||
}
|
||||
generator->table_size = 0;
|
||||
generator->table_index = 0;
|
||||
generator->sample_counter = 0;
|
||||
}
|
||||
|
||||
// 清理ECG生成器
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@ void sine_generator_init(sine_generator_t *generator, float sample_rate) {
|
|||
generator->sine_lookup_table = NULL;
|
||||
generator->table_size = 0;
|
||||
generator->table_index = 0;
|
||||
generator->sample_counter = 0;
|
||||
|
||||
// 按比例重复采样参数
|
||||
generator->ideal_table_size = 0;
|
||||
generator->samples_per_point = 0;
|
||||
generator->sample_counter = 0;
|
||||
}
|
||||
|
||||
// 设置正弦波频率
|
||||
|
|
@ -97,15 +103,21 @@ float sine_generator_get_next_sample(sine_generator_t *generator) {
|
|||
return 0.0f;
|
||||
}
|
||||
|
||||
// 使用预计算的查找表,超高速访问
|
||||
// 使用预计算的查找表,按比例重复采样
|
||||
if (generator->sine_lookup_table != NULL && generator->table_size > 0) {
|
||||
// 从查找表获取预计算的值
|
||||
float sine_value = generator->sine_lookup_table[generator->table_index];
|
||||
|
||||
// 更新索引,循环使用查找表
|
||||
generator->table_index = (generator->table_index + 1) % generator->table_size;
|
||||
// 更新样本计数器
|
||||
generator->sample_counter++;
|
||||
generator->sample_count++;
|
||||
|
||||
// 检查是否需要切换到下一个表点
|
||||
if (generator->sample_counter >= generator->samples_per_point) {
|
||||
generator->sample_counter = 0;
|
||||
generator->table_index = (generator->table_index + 1) % generator->table_size;
|
||||
}
|
||||
|
||||
return sine_value;
|
||||
} else {
|
||||
// 如果查找表未初始化,使用实时计算(备用方案)
|
||||
|
|
@ -132,15 +144,28 @@ void sine_generator_generate_lookup_table(sine_generator_t *generator) {
|
|||
// 释放旧的查找表
|
||||
sine_generator_free_lookup_table(generator);
|
||||
|
||||
// 计算查找表大小:一个完整周期的样本数
|
||||
// 表大小 = 采样率 / 正弦波频率
|
||||
generator->table_size = (uint32_t)(generator->sample_rate / generator->frequency);
|
||||
// 计算理想表大小:一个完整周期的样本数
|
||||
// 理想表大小 = 采样率 / 正弦波频率
|
||||
generator->ideal_table_size = (uint32_t)(generator->sample_rate / generator->frequency);
|
||||
|
||||
// 设置实际表大小上限:最大10000个点
|
||||
const uint32_t MAX_TABLE_SIZE = 10000;
|
||||
generator->table_size = generator->ideal_table_size;
|
||||
if (generator->table_size > MAX_TABLE_SIZE) {
|
||||
generator->table_size = MAX_TABLE_SIZE;
|
||||
}
|
||||
|
||||
// 确保表大小至少为1
|
||||
if (generator->table_size < 1) {
|
||||
generator->table_size = 1;
|
||||
}
|
||||
|
||||
// 计算每个表点对应的样本数
|
||||
generator->samples_per_point = generator->ideal_table_size / generator->table_size;
|
||||
if (generator->samples_per_point < 1) {
|
||||
generator->samples_per_point = 1;
|
||||
}
|
||||
|
||||
// 分配内存
|
||||
generator->sine_lookup_table = (float*)malloc(generator->table_size * sizeof(float));
|
||||
if (generator->sine_lookup_table == NULL) {
|
||||
|
|
@ -151,11 +176,11 @@ void sine_generator_generate_lookup_table(sine_generator_t *generator) {
|
|||
|
||||
// 预计算正弦波值
|
||||
for (uint32_t i = 0; i < generator->table_size; i++) {
|
||||
// 计算时间点
|
||||
float t = (float)i / generator->sample_rate;
|
||||
// 计算归一化时间 (0-1),基于实际表大小
|
||||
float t_norm = (float)i / generator->table_size;
|
||||
|
||||
// 计算正弦波值
|
||||
float sine_value = generator->amplitude * sinf(2.0f * M_PI * generator->frequency * t);
|
||||
float sine_value = generator->amplitude * sinf(2.0f * M_PI * t_norm);
|
||||
|
||||
// 添加偏置电压
|
||||
float offset = generator->amplitude;
|
||||
|
|
@ -168,11 +193,12 @@ void sine_generator_generate_lookup_table(sine_generator_t *generator) {
|
|||
generator->sine_lookup_table[i] = sine_value;
|
||||
}
|
||||
|
||||
// 重置索引
|
||||
// 重置索引和计数器
|
||||
generator->table_index = 0;
|
||||
generator->sample_counter = 0;
|
||||
|
||||
ESP_LOGI("SINE_GEN", "Generated sine lookup table: %u points, %.1f Hz",
|
||||
generator->table_size, generator->frequency);
|
||||
ESP_LOGI("SINE_GEN", "Generated sine lookup table: %u points (ideal %u, %u samples/point), %.1f Hz",
|
||||
generator->table_size, generator->ideal_table_size, generator->samples_per_point, generator->frequency);
|
||||
}
|
||||
|
||||
// 释放正弦波查找表
|
||||
|
|
@ -186,6 +212,7 @@ void sine_generator_free_lookup_table(sine_generator_t *generator) {
|
|||
|
||||
generator->table_size = 0;
|
||||
generator->table_index = 0;
|
||||
generator->sample_counter = 0;
|
||||
}
|
||||
|
||||
// 清理生成器(释放所有资源)
|
||||
|
|
|
|||
Loading…
Reference in New Issue