docs: 添加IQ信号处理流程图文档

添加了详细的IQ电压信号处理流程图,包含系统架构图、处理流程图、数据流图、任务调度图、状态机图等多个可视化图表,以及关键参数表和算法核心公式说明。
This commit is contained in:
Admin
2026-03-03 11:33:50 +08:00
parent aa57e8192d
commit 77bdbe5c1e
4 changed files with 587 additions and 5 deletions

View File

@@ -9,6 +9,32 @@
static float I_buf[BASE_DATA_LEN];
static float Q_buf[BASE_DATA_LEN];
//雷达芯片串口数据打印
void uartDataTask(void *parameter) {
Serial.println("📡 串口数据读取任务启动");
while(1) {
if(Serial1.available()) {
byte data = Serial1.read();
//Serial.printf("%02X ", data);
uint16_t raw_i = adc1_get_raw(ADC1_CHANNEL_8);
uint16_t raw_q = adc1_get_raw(ADC1_CHANNEL_9);
float raw_i_voltage = (raw_i / 4095.0f) * 3.3f;
float raw_q_voltage = (raw_q / 4095.0f) * 3.3f;
raw_i = adc1_get_raw(ADC1_CHANNEL_0);
raw_q = adc1_get_raw(ADC1_CHANNEL_1);
float raw_i_voltage2 = (raw_i / 4095.0f) * 3.3f;
float raw_q_voltage2 = (raw_q / 4095.0f) * 3.3f;
Serial.printf("原:I=%.3f, Q=%.3f 放大:I=%.3f, Q=%.3f\n",raw_i_voltage, raw_q_voltage, raw_i_voltage2, raw_q_voltage2);
}
}
}
void radarDataTask(void *parameter) {
Serial.println("📡 雷达数据采集任务启动");
@@ -17,8 +43,8 @@ void radarDataTask(void *parameter) {
while(1) {
for(int i = 0; i < BASE_DATA_LEN; i++) {
sample.i_value = adc1_get_raw(ADC1_CHANNEL_0);
sample.q_value = adc1_get_raw(ADC1_CHANNEL_1);
sample.i_value = adc1_get_raw(ADC1_CHANNEL_8);
sample.q_value = adc1_get_raw(ADC1_CHANNEL_9);
sample.timestamp = millis();
I_buf[i] = (sample.i_value / 4095.0f) * 3.3f;
@@ -39,10 +65,17 @@ void radarDataTask(void *parameter) {
human_state_t state = radar_get_state();
uint16_t raw_i = adc1_get_raw(ADC1_CHANNEL_0);
uint16_t raw_q = adc1_get_raw(ADC1_CHANNEL_1);
float raw_i_voltage = (raw_i / 4095.0f) * 3.3f;
float raw_q_voltage = (raw_q / 4095.0f) * 3.3f;
if (state == NO_PERSON) {
Serial.printf("👤 No person - IQ电压: I=%.3fV, Q=%.3fV\n", avgI, avgQ);
Serial.printf("0-原始电压: I=%.3fV, Q=%.3fV - 放大电压: I=%.3fV, Q=%.3fV\n",
raw_i_voltage, raw_q_voltage, avgI, avgQ);
} else {
Serial.printf("👤 Human static - IQ电压: I=%.3fV, Q=%.3fV - 💓 心率: %.1f BPM, 呼吸: %.1f BPM\n", avgI, avgQ, radar_get_heart_bpm(), radar_get_resp_bpm());
Serial.printf("1-原:I=%.3f, Q=%.3f 放大:I=%.3f, Q=%.3f -心率: %.1f BPM, 呼吸: %.1f BPM\n",
raw_i_voltage, raw_q_voltage, avgI, avgQ, radar_get_heart_bpm(), radar_get_resp_bpm());
}
esp_task_wdt_reset();
@@ -65,6 +98,9 @@ void setup() {
// 初始化雷达
radar_init();
// 初始化Serial1串口 (RX:IO20, TX:IO19, 波特率:115200)
Serial1.begin(115200, SERIAL_8N1, 20, 19);
// 创建雷达数据任务
xTaskCreatePinnedToCore(
radarDataTask,
@@ -76,6 +112,17 @@ void setup() {
1
);
// 创建串口数据任务
xTaskCreatePinnedToCore(
uartDataTask,
"UART Data Task",
4096,
NULL,
3,
NULL,
1
);
Serial.println("✅ FreeRTOS任务创建成功");
Serial.println("🎉 系统初始化完成,等待雷达数据...");