STM32F103实现波形显示与频谱仪:雷德算法与FFT实战
简介这是一份面向嵌入式学习者与电子类毕设同学的STM32F103开源项目聚焦波形显示与频谱分析采用标准库开发配合0.96寸SPI接口OLED屏FFT以C语言实现ADC1采样频率达14MHz并融入雷德算法适合作为信号处理与显示驱动的综合练手案例。压缩包共281个文件约6.14MB以c与h源码、o与crf编译中间文件、d依赖文件为主另含hex固件、uvprojx工程、sct分散加载、map映射及少量说明文档覆盖从源码到可烧录文件的完整链路。目前已有1630人学习下载。读者可从中获取完整的工程目录结构、OLED驱动与FFT频谱实现思路、ADC高速采样配置参考以及可直接编译调试的Keil工程便于快速复现波形与频谱显示效果并在此基础上做二次开发或毕设扩展。1. 从一块“吃灰”的 F103 说起波形显示、频谱仪与雷德算法到底能做什么手头攒了几块 STM32F103 最小系统板Flash 只有 128KB、RAM 20KB主频 72MHz跑个点灯、串口收发绰绰有余但一提到“波形显示”“频谱仪”这种听起来该由 FPGA 或上位机干的活很多人第一反应是“这破芯片算得过来吗”。我一开始也这么想直到把 ADC 采样、FFT 和 TFT 刷屏这三件事拆开算了一遍账1024 点采样在 72MHz 下用 DMA 搬运几乎不占 CPU基 2 FFT 的运算量对 M3 内核来说也就几毫秒真正卡脖子的反而是显示刷新和内存分配。标题里提到的“雷德算法”正是 FFT 里做位倒序重排的那一步它决定了你能不能把输入序列按正确顺序喂给蝶形运算。这套东西做出来本质上是一个完全免费开源、个人原创的嵌入式信号可视化方案用最便宜的 F103 采集模拟信号在片内做频谱分析再把时域波形和频域柱状图直接画在 SPI 屏上。适合谁适合手头有 F103 板子、想学数字信号处理落地、又不愿意一上来就啃 DSP 芯片手册的嵌入式开发者。它不追求专业仪器精度但能把“采样—变换—显示”这条链路完整跑通对理解频谱仪底层原理足够用了。2. 硬件选型与信号链搭建为什么 F103 加 SPI 屏是性价比最高的起点2.1 核心器件清单与引脚分配先把硬件定下来不然后面代码没法写。我一般会按“最小可用”原则选型避免一上来就堆外设。器件型号/规格作用备注主控STM32F103C8T6采样、运算、驱动显示72MHz20KB RAM显示屏1.8寸 SPI TFTST7735波形与频谱绘制128x160SPI 接口信号源板载电位器或函数发生器产生待测信号0~3.3V 范围内晶振8MHz 无源 32.768kHz系统时钟与 RTC外部晶振更稳调试SWD 接口下载与在线调试保留 4 根线引脚分配上ADC 用 PA0ADC1_IN0SPI1 用 PA5/PA6/PA7 接屏幕CS、DC、RST 分别用 PA4、PA3、PA2。DMA1_Channel1 负责 ADC 搬运TIM2 触发采样率。这样分配的好处是 SPI1 和 ADC1 不抢引脚DMA 通道也不冲突。2.2 采样前端与抗混叠的取舍F103 的 ADC 是 12 位逐次逼近型最大采样率 1MHz但实际用 DMA 连续搬运时受限于总线带宽和转换时间我一般把采样率定在 200kHz 左右。根据奈奎斯特准则能分析的信号频率上限是 100kHz但为了留余量实际只做到 40kHz 以内。前端电路不能省。直接拿信号源接 PA0 会遇到两个问题一是输入阻抗不匹配导致幅度衰减二是高频噪声混叠进有用频段。常见做法是加一个 RC 低通截止频率设在采样率的一半附近。比如采样率 200kHz截止频率就取 100kHz用 1kΩ 电阻和 1nF 电容组成一阶无源滤波。如果信号源输出阻抗较高再加一级电压跟随器用 LM358 搭个同相放大器把信号抬到 ADC 量程的中间值 1.65V 附近这样正负半周都能采到。注意F103 的 ADC 输入范围是 0~3.3V信号超过这个范围会直接打坏引脚前端一定要加钳位二极管。2.3 定时器触发与 DMA 搬运的配置逻辑采样率靠 TIM2 的更新事件触发 ADC这样比软件循环采样准得多。TIM2 挂在 APB1 上时钟 72MHz预分频器设为 0自动重装载值设为 359这样更新频率就是 72MHz / (3591) 200kHz。ADC 配置为外部触发模式触发源选 TIM2_TRGODMA 循环模式缓冲区大小 1024。// TIM2 配置200kHz 触发 TIM_TimeBaseInitTypeDef TIM_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_InitStruct.TIM_Prescaler 0; TIM_InitStruct.TIM_Period 359; // 72MHz / 360 200kHz TIM_InitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_InitStruct); TIM_SelectOutputTrigger(TIM2, TIM_TRGO_Update); TIM_Cmd(TIM2, ENABLE); // ADC1 配置外部触发 DMA ADC_InitTypeDef ADC_InitStruct; ADC_InitStruct.ADC_Mode ADC_Mode_Independent; ADC_InitStruct.ADC_ExternalTrigConv ADC_ExternalTrigConv_T2_TRGO; ADC_InitStruct.ADC_ContinuousConvMode DISABLE; // 靠触发不连续 ADC_InitStruct.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStruct.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStruct); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE);这段代码的关键参数是TIM_Period和ADC_SampleTime。TIM_Period决定采样间隔改大就降采样率改小就升采样率但别超过 ADC 的转换时间上限。ADC_SampleTime选 55.5 个周期是因为信号源内阻加上前端 RC 之后采样保持电容需要足够时间充到稳定值选太短会导致幅度测量偏小。DMA 缓冲区用uint16_t adc_buf[1024]搬满一半和搬满全部各产生一次中断方便做双缓冲处理。2.4 显示刷新率与内存的平衡SPI 屏刷一帧 128x160 的 16 位色图数据量是 1281602 40KB按 SPI 18MHz 算理论耗时约 18ms。但 F103 的 SPI1 最高只能到 36MHz实际用 18MHz 比较稳。如果每采完 1024 点就全屏刷新波形会卡顿。我的做法是只刷新波形区域比如时域波形占屏幕上半部分 128x80频域柱状图占下半部分 128x80每次只更新变化的部分。内存方面1024 点 ADC 数据占 2KBFFT 需要实部和虚部各 1024 个 float那就是 8KB再加上显示缓冲区20KB RAM 刚好够用但不能再开大数组了。3. 雷德算法与基 2 FFT 在 F103 上的实现细节3.1 雷德算法到底在重排什么FFT 的蝶形运算要求输入序列按位倒序排列雷德算法就是干这个的。举个例子8 点 FFT原序列索引 0~7 的二进制是 000、001、010、011、100、101、110、111位倒序之后变成 000、100、010、110、001、101、011、111对应十进制就是 0、4、2、6、1、5、3、7。如果不做这一步蝶形运算的输入顺序就错了算出来的频谱是乱的。实现上雷德算法用双重循环外层遍历所有索引内层判断当前索引是否小于倒序后的索引是就交换。这样每个元素只交换一次不会重复。// 雷德算法位倒序重排 void bit_reverse(float *real, float *imag, uint16_t n) { uint16_t j 0; for (uint16_t i 0; i n - 1; i) { if (i j) { // 交换实部和虚部 float temp real[i]; real[i] real[j]; real[j] temp; temp imag[i]; imag[i] imag[j]; imag[j] temp; } // 计算下一个 j uint16_t k n 1; while (k j) { j - k; k 1; } j k; } }这段代码里n必须是 2 的整数次幂比如 1024。j的更新逻辑是模拟二进制加法进位从高位往低位找第一个 0 变成 1 的位置。如果n不是 2 的幂这个算法会死循环所以调用前一定要检查。3.2 蝶形运算的定点与浮点选择F103 没有硬件浮点单元浮点运算靠软件模拟一次乘法大概几十个周期。1024 点 FFT 需要 10 级蝶形每级 512 个蝶形总共 5120 个蝶形每个蝶形包含一次复数乘法和两次复数加减。用浮点算下来大概 3~5ms对 200kHz 采样率来说采 1024 点耗时 5.12ms运算再花 5ms刚好能跟上但余量不大。如果嫌慢可以改用定点 Q15 格式把浮点乘法换成 32 位整数乘法再移位。代价是动态范围变小小信号容易丢精度。我一般先用浮点跑通确认算法没问题再考虑定点优化。下面是一个基 2 FFT 的核心循环// 基 2 FFT原地运算 void fft(float *real, float *imag, uint16_t n) { bit_reverse(real, imag, n); // 先做雷德重排 for (uint16_t s 1; s log2(n); s) { uint16_t m 1 s; // 当前级的点数 uint16_t m2 m 1; // 半点数 float wr 1.0f, wi 0.0f; // 旋转因子初始值 float theta -2.0f * PI / m; float wpr cosf(theta); float wpi sinf(theta); for (uint16_t j 0; j m2; j) { for (uint16_t k j; k n; k m) { uint16_t t k m2; float tr real[t] * wr - imag[t] * wi; float ti real[t] * wi imag[t] * wr; real[t] real[k] - tr; imag[t] imag[k] - ti; real[k] tr; imag[k] ti; } // 更新旋转因子 float temp wr; wr wr * wpr - wi * wpi; wi temp * wpi wi * wpr; } } }log2(n)可以用查表或者循环移位实现避免调用 math.h 里的浮点 log。旋转因子递推比每次查表快但误差会累积跑 1024 点问题不大再大就得定期用原始值校正。3.3 窗函数与频谱泄漏的抑制直接对 1024 点采样做 FFT如果信号频率不是采样率除以 1024 的整数倍频谱会泄漏柱状图看起来就是一片糊。加窗能缓解这个问题。汉宁窗是最常用的公式是 0.5 - 0.5cos(2pi*n/(N-1))。加窗之后主瓣变宽但旁瓣压低适合看单频信号。// 汉宁窗 void apply_hanning(float *data, uint16_t n) { for (uint16_t i 0; i n; i) { float window 0.5f - 0.5f * cosf(2.0f * PI * i / (n - 1)); data[i] * window; } }加窗会损失一点幅度精度测幅值时要乘个补偿系数汉宁窗的相干增益是 0.5所以幅度要乘 2。如果只看频率成分不关心绝对幅度可以不加补偿。3.4 从 FFT 结果到屏幕柱状图FFT 输出是复数取模得到幅度谱。1024 点 FFT 输出 1024 个复数但只有前 512 个是有效频率成分后 512 个是镜像。屏幕只有 128 列所以要把 512 个点压缩成 128 个柱。简单做法是每 4 个点取最大值或者取平均。取最大值能保留峰值适合看谐波取平均更平滑适合看噪声底。// 幅度谱压缩到 128 列 uint16_t spectrum[128]; for (uint16_t i 0; i 128; i) { float max_mag 0; for (uint16_t j 0; j 4; j) { uint16_t idx i * 4 j; float mag sqrtf(real[idx] * real[idx] imag[idx] * imag[idx]); if (mag max_mag) max_mag mag; } // 对数刻度映射到 0~80 像素高度 spectrum[i] (uint16_t)(20 * log10f(max_mag 1)); if (spectrum[i] 80) spectrum[i] 80; }对数刻度是必须的线性刻度下小信号根本看不见。log10f在 F103 上比较慢可以查表或者用近似算法但 128 次调用还能接受。4. 避坑与排查那些让我熬夜的翻车现场4.1 采样率上不去波形全是锯齿现象设置 200kHz 采样率但示波器看 PA0 上的信号发现实际采样间隔忽长忽短重建的波形像被狗啃过。原因ADC 的采样时间设得太短信号源内阻加上前端 RC 导致采样保持电容没充满。另外 DMA 搬运和 CPU 访问 Flash 抢总线偶尔会丢一个触发。解决把ADC_SampleTime从 7.5 周期改成 55.5 周期给电容足够充电时间。DMA 优先级设成最高Flash 等待周期设为 2因为 72MHz 下 Flash 需要 2 个等待周期。改完之后波形毛刺明显减少。4.2 FFT 结果对称但频率轴对不上现象频谱柱状图左右对称但峰值位置和信号源频率差了一截。原因雷德算法里的n传错了实际传了 1024但 ADC 缓冲区只填了 512 个点后面 512 个是零。零填充不会改变频谱形状但会让峰值位置偏移。解决检查 DMA 传输数量寄存器和 FFT 调用时的n是否一致。我习惯在 FFT 函数入口加一句assert(n ADC_BUF_SIZE)虽然 F103 上 assert 会占空间但调试阶段很有用。4.3 屏幕刷新撕裂波形闪得眼睛疼现象波形刷新时上半屏和下半屏不同步看起来像被撕成两半。原因SPI 刷屏没有等 DMA 传输完成就改了显示缓冲区导致新旧数据混在一起。解决用双缓冲一个缓冲区在刷屏时另一个缓冲区在后台准备下一帧。刷屏用 DMA 传输传输完成中断里再切换缓冲区。如果 RAM 不够就只刷新变化区域别全屏刷。4.4 浮点运算导致 HardFault现象一调用 FFT 就进 HardFault调试器显示栈溢出。原因FFT 函数里开了几个 1024 点的 float 数组作为局部变量20KB RAM 根本放不下栈直接撞到堆。解决把大数组改成全局变量或者static让编译器分配到静态存储区。栈大小在启动文件里改默认 1KB 不够改成 4KB。但全局数组多了也占 RAM得算着用。4.5 频谱底噪太高小信号被淹没现象没有输入信号时频谱柱状图也有 20~30 像素的高度小信号完全看不见。原因ADC 的参考电压不稳或者前端没有加偏置信号在 0V 附近被截断。另外 FFT 的浮点误差也会贡献底噪。解决前端加 1.65V 偏置让信号在量程中间摆动。ADC 参考电压用外部 3.3V 基准别用 VDDA 直接分压。FFT 之前减掉直流分量也就是求 1024 个点的平均值再逐个减去。做完这三步底噪能压到 5 像素以下。5. 进阶技巧让这套方案从“能跑”到“好用”5.1 用查表法加速旋转因子计算浮点cosf和sinf在 F103 上每次调用大概 10us1024 点 FFT 要算 5120 次旋转因子光三角函数就花 50ms根本跟不上实时。我的做法是预先算好一张 512 点的旋转因子表存在 Flash 里运行时直接查表。表的大小是 512 * 2 * 4 字节 4KBFlash 128KB 完全放得下。// 预计算旋转因子表放在 Flash 中 const float twiddle_real[512] {1.0f, 0.9999f, ...}; // 省略具体数值 const float twiddle_imag[512] {0.0f, -0.0061f, ...}; // FFT 循环里改用查表 float wr twiddle_real[j * (n / m)]; float wi twiddle_imag[j * (n / m)];查表比递推更准因为递推误差会累积查表每次都是精确值。代价是占 4KB Flash对 F103C8T6 来说可以接受。5.2 自动量程与峰值保持固定量程下大信号会削顶小信号看不见。加一个自动量程逻辑每次采完 1024 点找最大值和最小值如果最大值接近 4095 或者最小值接近 0就调整前端增益或者软件缩放系数。峰值保持更简单就是每次刷新时比较当前柱高和上一帧柱高取大的那个这样瞬间信号不会一闪而过。// 峰值保持 static uint16_t peak_hold[128] {0}; for (uint16_t i 0; i 128; i) { if (spectrum[i] peak_hold[i]) { peak_hold[i] spectrum[i]; } else { peak_hold[i] (peak_hold[i] 2) ? peak_hold[i] - 2 : 0; // 缓慢下降 } // 绘制 peak_hold[i] }下降速度用-2是经验值太快了峰值留不住太慢了屏幕上一片残影。可以做成可调参数根据信号特性改。5.3 用定时器中断做双缓冲切换双缓冲的关键是切换时机。我一般用 DMA 传输完成中断在中断里把显示指针指向另一个缓冲区然后重新启动 DMA。这样刷屏和计算完全并行CPU 利用率能到 80% 以上。// DMA 传输完成中断 void DMA1_Channel3_IRQHandler(void) { if (DMA_GetITStatus(DMA1_IT_TC3)) { DMA_ClearITPendingBit(DMA1_IT_TC3); // 切换显示缓冲区 if (disp_buf buf_a) { disp_buf buf_b; } else { disp_buf buf_a; } // 重新启动 SPI DMA SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE); DMA_SetCurrDataCounter(DMA1_Channel3, DISP_BUF_SIZE); DMA_Cmd(DMA1_Channel3, ENABLE); } }DISP_BUF_SIZE是显示区域的总字节数比如 128802 20480。DMA 传输完这么多字节大概 1ms期间 CPU 可以准备下一帧数据。5.4 验证方法用已知信号源校准做完之后怎么知道准不准找个函数发生器输出 1kHz 正弦波幅度 1Vpp看时域波形周期是不是 1ms频域峰值是不是在 1kHz 位置。再输出 10kHz 方波看频谱里 1kHz、3kHz、5kHz 的谐波是不是依次递减。如果谐波位置对不上检查采样率和 FFT 点数如果幅度不对检查窗函数补偿和 ADC 参考电压。我习惯在代码里留一个测试模式按一下按键就输出 1kHz 方波到 DAC 引脚然后 ADC 采回来做 FFT形成闭环。这样不用外部仪器也能验证链路通不通。5.5 一个让我后悔没早做的习惯早期我总想一次把功能做全结果代码越写越乱FFT 和显示耦合在一起改一个参数就得重新编译烧录。后来学乖了把采样、FFT、显示拆成三个独立模块模块之间用环形缓冲区传递数据。这样调 FFT 的时候不用管显示调显示的时候不用管采样。还有一个习惯是每次改完参数都在串口打印关键值比如采样率、FFT 峰值索引、幅度最大值不用盯着屏幕猜。这些习惯看着笨但省下来的调试时间够你多跑好几轮实验。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

