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, 知道也不能/不敢/不願發的 (付費除外)