c语言pca
Ⅰ 求C程序与MATLAB高手 关于PCA数据降维
你好,很高兴为你解答!
PCA的目的是用较少的维度来尽量保持原来数据的信息。其变换方式为Y=WX;X为高维输入数据,Y为低维输出数据,W为变换矩阵。新的高维数据要经过变换矩阵W变换到低维数据,在低维空间中做各种运算。
Ⅱ 请问各位高手,我要编一个c语言控制的无刷电机程序。
#include<c8051f120.h>
#define uint unsigned int
#define uchar unsigned char
uchar num1 = 0;
uint v_set = 40;
xdata uint pcacap2;
xdata uchar tycycle;
uint A=10;//float D=0.04;float C=5;
//int xdata e0=0,e1=0,e2=0;
float xdata PWM=0;
bit isnewdata;
bit DIRECTON;
#define POSITIVE DIRECTON = 1
#define NEGATIVE DIRECTON = 0
void Oscillator_Init()
{
SFRPAGE = CONFIG_PAGE;
OSCICN = 0x83;
}
void Port_IO_Init()
{
SFRPAGE = 0x0F;
XBR0 = 0xF7;
XBR2 = 0x40;
}
void PCA_Init()
{
SFRPAGE=0x00;
PCA0CPM0=0x02;
PCA0CPM1=0x02;
PCA0CPM2=0x21;
PCA0CPL2=0x00;
PCA0CPH2=0x00;
PCA0MD=0x00;
PCA0CN=0x40;
EIE1|=0x08;
}
void PWM_set(uchar low)
{//占空比设置,高电平占空比为(256-low)/256
SFRPAGE = PCA0_PAGE;
if (DIRECTON == 1) {PCA0CPH0 = low;PCA0CPM1 = 0x02;PCA0CPM0 = 0x42;}
else {PCA0CPH1 = low;PCA0CPM0 = 0x02;PCA0CPM1 = 0x42;}
}
void PCA_ISR(void) interrupt 9 using 1 {
static xdata uint tmpcnt=0;
static xdata uint PCA0CP2=0;
xdata uint tmpcnt2;
if(CCF2){
tmpcnt2 = PCA0CPH2;
tmpcnt2 = tmpcnt2<<8;
PCA0CP2 = tmpcnt2 + PCA0CPL2;
pcacap2 = PCA0CP2-tmpcnt;
tmpcnt = PCA0CP2;
CCF2=0;
}
}
PID_SC(uint v)
{
int Uk_z;int e;
e = v - v_set;
//e1 = v1 - v_set;
//e2 = v2 - v_set;
//v2 = v1;
//v1 = v;
Uk_z = A*e;/*+ D*e0 + C*(e0 - 2*e1 + e2);*/
//Uk0 = Uk1 + Uk_z;
//Uk1 = Uk0;
//PWM = PWM - 256;
tycycle = 0.0256 * Uk_z;
}
void main()
{
//Oscillator_Init();
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
Port_IO_Init();
EA=1;
num1=0;
isnewdata=0;
PCA_Init();
POSITIVE;
while(1){PID_SC(pcacap2);PWM_set(tycycle);}
}
Ⅲ 关于毕设急求!!我做的是PCA人脸识别,用C编。我看好多例子都是要用OPENCV 不用可以么
可以自己写 但是opencv有现成的函数 为什么不用?
Ⅳ c语言中 PCAOMD &=~0x40什么意思中的&有什么作用,什么意思呀
PCAOMD &= ~0x40表示将变量PCAOMD的值与0x40按位取反后的值进行与运算后,再赋值给变量PCAOMD。
PCAOMD &= ~0x40等价于PCAOMD = PCAOMD & 0xBF (0xBF(二进制为10111111)等价于~0x40),也即就是将变量PCAOMD的次高位变为0,其余位不变。
举例说明如下:
int PCAOMD =0x75;
PCAOMD &= ~0x40;
printf("%x", PCAOMD); // 以16进制形式输出PCAOMD的值,输出结果为35(0x前缀没输出)
Ⅳ 怎样应用PCA9665,最好有51单片机C代码例程,中文的说明下载不到,我E文不好。
电路做好了吗
原理图发给我
就可以i写了
Ⅵ 跪求一个 用stc12c系列 pca发送40khz 单片机 定时捕捉回波 的超声波测距 c语言程序
超声波的话我用的是X宝上的潮汕波模块,这里我写了一个超声波的头文件 我传给你好了,还有头文件上说明,应该能看懂的
传不来 文件 直接发给你好了。
/*
头文件说明:
本头文件有三个可以调用的函数
1.串口的初始化函数 UESC_UART_Init(uint band)
1)参数是设定的波特率,晶振是12MHz,建议设置为2400.
2)注意初始化后要简短延时。
2. UESC_UART_Putchar(char kkk)
该函数可以向上位机发送一个字节的数据,参数就是要发送的数据。
本函数是用到了中断,这样程序在接收数据的时候可以运行其他程序。
单片机通过串口接收到数据之后将8位的数据放在 date 的外部变量中,所以在主函数里可以直接操作接收来的变量;
接收到数据后同时会将外部变量flag置位,以适应不同的应用场合。
注意: 使用到串口是 定时器1不能使用。
发送单个字符的时候记得加 ‘’ 将字符括起来。
记得将flag置一;
第二次修改的内容:
给初始化函数加了晶振的选择,传递的参数就是晶振的频率 12M的晶振就传递12
注意:该函数在12M 24M 24.576M测试搜通过。 但是11.0592死活不成功,不要问为什么,搞得好像我知道似的!
建议在调用之前建议先测试一下该晶振频率能否通过。
第二次修改的内容:
解决了部分晶振频率串口通信失败的问题,现在所有的晶振均测试通过。
同时加了字符串输出函数:UART_PutString(char *s) 参数就是要显示的字符串,记得用“”。
作者@Jack_kk
完成日期:2014_4_14
第一次修改时间:2014_5_13
第二次修改时间:2014_5_18
第三次修改时间:2014_5_19
*/
#include<reg51.h>
#include<stdio.h>
#include"UART.h"
char get_char;
bit flag;
unsigned char date;
void UESC_UART_Init(uint band,double MHz)
{
TMOD|=0x20;
TH1=256-(double)(MHz*2604)/band;
TL1=TH1;
SM0=0; //和下面的一条语句同时设定串口工作方式
SM1=1;
REN=1; //允许串口接收
EA=1; //总中断
TR1=1; //定时器开始
ES=1; //开串口中断
}
void UESC_UART_Putchar(char kkk)
{
ES=0;
SBUF=kkk;
while(!TI);
TI=0;
ES=1;
}
void UART_PutString(char *s)
{
while(*s)
{
UESC_UART_Putchar(*s++);
}
}
/*
void UESC_UART_Getchar(void) //这个部分注释掉是因为 没有用到中断。
{
ES=0; //发送数据之前把串口关闭
// TI=1; //这里是发送一个字符串printf的用法,先关闭窗口中断,然后TI 好就是这样、
// puts(" Please input a letter");
// TI=0;
while(!RI);
RI=0;
get_char=SBUF;
// TI=1;
// printf("The letter you just input is ");
// TI=0;
SBUF=get_char;
while(!TI);
TI=0;
ES=1;
}
*/
错了,那是串口头文件 sorry
/*
********************头文件说明**********************
本头文件适用于HC-HR04超声波模块
经封装本头文件可以直接调用的函数是:
1.Ultrasound_Init();
初始化定时器0;
2.Get_time();
取得距离函数,返回值是距离,单位厘米,声速是240m/s时的测量结果。
示例:
Ultrasound_Init();
while(1)
{
dis=Get_time();
display(dis);
}
注意:
1.本头文件占用了定时器0,在主函数里面就不要在使用定时器0了;
2.调用本头文件之前记得修改IO口;
3.测量周期建议在60ms以上。
作者@Jack_kk
时间:2014_5_14
*/
#include"Ultrasound.h"
#include<intrins.h>
#include<reg51.h>
sbit Echo=P3^2;
sbit Trig=P1^0;
void Delay15us() //@12.000MHz
{
unsigned char i;
i = 42;
while (--i);
}
void Ultrasound_Init()
{
TMOD|=0x09;
TH0=TL0=0;
ET0=1;
TR0=1;
EA=1;
}
unsigned int Get_dis()
{
int timeout=20000;
Trig=1;
Delay15us();
Trig=0;
while(!Echo&timeout)
timeout--;
timeout=20000;
while(Echo&timeout)
timeout--;
timeout=TH0*256+TL0; //这里偷了一点懒,将变量防死机变量timeout作为了返回值
TH0=TL0=0;
return timeout*0.024;
}
Ⅶ PCA主成分分析中,假设是有C类,总样本数为N,总体离散度矩阵的秩为什么通常是N-1
(1)第一步计算矩阵 X 的样本的协方差矩阵 S :
(2)第二步计算协方差矩阵S的本征向量 e1,e2,…,eN的本征值λi,i = 1,2,…,N 。本征值按大到小排序:λ1>λ2......>λN ;
(3)第三步投影数据到本征矢张成的空间之中,这些本征矢相应的本征值为λ1、λ2、 λ3。现在数据可以在三维空间中展示为云状的点集。
对于 PCA ,确定新变量的个数 r 是一个两难的问题。我们的目标是减小 r ,如果 r 小,则数据的维数低,便于分析,同时也降低了噪声,但可能丢失一些有用的信息。究竟如何确定 r 呢?这需要进一步分析每个主元素对信息的贡献。
Ⅷ 求指教PCA9633按键调光的C语言主程序
你好!你有没有解决了PCA9633调光程序吗?能不能共享呢?
Ⅸ 求:基于PCA的人脸识别,C语言的代码!
同意dannie0624, 知道也不能/不敢/不愿发的 (付费除外)