最近采集壓力傳感器的電壓信号,采集到的資料波動挺大的,是以采用濾波的方法進行處理一下。
因為在matlab中依靠matlab的畫圖函數很容易看到濾波後的資料圖像,進而驗證濾波效果。
是以首先将采集到的原始資料儲存到TXT文檔裡面,然後導入到matlab中,在matlab中對資料進行濾波。
在matlab中采用了三種濾波方法:1、滑動平均濾波 2、中值濾波 3、卡爾曼濾波
在對比了三種濾波之後的圖像之後,選擇了第一種滑動平均濾波的方法。在matlab中有專門的函數:smooth(變量),但是我們要用C語言實作這個功能。
我依據滑動平均濾波的原理進行了程式編寫,對于資料開始部分和結尾部分做了一些改變,得到的濾波效果還不錯,與matlab的濾波效果差異很小。
話不多說,上代碼:
#define size 6000//數組大小
#define N 12//滑動平均濾波計算平均值時所取的點數
/*上面兩句在使用下面這個函數的時候加到程式的開頭*/
void Smooth(float data[])
{
Sum1=0;
for(int j=0;j<size;j++)
{
if(j<N/2)
{
for(int k=0;k<N;k++)
{
Sum1+=data[j+k];
}
data[j]=Sum1/N;
}
else
if(j<size -N/2)
{
for(int k=0;k<N/2;k++)
{
Sum1+=(data[j+k]+data[j-k]);
}
data[j]=Sum1/N;
}
else
{
for(int k=0;k<size-j;k++)
{
Sum1+=data[j+k];
}
for(int k=0;k<(N-size+j);k++)
{
Sum1+=data[j-k];
}
data[j]=Sum1/N;
}
Sum1=0;
}
}
這是我根據我寫的滑動平均算法做了點改動,下面看看濾波效果圖

藍色的線是原始資料圖像,紅色的線是濾波之後的資料圖像
這張圖中紅色的是原始資料圖像,綠色的線是matlab自帶的smooth函數濾波之後的圖像,藍色的線是我自己用C語言寫的濾波算法濾波之後的資料圖像,都是濾波20次。
可以看出這個移動平均濾波算法能夠達到要求,并且可以和matlab中的smooth函數相比。
就講到這裡吧,如果有問題可以在評論區留言,希望能夠對大家有用,謝謝大家觀看。