python的机器人基础原理工业场景模拟第十三篇:焊接产线仿真,计算雅可比矩阵行列式,依据数值判断当前构型是否靠近奇异位形。

python的机器人基础原理工业场景模拟第十三篇:焊接产线仿真,计算雅可比矩阵行列式,依据数值判断当前构型是否靠近奇异位形。

《Python机器人基础原理》第十三篇:焊接产线仿真——计算雅可比矩阵行列式,依据数值判断当前构型是否靠近奇异位形1. 实际工业应用场景周五上午,某新能源汽车电池托盘焊接产线。一台4-DOF关节型工业机械臂搭载MIG焊枪,对托盘铝合金…

2026/10/14 0:05:43 阅读更多 →
词根拆解技术:提升信息检索效率的核心方法

词根拆解技术:提升信息检索效率的核心方法

1. 信息检索中的词根拆解技术背景在信息爆炸时代,如何从海量文本中快速定位目标内容成为关键挑战。传统的关键词匹配方法存在明显局限:当用户输入"苹果"时,系统无法区分水果公司还是水果本身。词根拆解技术正是为了解决这一痛点而生…

2026/10/14 0:05:43 阅读更多 →
道路缺陷检测数据集YOLO训练避坑指南

道路缺陷检测数据集YOLO训练避坑指南

