docs: 添加IQ信号处理流程图文档
添加了详细的IQ电压信号处理流程图,包含系统架构图、处理流程图、数据流图、任务调度图、状态机图等多个可视化图表,以及关键参数表和算法核心公式说明。
This commit is contained in:
55
src/main.cpp
55
src/main.cpp
@@ -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("🎉 系统初始化完成,等待雷达数据...");
|
||||
|
||||
Reference in New Issue
Block a user