采樣信號濾波
什么是濾波
濾波(Wave filtering)是將信號中特定波段頻率濾除的操作,是抑制和防止干擾的一項重要措施。
它可以從含有干擾的接收信號中提取有用信號,很大程度上保證了采集到的信號的真實性和穩(wěn)定性。
正因如此,濾波算法也成了在智能車控制中不可或缺的一種控制算法。
常見的軟件濾波辦法
軟件濾波在嵌入式的數據采集和處理中有著很重要的作用。
對于電磁車來說,我們需要對采集到的賽道電磁信號進行濾波處理,這里我們介紹幾種常見的軟件濾波處理辦法。
限幅法
一般來說,每個電感在賽道上采集到的值都有一個固定的范圍。
由于電感排布方案的不同(水平電感、豎直電感或斜電感等)或不同賽道電磁信號的差別,這個范圍也會隨之變化。
這時我們可以在程序的初始化中加入一個掃描賽道的程序,在初始化程序運行時令車左右掃描。
將每個電感的最大值和最小值分別記錄入兩個一維數組中,讓其作為每個電感采集信號值的上下限(這樣也是為了提高賽車對于不同賽道的適應性)。
在后續(xù)賽車行駛過程中,便可以過濾在這個范圍之外的電感值,從而排除偶然誤差,達到軟件濾波的效果。
具體代碼如下(此處只寫一個其中電感的處理):
// 掃描賽道 //
void saomiao()
{
uint32 i;
uint16 max1=0,min1=4095;
for(i=0;i< 1000;i++)
{
LeftADC[0]=ADC_Ave(ADC0,ADC1_SE8,ADC_12bit,10);
if(LeftADC[0] >max1)
max1=LeftADC[0];
if(LeftADC[0]< min1)
min1=LeftADC[0];
}
}
// 限幅法濾波 //
void AD_value()
{
LeftADC[0]=ADC_Ave(ADC0,ADC1_SE8,ADC_12bit,10);
if(LeftADC[0] >max1)
LeftADC[0]=max1;
if(LeftADC[0]< min1)
LeftADC[0]=min1;
}
算術平均值濾波
算術平均值濾波,指的是將每個電感采集到的一組值用冒泡排序按從大到小或者從小到大的順序排布,再丟棄最大值與最小值。
取剩下數據的算術平均數,作為反饋給單片機的實時數據。這也是最常見的軟件濾波算法之一。
具體代碼如下:
void Ad_Value()
{
uint16 LeftADC[7];
int i,j,t;
for(i=0;i< 7;i++)
{
LeftADC[i]= ADC_Ave(ADC0,ADC1_SE8 ,ADC_12bit,10);
}
for(i=0;i< 6;i++)
{
for(j=0;j< 6-i;j++)
{
if(LeftADC[j] >LeftADC[j+1])
{
t=LeftADC[j+1];
LeftADC[j+1]=LeftADC[j];
LeftADC[j]=t;
}
}
}
LeftAverage[0]=(uint16)((LeftADC[1]+LeftADC[2]+LeftADC[3]+LeftADC[4]+LeftADC[5])/5.0);
}
-
嵌入式
+關注
關注
5095文章
19189瀏覽量
307977 -
濾波
+關注
關注
10文章
669瀏覽量
56787 -
控制算法
+關注
關注
4文章
167瀏覽量
21808
發(fā)布評論請先 登錄
相關推薦
幾種常見的濾波算法
濾波器設計軟件介紹
PCB設計:常見濾波電容的濾波半徑
![PCB設計:<b class='flag-5'>常見</b><b class='flag-5'>濾波</b>電容的<b class='flag-5'>濾波</b>半徑](https://file.elecfans.com/web1/M00/DB/08/o4YBAGAGPlWAVvu8AAAzorw-vC4707.png)
評論