简介:面向道路缺陷检测场景的大型目标检测数据集,包含约一万四千张训练图像、二百六十张验证图像和一千张测试图像,标签已转为YOLO格式,覆盖四类常见道路缺陷,可直接用于YOLO全系列网络训练。压缩包采用7z格式&#xf…

2026/10/14 0:05:43 阅读更多 →

最新新闻

尖叫声音样本数据集eva:从包结构到训练基线的完整实践

尖叫声音样本数据集eva:从包结构到训练基线的完整实践

简介:EVA尖叫声音样本数据集是一份面向音乐信息检索(MIR)与音频分类研究的人声尖叫样本库,由台湾清华大学MIR课程项目整理,旨在为尖叫检测、异常声音识别、SVM分类等实验提供稀缺的领域数据。压缩包共63个文件&#xf…

2026/10/14 0:47:55 阅读更多 →
现代C++多线程编程实践与优化指南

现代C++多线程编程实践与优化指南

1. 现代C多线程编程的核心价值十年前我刚接触多线程编程时,还在用pthread这类原始接口手动管理线程生命周期。现代C11标准引入的库彻底改变了游戏规则——现在我们可以用更安全、更直观的方式构建并发程序。举个例子,过去需要几十行代码实现的线程同步&a…

2026/10/14 0:47:55 阅读更多 →
Neo4j驱动的RAG:从向量检索到知识图谱推理的工程跃迁

