此示例顯示如何使用移動平均濾波器和重採樣來隔離每小時溫度讀數的時間週期份量的影響,以及從開環電壓測量中消除不須要的線路噪聲。 該示例還顯示瞭如何使用Hampel過濾器來移除大異常值。oop
平滑是咱們如何發現數據中的重要模式,同時忽略不重要的事物(即噪音)。咱們使用過濾來執行此平滑。平滑的目標是產生緩慢的價值變化,以便更容易看到咱們數據的趨勢。ui
有時,當您檢查輸入數據時,您可能但願平滑數據以查看信號中的趨勢。在咱們的例子中,咱們在洛根機場每一個小時都有一套攝氏溫度,在2011年1月的整個月。spa
請注意,咱們能夠直觀地看到一天中的時間對溫度讀數的影響。若是您只對每個月的平常溫度變化感興趣,則每小時波動只會產生噪音,這會使平常變化難以辨別。爲了消除時間的影響,咱們如今想經過使用移動平均濾波器來平滑咱們的數據。3d
在其最簡單的形式中,長度爲N的移動平均濾波器取波形的每N個連續樣本的平均值。code
爲了對每一個數據點應用移動平均濾波器,咱們構造濾波器的係數,使每一個點的權重相等,而且對總平均值貢獻1/24。這給出了每24小時的平均溫度。blog
請注意,過濾後的輸出會延遲大約十二小時。這是由於咱們的移動平均濾波器有延遲。rem
任何長度爲N的對稱濾波器都將具備(N-1)/ 2個樣本的延遲。 get
fDelay =(length(coeff24hMA)-1)/ 2;
咱們也可使用移動平均濾波器來更好地估計一天中的時間如何影響總體溫度。爲此,首先從每小時溫度測量值中減去平滑後的數據。而後,將差別數據細分爲幾天,並獲取該月全部31天的平均值。it
deltaTempC = reshape(deltaTempC,24,31)。';
有時咱們也但願對天天溫度信號的高低變化有一個平滑變化的估計。爲此,咱們可使用該envelope
功能鏈接在24小時內檢測到的極高和低點。在這個例子中,咱們確保每一個極高和極低之間至少有16個小時。咱們還能夠經過取兩個極端之間的平均值來了解高點和低點的趨勢。class
其餘類型的移動平均濾波器不會對每一個樣本進行相同的加權
另外一個常見的過濾器遵循二項式擴展。這種類型的濾波器近似於大的n值的正常曲線。它可用於濾除小n的高頻噪聲。要找到二項式濾波器的係數,請與其自身進行卷積,而後以規定的次數迭代地對輸出進行卷積。在此示例中,使用五次總迭代。
binomialCoeff = conv(h,h); fDelay =(length(binomialCoeff)-1)/ 2;
另外一種相似於高斯擴展濾波器的濾波器是指數移動平均濾波器。這種類型的加權移動平均濾波器易於構造,而且不須要大的窗口 。
您能夠經過0到1之間的alpha參數調整指數加權移動平均濾波器。較高的alpha值將具備較少的平滑。
exponentialMA = filter(alpha,[1 alpha-1],tempC); plot(days,tempC,... days-fDelay / 24,binomialMA,...
爲了更緊密地跟蹤信號,您可使用加權移動平均濾波器,該濾波器嘗試在最小二乘意義上擬合指定數量的樣本上的指定順序的多項式。
爲方便起見,您可使用該功能sgolayfilt
實現Savitzky-Golay平滑濾波器。
cubicMA = sgolayfilt(tempC,3,7); quarticMA = sgolayfilt(tempC,4,7); quinticMA = sgolayfilt(tempC,5,9);
咱們在存在60 Hz交流電源線噪聲干擾的狀況下對模擬儀器輸入端的開環電壓進行採樣。咱們以1 kHz的採樣率對電壓進行採樣。
fs = 1000; t =(0:numel(openLoopVoltage)-1)/ fs;
讓咱們嘗試使用移動平均濾波器消除線路噪聲的影響。
若是構造一個均勻加權的移動平均濾波器,它將刪除任何相對於濾波器持續時間而言是週期性的份量。
當以1000Hz採樣時,在60Hz的完整週期中大約有1000/60 = 16.667個樣本。讓咱們嘗試「圍捕」並使用17點過濾器。這將使咱們在1000 Hz / 17 = 58.82 Hz的基頻下進行最大濾波。
請注意,雖然電壓顯着平滑,但仍然包含60 Hz的小紋波。
若是咱們從新採樣信號,咱們能夠顯着減小紋波,這樣咱們就能夠經過移動平均濾波器捕獲60 Hz信號的完整週期。
若是咱們以17 * 60 Hz = 1020 Hz從新採樣信號,咱們可使用咱們的17點移動平均濾波器來消除60 Hz線路噪聲。
移動平均線,加權移動平均線和Savitzky-Golay濾波器能夠平滑它們過濾的全部數據。然而,這可能並不老是想要的。例如,若是咱們的數據來自時鐘信號而且具備咱們不但願平滑的銳邊,該怎麼辦?到目前爲止討論的過濾器效果不佳:
移動平均線和Savitzky-Golay濾波器分別在時鐘信號邊緣附近欠校訂和過校訂。
保留邊緣但仍然平滑水平的一種簡單方法是使用中值濾波器:
許多過濾器對異常值很敏感。與中值濾波器密切相關的濾波器是Hampel濾波器。此濾波器有助於從信號中刪除異常值,而不會過分平滑數據。
因爲咱們引入的每一個尖峯只有一個樣本的持續時間,咱們可使用僅三個元素的中值濾波器來消除尖峯。
濾波器移除了尖峯,但它也刪除了原始信號的大量數據點。Hampel濾波器的工做方式相似於中值濾波器,但它只取代了至關於遠離局部中值的幾個標準誤差的值。
僅從原始信號中移除異常值。