avatar
文章
93
标签
61
分类
30
Home
Archives
Categories
Tags
About
LsWorld
Home
Archives
Categories
Tags
About

LsWorld

K 近邻算法:KNN(K-Nearest Neighbors)
发表于2026-05-19|机器学习
KNN(K-Nearest Neighbors,K 近邻)是一种非常直观的监督学习算法:一个样本属于什么类别,可以参考它在特征空间中最近的 $K$ 个邻居。 在分类任务中,KNN 通常采用“多数投票”:最近的 $K$ 个样本里哪个类别最多,就预测为哪个类别;在回归任务中,KNN 通常取最近 $K$ 个样本标签值的平均值或加权平均值。 1. KNN 的直觉可以把 KNN 想象成“向邻居打听答案”。 假设小区里新搬来一户人家,你想判断他们更像“高收入家庭”还是“普通收入家庭”。最直接的方式,是观察离他们最近的几户邻居:如果最近的 5 户里有 3 户都是高收入家庭,那么你可能会猜测这户新邻居也更接近高收入家庭。 机器学习里的 KNN 做的是类似的事情: 输入:一个尚未标记类别的新样本。 过程:在训练集中找到距离它最近的 $K$ 个已知样本。 输出:分类时进行多数投票,回归时进行平均或加权平均。 KNN 本质上没有显式的训练过程,它把训练数据保存下来,预测时再计算新样本与训练样本之间的距离。因此它也被称为惰性学习(Lazy Learning)。 2. 数学原理KNN 要解决两个核...
freertos中常用api总结
发表于2025-02-12|嵌入式
1. 任务管理 (Task Management) xTaskCreate(): 创建任务。 功能: 动态创建一个新的任务,并将其加入到 FreeRTOS 的任务调度器中。 常用场景: 在系统初始化阶段或运行时动态创建任务,用于执行不同的功能模块。 关键参数 : pvTaskCode: 指向任务函数的指针,任务代码的入口。 pcName: 任务名称,字符串形式,方便调试和追踪。 usStackDepth: 任务堆栈大小,以字 (word) 为单位,需要根据任务需求合理配置。 pvParameters: 传递给任务函数的参数,void 指针类型,可以传递任意类型数据。 uxPriority: 任务优先级,数值越大优先级越高,FreeRTOS 会根据优先级进行任务调度。 pxCreatedTask: 任务句柄指针,用于存储创建的任务句柄,后续操作任务时需要使用该句柄。 vTaskDelete(): 删除任务。 功能: 删除指定的任务。可以删除自身任务或其它任务。 常用场景: 任务执行完成后不再需要,或者需要动态管理任务生命周期时...
STM32根据DHT11温湿度分析城市相似度项目总结
发表于2025-02-04|嵌入式
所使用的模块与工具: STM32F103C8T6 DHT11温湿度传感器 ESP32WROOM(采用ESP-IDF) EMQX Serverless(MQTT Broker) TiDB Cloud(云数据库) 腾讯位置服务API 和风天气API 硬件层STM32Stm32Cubemx配置 使用引脚: PA10->D17(USART1_RX连到ESP32的D17) P9->D16(USART1_TX连到ESP32的D16) PB10->LED(用于测试系统是否正常运作,设置为GPIO_Output,推挽输出) PA0->DHT11 Do口(芯片左边标S的口,最右边有-的标志连GND,中间连VCC) Pinout&Configuration 由于硬件层面比较简单,就不采用DMA来传输了 SystemCore配置 GPIO PA0 GPIO output level: low(默认输出低电平) GPIO mode : Output Push Pull(推挽输出) GPIO Pull-up/Pull-down:No p...
stm32硬件实现与w25qxx通信
发表于2025-01-31|嵌入式
使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64 SCK(CLK) PB13 MOSI(DI) PB15 MISO(DO) PB14 CS(这里不采用硬件CS,所以接任意GPIO口都可以) PB12 STM32CubeMX配置这里对于时钟相关的配置就不做赘述了,由于是练习所以将系统时钟配置成了72MHz,主要是配置引脚。 在引脚配置将PB12配置为推挽输出,默认电平为高。 PB13,PB14,PB15均使用硬件的SPI。 可以在系统核心的GPIO中的SPI中看到这三个配置。 然后到SPI2中将参数配置,采用高位优先,波特率为18MB/s,若不是则需要调整Prescaler分频到18MB/s,传输以字节为单位。 这里先不开启中断,所以NVIC setting里面的中断没有选上,做好基础配置后就可以生成代码,点击GENERATE CODE。 在Src中就会...
STM32F103C8T6综合学习项目的具体功能实现详解
发表于2025-01-18
代码项目地址为stm32综合学习项目。 项目概述(详细可在项目的Project_Structure中查看)该项目基于STM32F103C8T6芯片,学习I2C,GPIO,ADC,EXTI,PWM等基础模块的使用,并通过模块化的方式使代码具有良好的可读性与健壮性。 准备的模块 OLED显示屏(I2C) 蜂鸣器模块(GPIO) 光敏电阻传感器(ADC) 热敏电阻传感器(ADC) MPU6050陀螺仪(I2C) 旋转编码器(EXTI+TIM) 舵机(PWM) LED指示灯(GPIO) 按钮(GPIO+EXTI) STM23F103C8T6芯片 文件结构设计硬件驱动层Hardware/ ├── OLED.c ├── OLED.h ├── OLED_Font.h ├── beeper.c ├── beeper.h ├── light_sensor.c ├── light_sensor.h ├── temp_sensor.c ├── temp_sensor.h ├── mpu6050.c ├── mpu6050.h ├── encoder.c ├── encoder.h ...
基于STM32综合学习项目结构设计
发表于2025-01-15|嵌入式
该项目基于型号STM32F103C8T6,项目的具体内容参考GitHub仓库,根据各个模块来学习对应的功能的实现。 开发GPIO驱动在开发GPIO模块前,需要对GPIO_TypeDef中的参数有一定的认识。 typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; 1. CRL (Configuration Register Low) 作用:配置 GPIO 端口的低 8 个引脚(Pin 0 ~ Pin 7)的模式和速度。 位域: 每 4 位控制一个引脚: MODEy[1:0]:配置引脚的模式(输入、输出、复用功能、模拟模式)。 CNFy[1:0]:配置引脚的输出类型(推挽、开漏、复用功能、模拟模式)。 示例: 设置 Pin 0 为推挽输...
stm32中热敏电阻模块在OLED上实时显示温度
发表于2025-01-15|嵌入式
采用stm32f103c8t6芯片的A0引脚连接热敏电阻模块。采用ADC1的通道0,使用标准库实现。 实现功能所使用的常量为: //温度传感器参数 #define VREF 3.3f // ADC参考电压 3.3V #define R1 10000.0f // 电压分压阻值为10KΩ,与热敏电阻串联,用于计算热敏电阻的阻值 #define B 3950.0f // 热敏电阻的 B 常数,单位为开尔文(K),用于计算热敏电阻的温度 #define T0 298.15f // 参考温度,单位为开尔文(K),298.15K即 25°C #define R0 10000.0f // 热敏电阻在参考温度 T0 下的阻值,用于计算热敏电阻在当前温度下的阻值 // DMA内存存入位置 #define ADC_BUFFER_SIZE 10 uint16_t ADC_ConvertedValue[ADC_BUFFER_SIZE]; GPIO引脚配置: void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitS...
STM32F1系列驱动SG90舵机模块
发表于2025-01-09|嵌入式
SG90舵机模块介绍 标准库代码实现驱动舵机由上图可知可以通过PWM来实现驱动舵机,这里采用STM32F103C8T6的TIM2的通道4来实现,即该芯片的A3口引脚,如下图所示 配置20ms的时基单元(以PLL时钟频率为72MHz为例),那么就是将TIM2的定时器的周期配置为20ms(50Hz),即设置ARR= 2000 - 1,PSC = 720 -1,则定时器的时钟周期就为20ms,并且我在初始位置设置为90°,即起始值设置为150,代码如下: void TIM2_PWM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 配置定时器周期为20ms(50Hz) TIM_TimeBaseStructure.TIM_Period = 2000 - 1; // 72MHz / 7200 = 10KHz TIM_TimeBaseStructure.TIM_Prescal...
Python3中常用函数
发表于2025-01-07|python
本文参考Python菜鸟教程 Python基础语法#单行注释以`#`,多行注释以`"""`开头和`"""`结尾。 #注释1 """ 多行注释 """ #缩进与if,无需分号 if True: print('true') #多行语句,变量通过‘\’来实现多行语句 a = 1 b = 2 c = 3 total = a + \ b + \ c + \ print(total) #输出6 #字符串 str = '012345' print(str) #输出012345 print(str[0:-1]) #输出01234 取0到4左闭右开 -1表示最右边 print(str[0:-2]) #输出0123 print(str[1]) #输出 1 print(str[2:]) #输出 2345 print(str[0:4:2]) #输出 02 范围[0,4),即0 1 2 3 步长为2 print(str * 2) #输出012345012345 print(str + '你好') #输出012345你好 字符串拼接 dat...
hexo博客绑定域名实现国内访问
发表于2025-01-07|环境搭建
在本地可以用hexo来搭建自己的博客后(若还没有搭建可以看我的博客搭建这篇文章),再在Vercel实现线上访问(若想以其他静态页面而非Hexo来Vercel结合github实现线上访问可以看我的使用Vercel来部署静态页面并解决跨域问题这篇文章)。 经过以上两个步骤可以实现使用科技手段来访问搭建的网页或博客,但此时若不想使用科技手段对Vercel提供的域名在国内访问搭建的博客大概率是会访问失败。(这里的原理结合我所学的知识应该是因为Vercel所生成的默认的域名在国内dns服务器解析失败导致无法找到ip,从而使我们所搭建的网站在国内无法访问) 这个问题可以通过购买国内域名就可以实现,购买一些便宜的域名即可(域名购买的步骤不再演示了,便宜的域名6块1年也不是很贵,这里以阿里云的域名为例)。 域名购买完成后可在搜索栏中搜索域名,进入域名控制台页面。 然后点击全部域名查看自己购买到的域名。 下方应该就会有你所购买到的域名信息(若状态不是处于正常状态需要等待一段时间检查)。 然后打开Vercel,点击右上角的ADD NEW下面的Project。 在下方选择你的博客或其他...
串口协议
发表于2025-01-03|嵌入式
USART串口通信stm32中使用USART串口通信主要通过RX和TX两个接口完成基础操作,发送的数据通过总线到发送数据寄存器TDR,然后TDR中数据会发送到发送移位寄存器,发送移位寄存器会将比特右移的传到USARTX_TX引脚,产生串口协议规定的波形,当数据从发送移位寄存器发送完成时,TXE标志位会置1,只需判断TXE就可以知道是否可以传下一个数据。 同样在接受控制器中通过USARTX_TX引脚接受数据,接受完成会将RXNE标志位置1。 在实际使用中只有DR寄存器可供读写,写入DR时,数据走TX发送,读出DR时,数据走TX接受。 发送数据的函数形式为 void Serial_SendChar(uint8_t ch) { // 发送字符 USART_SendData(USART1, ch); // 等待发送缓冲区为空 发送完成会将USART_FLAG_TXE置1 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } 接受数据的形式为 if (US...
ADC模数转换器
发表于2025-01-02|嵌入式
ADC可以将模拟电压转换为数字变量, 输入电压范围03.3V,转换结果的范围:04095,即0V对应0,3.3V对应4095,中间均为一一对应的线性关系。 STM32F10系列中ADC有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 STM32 ADC的总转换时间$$T_{CONV} = 采样时间+12.5个ADC周期$$ 例: 当ADCCLK =14MHz,采样时间为1.5个ADC周期, 则$$T_{CONV} = 1.5 +12.5 =14个ADC周期=1us$$
12…8
avatar
LsWorld
专注机器学习、深度学习与工程实践
文章
93
标签
61
分类
30
GitHub
公告
欢迎来到 LsWorld,这里记录机器学习学习路线、实验笔记和代码实践。
最新文章
K 近邻算法:KNN(K-Nearest Neighbors)2026-05-19
freertos中常用api总结2025-02-12
STM32根据DHT11温湿度分析城市相似度项目总结2025-02-04
stm32硬件实现与w25qxx通信2025-01-31
STM32F103C8T6综合学习项目的具体功能实现详解2025-01-18
分类
  • C5
  • Flutter2
  • JavaScript1
  • TypeScript1
  • Velcel1
  • Vue4
  • Vue31
  • flutter1
标签
单片机 操作系统 C android 输入输出管理 dart javascript 嵌入式 webpack Flutter 前端 运输层 typeorm 正则表达式 JavaScript mustache es6 指针 Vuex 指令系统 npm stm32 复变函数 计算机网络 中央处理器 hexo flutter 数据结构 nestjs 输入输出系统 进程与线程 存储系统 分类算法 错误排查 mysql 爬虫 踩坑 计算机网络体系结构 基础 Dart
归档
  • 五月 2026 1
  • 二月 2025 2
  • 一月 2025 10
  • 十二月 2024 1
  • 二月 2024 3
  • 一月 2024 6
  • 十二月 2023 14
  • 十一月 2023 6
网站信息
文章数目 :
93
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By LsWorld框架 Hexo 6.2.0|主题 Butterfly 5.5.5-b1