Neo4j驱动的RAG:从向量检索到知识图谱推理的工程跃迁

1. 这份“日报”不是资讯汇编,而是工程实践的切片快照你点开这份标题为《Agent / LLM 技术精选日报 2026-09-28(知乎版)》的文档时,大概率会下意识把它当成一份轻量级技术资讯摘要——类似科技媒体每日推送的“今日AI圈发生了什么…

2026/10/14 0:47:55 阅读更多 →
JVM元空间内存泄漏排查与防护实战指南

JVM元空间内存泄漏排查与防护实战指南

1. 面试题背后的技术深度剖析当这个面试题出现在阿里巴巴Java技术面试中时,它实际上考察的是候选人对JVM内存管理的系统化理解能力和复杂问题排查经验。元空间(Metaspace)内存泄漏不同于传统的堆内存问题,它的隐蔽性更强且往往在应用运行较长时间后才显现…

2026/10/14 0:47:55 阅读更多 →
老虎数据集2055张VOC+YOLO格式:目标检测训练与标注避坑指南

老虎数据集2055张VOC+YOLO格式:目标检测训练与标注避坑指南

简介:本资源为面向目标检测学习者的老虎数据集,采用Pascal VOC与YOLO双格式标注,适合从事单类别目标检测训练、模型验证及算法对比的研究人员与开发者使用。压缩包共约2000个文件,以1999个xml标注文件和1个说明txt为主&#xff0c…

2026/10/14 0:47:55 阅读更多 →
开题报告是研究旅程的导航图,科迅捷AI帮你把路线画清楚

开题报告是研究旅程的导航图,科迅捷AI帮你把路线画清楚

如果把博士阶段的研究比作一段长途旅行,开题报告就是出发前画好的导航图。导航图不决定你路上的每一个细节,但它决定了方向:往哪走、经过哪些站点、预计什么时候到达。没有这张图,你很容易在路上迷路,或者走很远才发现…

2026/10/14 0:46:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →