均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當(dāng)前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當(dāng)前像素點(x,y),作為處理后圖像在該點上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m為該模板中包含當(dāng)前像素在內(nèi)的像素總個數(shù)。這本是數(shù)字圖像處理的一種方法,但也可以用在我們數(shù)字電壓電流表的ADC采樣數(shù)據(jù)上。我們選取二十次的ADC采樣值存儲在數(shù)組 Volt_Buffer 中,然后去除掉數(shù)組中的最大值和最小值后再取平均,得到的值作為結(jié)果顯示在數(shù)碼管上,這樣可以較大程度獲得準(zhǔn)確的、不易波動的數(shù)據(jù)。程序在實驗五的基礎(chǔ)上略作修改即可,首先是增加和修改變量:
#define ADC_SAMPLE_SIZE (20) //規(guī)定采樣20個數(shù)據(jù)用來濾波 uint16_t Volt_Buffer[ADC_SAMPLE_SIZE]; //存儲ADC轉(zhuǎn)換值 uint32_t Led_Dis_Time; //計數(shù),300ms改變一次數(shù)碼管顯示值
接下來是均值濾波的主體函數(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初值取最大是為了將第一個數(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; }
對之前的電壓計算函數(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ù)據(jù)是不穩(wěn)定、跳變的,而加了濾波函數(shù)之后,數(shù)碼管顯示的電壓數(shù)據(jù)可以穩(wěn)定下來,并且有一定的抗干擾能力。至于電壓準(zhǔn)確性的問題,在后續(xù)章節(jié)的數(shù)據(jù)標(biāo)定和校準(zhǔn)中說明。
審核編輯 黃宇
-
數(shù)據(jù)處理
+關(guān)注
關(guān)注
0文章
610瀏覽量
28599 -
濾波算法
+關(guān)注
關(guān)注
2文章
89瀏覽量
13755 -
均值濾波
+關(guān)注
關(guān)注
0文章
10瀏覽量
7132 -
電壓電流表
+關(guān)注
關(guān)注
0文章
25瀏覽量
2087 -
CW32
+關(guān)注
關(guān)注
1文章
210瀏覽量
699
發(fā)布評論請先 登錄
相關(guān)推薦
CW32數(shù)字電壓電流表-產(chǎn)品硬件設(shè)計要點
![<b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b>-產(chǎn)品硬件設(shè)計要點](https://file1.elecfans.com/web2/M00/D9/6F/wKgZomYqBCCAM04iAACwV739oUA312.png)
CW32數(shù)字電壓電流表軟件教程(一):LED原理與驅(qū)動基礎(chǔ)知識詳解
![<b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>(一):LED原理與驅(qū)動基礎(chǔ)知識詳解](https://file1.elecfans.com/web2/M00/E1/82/wKgaomY4i_iAMHZlAAChlnbfG4w608.png)
如何去使用數(shù)字信號處理算法
智能電壓電流表的工作原理及功能
CW32數(shù)字電壓電流表軟件教程(七):基本數(shù)據(jù)處理算法(均值濾波)
CW32數(shù)字電壓電流表軟件教程-實驗四:數(shù)碼管動態(tài)顯示
![<b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-<b class='flag-5'>實驗</b>四:數(shù)碼管動態(tài)顯示](https://file1.elecfans.com//web2/M00/EA/A2/wKgZomZZeweAfBHCAAAWnqqL7aI96.webp)
CW32數(shù)字電壓電流表軟件教程-實驗五:ADC采樣及顯示
![<b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-<b class='flag-5'>實驗</b>五:ADC采樣及顯示](https://file1.elecfans.com//web2/M00/EA/A2/wKgZomZZfBKAEBhPAAAwmCXNLXg48.webp)
CW32數(shù)字電壓電流表軟件進階教程-2.電壓電流值做均值濾波
CW32數(shù)字電壓電流表軟件進階教程-3.電壓電流標(biāo)定
![<b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件</b>進階教程-3.<b class='flag-5'>電壓電流</b>標(biāo)定](https://file1.elecfans.com//web2/M00/EA/A6/wKgZomZZiGGATNseAAAMZi3WpOk52.webp)
基于CW32F003E4P7的數(shù)字電壓電流表產(chǎn)品方案
![基于<b class='flag-5'>CW</b>32F003E4P7的<b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b>產(chǎn)品方案](https://file1.elecfans.com//web2/M00/F2/57/wKgZomZ5HSaAP1rzAAFWzm_XVTQ10.webp)
評論