PCA简介

PCA简介

 PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

https://blog.youkuaiyun.com/zhongkelee/article/details/44064401

奇异值分解(SVD)

当给定一个大小为[公式]的矩阵[公式],虽然矩阵[公式]不一定是方阵,但大小为[公式][公式][公式][公式]却是对称矩阵,若[公式][公式],则矩阵[公式]的奇异值分解为

[公式]

其中,矩阵[公式]的大小为[公式],列向量[公式][公式]的特征向量,也被称为矩阵[公式]左奇异向量(left singular vector);矩阵[公式]的大小为[公式],列向量[公式][公式]的特征向量,也被称为矩阵[公式]右奇异向量(right singular vector);矩阵[公式]大小为[公式],矩阵[公式]大小为[公式],两个矩阵对角线上的非零元素相同(即矩阵[公式]和矩阵[公式]的非零特征值相同,推导过程见附录1);矩阵[公式]的大小为[公式],位于对角线上的元素被称为奇异值(singular value)。

接下来,我们来看看矩阵[公式]与矩阵[公式]和矩阵[公式]的关系。令常数[公式]是矩阵[公式]的秩,则[公式],当[公式]时,很明显,矩阵[公式]和矩阵[公式]的大小不同,但矩阵[公式]和矩阵[公式]对角线上的非零元素却是相同的,若将矩阵[公式](或矩阵[公式])对角线上的非零元素分别为[公式],其中,这些特征值也都是非负的,再令矩阵[公式]对角线上的非零元素分别为[公式],则

[公式]

即非零奇异值的平方对应着矩阵[公式](或矩阵[公式])的非零特征值,到这里,我们就不难看出奇异值分解与对称对角化分解的关系了,即我们可以由对称对角化分解得到我们想要的奇异值分解。

设A为m*n阶矩阵,q=min(m,n),A*A的q个非负特征值的算术平方根叫作A的奇异值.。

https://zhuanlan.zhihu.com/p/26306568

https://www.zhihu.com/question/22237507

### PCA9685 舵机模块简介 PCA9685 是一款基于 I²C 接口的 16 通道 PWM 控制器芯片,广泛应用于机器人、无人机和其他需要精确控制多个设备的场景。它能够提供多达 16 个独立可配置的 PWM 输出信道,非常适合用于驱动舵机或多路 LED 的亮度调节。 该模块支持高达 1kHz 的频率设置,并允许用户通过调整占空比来改变输出信号的状态。其内部集成了一个振荡器以及一组寄存器,用来存储各个通道的高电平和低电平时长数据[^1]。 --- ### 使用方法概述 #### 硬件连接 为了使 STM32 或其他微控制器能成功与 PCA9685 进行通信,需按照如下方式完成硬件接线: | 功能 | 引脚名称 | 对应 MCU 引脚 | |------|----------------|---------------| | SDA | 数据线 | GPIO (I²C SDA)| | SCL | 时钟线 | GPIO (I²C SCL)| | VCC | 正极电源输入 | +5V / +3.3V | | GND | 地 | GND | 注意:PCA9685 支持宽电压范围(2.7V 至 6V),因此可以直接由大多数开发板供电[^2]。 #### 初始化过程 初始化阶段主要涉及以下几个方面: - 设置工作模式为连续运行; - 配置预分频寄存器以决定整体刷新率; - 定义各通道的具体 ON/OFF 时间点从而形成所需的脉冲宽度调制波形。 以下是部分关键参数解释及其作用: - **Mode Register**: 决定器件处于正常操作还是待机状态。 - **Prescale Value**: 影响最终输出频率大小的关键因素之一。 计算公式如下所示: \[ \text{Output Frequency} = \frac{\text{Oscillator Clock}}{(4096 * (\text{prescaler value} + 1))}] \] 其中 Oscillator Clock 默认值约为 25MHz. --- ### 示例代码展示 下面给出一段简单的 C++ 实现片段,演示如何利用 HAL 库在 STM32 上发送指令给 PCA9685 并让指定编号的伺服转动至特定角度位置: ```cpp #include "stm32f1xx_hal.h" #define PCA9685_ADDRESS 0x40 // 设备地址 #define MODE1 0x00 // 寄存器偏移量定义 #define PRESCALE_REG 0xFE void pca9685_set_pwm(uint8_t channel, uint16_t on_value, uint16_t off_value){ char data[4]; data[0]=LED0_ON_L+channel*4; data[1]=(on_value)&0xFF; data[2]=(on_value)>>8 ; data[3]=(off_value)&0xFF; data[4]=(off_value)>>8; HAL_I2C_Master_Transmit(&hi2c1,(PCA9685_ADDRESS<<1),data,sizeof(data),HAL_MAX_DELAY); } // 假设目标角为 angle(单位度数),则转换成对应的PWM周期长度(on/off time) uint16_t map_angle_to_pulse_width(float angle,float min_pw,float max_pw){ return ((max_pw-min_pw)/180)*angle+min_pw; } ``` 以上函数 `pca9685_set_pwm` 可接受三个参数分别代表要修改哪一路输出端子、开启时刻数值以及关闭时刻数值;而辅助工具型功能 `map_angle_to_pulse_width` 则负责把实际物理意义下的旋转幅度映射回电子电路层面表达形式即高低电平持续时间差值[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值