也就是數(shù)組下標(biāo),存儲(chǔ)數(shù)組下標(biāo)而直接不存儲(chǔ)數(shù)據(jù)本身是因?yàn)椋涸谝话愕?/font>
系統(tǒng)中,n不會(huì)超無符號(hào)短整形的表示范圍,因此用一個(gè)char形變量就可以存儲(chǔ)了
而如果直接存儲(chǔ)數(shù)據(jù)本身,則許多情況下要用int形變量,甚至更長(zhǎng)的類型)。這樣
只要在當(dāng)前輸入的數(shù)據(jù)將要覆蓋的數(shù)據(jù)正好是當(dāng)前的最大值或最小值時(shí)才在下個(gè)數(shù)
組中查找最大值或最小值,而其他情況下則只要將輸入的數(shù)據(jù)與最大值和最小值比較
就可以修改下最大值和最小值了,而且不用進(jìn)行數(shù)據(jù)排序。
這個(gè)算法很簡(jiǎn)單,下面是對(duì)應(yīng)的C語(yǔ)言代碼實(shí)現(xiàn),可以很方便的應(yīng)用的具體的51單片機(jī),
或其他處理器上,只須做少量的修改。
#i nclude"stdio.h"
#define dtype unsigned int // 采集數(shù)據(jù)的數(shù)據(jù)類型
#define uint8 char
#define LEN 6 //移動(dòng)算術(shù)平均的個(gè)數(shù)+2=SHIFT<<2+2
#define SHIFT 2 //2^SHIFT
uint8 pdata; //移動(dòng)指針
uint8 pmax,pmin; //記錄數(shù)據(jù)表中最大值和最小值的位置,
//在一般的數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)的長(zhǎng)度>=8,
//因此用指針記錄而不是直接記錄最大值和最小值
dtype datas[LEN];
dtype szlb(dtype _data)
{
/****************************/
/* 在調(diào)用此子程序前必須對(duì) */
/* pdata,datas[]數(shù)組, */
/* pmax,pmin進(jìn)行初始化 */
/****************************/
uint8 i;
dtype average=0; //清零,用來計(jì)算平均值
pdata=(pdata+1)%LEN; //指針下標(biāo)在0到LEN-1上滑動(dòng)
datas[pdata]=_data; //采樣所得數(shù)據(jù)存入數(shù)據(jù)表中
for(i=0;i<LEN;i++)
average+=datas; //求所有數(shù)據(jù)總和
/*******去除被認(rèn)為是脈沖的數(shù)據(jù)******/
if(_data>datas[pmax])
pmax=pdata; //得到最大值的指針
else if(_data<datas[pmin])
pmin=pdata; //得到最小值的指針
if(pdata==pmax) //如果當(dāng)前輸入值將存入當(dāng)前最大值的位置時(shí)
{ //由以上方法將不可行,必須從其他位置中查找極值
for(i=0;i<LEN;i++)
if(datas>datas[pmax])
pmax=i;
}
else if(pdata==pmin)//如果當(dāng)前輸入值將存入當(dāng)前最大值的位置時(shí)
{ //由以上方法將不可行,必須從其他位置中查找極值
for(i=0;i<LEN;i++)
if(datas<datas[pmin])
pmin=i;
}
average=average-datas[pmax]-datas[pmin];//減去脈沖
return (average>>SHIFT); //求算術(shù)平均值
}
/******以下是在VC++6.0環(huán)境下運(yùn)行的測(cè)試程序**/
/***通過手動(dòng)輸入來模擬數(shù)據(jù)采集過程****/
void main()
{
uint8 i;
dtype _data;
pdata=0;
pmax=0;
pmin=0;
for(i=0;i<LEN;i++)
datas=0;
printf("數(shù)據(jù): 最大 最小\n");
while(1)
{
scanf("%u",&_data);
szlb(_data);
for(i=0;i<LEN;i++)
printf("%-3u ",datas);
printf(" %-3u %-3u",datas[pmax],datas[pmin]);
printf("\n");
}
}
算術(shù)平均濾波
所謂算術(shù)平均濾波就是把n個(gè)采樣值相加,然后取其算術(shù)平均值作為本次有效的采樣信號(hào)
PUSH PSW ;現(xiàn)場(chǎng)保護(hù)
PUSH A
MOV FLAG,#00H ;進(jìn)位位清零
MOV R0,DATA ;設(shè)置數(shù)據(jù)存儲(chǔ)區(qū)首址
MOV R7,#08H ;設(shè)置采樣數(shù)據(jù)個(gè)數(shù)
CLR A ;清累加器
LOOP: ADD A,@R0 ;兩數(shù)相加
JNC NEXT ;無進(jìn)位,轉(zhuǎn)NEXT
INC FLAG ;有進(jìn)位,進(jìn)位位加1
NEXT: INC R0 ;數(shù)據(jù)指針加1
DJNZ R7, LOOP ;未加完,繼續(xù)加
MOV R7,#03H ;設(shè)置循環(huán)次數(shù)
DIVIDE: MOV TEMP,A ;保存累加器中的內(nèi)容
MOV A,FLAG ;累加結(jié)果除2
CLR C
RRC A
MOV FLAG,A
MOV A,TEMP
RRC A
DJNZ R7,DIVIDE ;未結(jié)束,繼續(xù)執(zhí)行
MOV SAMP,A ;保存結(jié)果至SAMP中
POP A ;恢復(fù)現(xiàn)場(chǎng)
POP PSW
RET
限幅濾波程序
設(shè)在順序采樣時(shí)刻T1、T2、T3所采集的數(shù)據(jù)分別為Y1、Y2、Y3,則當(dāng)
∣Y2-Y1∣≤△y,則Y2作為采樣值;
∣Y2-Y1∣>△y, 則保留Y2,但不作為采樣值,繼續(xù)采樣得Y3;
如果∣Y3-Y2∣≤△y,則Y3作為采樣值;
∣Y3-Y2∣>△y, 則取作為采樣值。
程序
PUSH PSW ;保護(hù)現(xiàn)場(chǎng)
PUSH A
CLR C ;進(jìn)位標(biāo)志位清零
MOV DATA,DATA2
MOV A,DATA1
SUBB A,DATA ;求Yn-1 -Yn
JNC COMPARE ;如果Yn-1 -Yn≥0,轉(zhuǎn)COMPARE
CPL A ;如果Yn-1 -Yn<0, 求補(bǔ)
INC A
COMPARE: CLR C
SUBB A,LIMIT ;│Yn-Yn-1│和△y比較
JC OVER ;如果│Yn-Yn-1│≤△y,DATA2→DATA
MOV DATA,DATA1 ;如果│Yn-Yn-1│>△y,DATA1→DATA
OVER: POP A ;恢復(fù)現(xiàn)場(chǎng)
POP PSW
RET ;返回
如何選用濾波電容
濾波電容在開關(guān)電源中起著非常重要的作用,如何正確選擇濾波電容,尤其是輸出濾
波電容的選擇則是每個(gè)工程技術(shù)人員都十分關(guān)心的問題。50Hz工頻電路中使用的普通電解
電容器,其脈動(dòng)電壓頻率僅為100Hz,充放電時(shí)間是毫秒數(shù)量級(jí)。
為獲得更小的脈動(dòng)系數(shù),所需的電容量高達(dá)數(shù)十萬μF,因此普通低頻鋁電解電容器的
目標(biāo)是以提高電容量為主,電容器的電容量、損耗角正切值以及漏電流是鑒別其優(yōu)劣的主
要參數(shù)。而開關(guān)電源中的輸出濾波電解電容器,其鋸齒波電壓頻率高達(dá)數(shù)十kHz,甚至是數(shù)
十MHz,這時(shí)電容量并不是其主要指標(biāo),衡量高頻鋁電解電容優(yōu)劣的標(biāo)準(zhǔn)是“阻抗-頻率”
特性,要求在開關(guān)電源的工作頻率內(nèi)要有較低的等效阻抗,同時(shí)對(duì)于半導(dǎo)體器件工作時(shí)產(chǎn)
生的高頻尖峰信號(hào)具有良好的濾波作用。
普通的低頻電解電容器在10kHz左右便開始呈現(xiàn)感性,無法滿足開關(guān)電源的使用要求。
而開關(guān)電源專用的高頻鋁電解電容器有四個(gè)端子,正極鋁片的兩端分別引出作為電容器的
正極,負(fù)極鋁片的兩端也分別引出作為負(fù)極。電流從四端電容的一個(gè)正端流入,經(jīng)過電容
內(nèi)部,再?gòu)牧硪粋€(gè)正端流向負(fù)載;從負(fù)載返回的電流也從電容的一個(gè)負(fù)端流入,再?gòu)牧硪?/font>
個(gè)負(fù)端流向電源負(fù)端。由于四端電容具有良好的高頻特性,為減小電壓的脈動(dòng)分量以及抑
制開關(guān)尖峰噪聲提供了極為有利的手段。高頻鋁電解電容器還有多芯的形式,即將鋁箔分
成較短的若干段,用多引出片并聯(lián)連接以減小容抗中的阻抗成份。并且采用低電阻率的材
料作為引出端子,提高了電容器承受大電流的能力。