均值濾波也稱(chēng)為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個(gè)像素值,即對(duì)待處理的當(dāng)前像素點(diǎn)(x,y),選擇一個(gè)模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當(dāng)前像素點(diǎn)(x,y),作為處理后圖像在該點(diǎn)上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m為該模板中包含當(dāng)前像素在內(nèi)的像素總個(gè)數(shù)。
這本是數(shù)字圖像處理的一種方法,但也可以用在我們數(shù)字電壓電流表的ADC采樣數(shù)據(jù)上。我們選取二十次的ADC采樣值存儲(chǔ)在數(shù)組 Volt_Buffer 中,然后去除掉數(shù)組中的最大值和最小值后再取平均,得到的值作為結(jié)果顯示在數(shù)碼管上,這樣可以較大程度獲得準(zhǔn)確的、不易波動(dòng)的數(shù)據(jù)。
程序在實(shí)驗(yàn)五的基礎(chǔ)上略作修改即可,首先是增加和修改變量:
#define ADC_SAMPLE_SIZE (20) //規(guī)定采樣20個(gè)數(shù)據(jù)用來(lái)濾波 uint16_t Volt_Buffer[ADC_SAMPLE_SIZE]; //存儲(chǔ)ADC轉(zhuǎn)換值 uint32_t Led_Dis_Time; //計(jì)數(shù),300ms改變一次數(shù)碼管顯示值
接下來(lái)是均值濾波的主體函數(shù):
uint32_t Mean_Value_Filter(uint16_t *value, uint32_t size) //均值濾波 { uint32_t sum = 0; //ADC采樣數(shù)據(jù)和 uint16_t max = 0; uint16_t min = 0xffff; //min初值取最大是為了將第一個(gè)數(shù)據(jù)記錄 int i; for(i = 0; i < size; i++) { sum += value[i]; if(value[i] > max) { max = value[i]; } if(value[i] < min) { min = value[i]; } } sum -= max + min; //去除最大最小值 sum = sum / (size - 2); return sum; }
對(duì)之前的電壓計(jì)算函數(shù) Volt_Cal() 修改如下:
void Volt_Cal(void) { Cal_Buffer = Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE); Cal_Buffer = (Cal_Buffer * ADC_REF_VALUE >> 12) * (R2 + R1)/R1; // 四舍五入 if(Cal_Buffer % 10 >= 5) { Cal_Buffer = Cal_Buffer / 10 + 1; } else { Cal_Buffer = Cal_Buffer / 10; } }
在主函數(shù)的 while 循環(huán)里每隔300ms刷新一次:
while(1) { if(GetTick() >= (Led_Dis_Time + 300)) { Led_Dis_Time = GetTick(); Volt_Cal(); Display(Cal_Buffer); } }
在之前未加濾波函數(shù)時(shí),數(shù)碼管上顯示的電壓數(shù)據(jù)是不穩(wěn)定、跳變的,而加了濾波函數(shù)之后,數(shù)碼管顯示的電壓數(shù)據(jù)可以穩(wěn)定下來(lái),并且有一定的抗干擾能力。至于電壓準(zhǔn)確性的問(wèn)題,在后續(xù)章節(jié)的數(shù)據(jù)標(biāo)定和校準(zhǔn)中說(shuō)明。
審核編輯:劉清
-
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1887瀏覽量
91691 -
均值濾波
+關(guān)注
關(guān)注
0文章
10瀏覽量
7152 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
12978 -
電壓電流表
+關(guān)注
關(guān)注
0文章
25瀏覽量
2120
原文標(biāo)題:CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)七:基本數(shù)據(jù)處理算法(均值濾波)
文章出處:【微信號(hào):武漢芯源半導(dǎo)體,微信公眾號(hào):武漢芯源半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
CW32數(shù)字電壓電流表-產(chǎn)品硬件設(shè)計(jì)要點(diǎn)

CW32數(shù)字電壓電流表軟件教程(一):LED原理與驅(qū)動(dòng)基礎(chǔ)知識(shí)詳解

如何去使用數(shù)字信號(hào)處理算法
智能電壓電流表的工作原理及功能
CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)四:數(shù)碼管動(dòng)態(tài)顯示

CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)五:ADC采樣及顯示

CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)七:基本數(shù)據(jù)處理算法(均值濾波)
CW32數(shù)字電壓電流表軟件進(jìn)階教程-1.電壓電流同時(shí)顯示

CW32數(shù)字電壓電流表軟件進(jìn)階教程-2.電壓電流值做均值濾波
CW32數(shù)字電壓電流表軟件進(jìn)階教程-3.電壓電流標(biāo)定

基于CW32F003E4P7的數(shù)字電壓電流表產(chǎn)品方案

評(píng)論