我當然知道濾波器可以過濾某種噪聲。我只想了解過濾器如何在matlab中工作。 考慮代碼:在matlab中瞭解濾波器
[x,y] = pol2cart(0:0.01:2*pi, 1);
nx = filter(.2*(1-.3), [1 -.3], cumsum(randn(size(x))));
x=x+nx;
有些變形噪聲添加到x座標。它是如何工作的?我也沒有清楚地理解參數的解釋。 matlab文檔也沒有那麼有用。
過濾器是如何工作的?以及如何解釋不同的參數?
我當然知道濾波器可以過濾某種噪聲。我只想了解過濾器如何在matlab中工作。 考慮代碼:在matlab中瞭解濾波器
[x,y] = pol2cart(0:0.01:2*pi, 1);
nx = filter(.2*(1-.3), [1 -.3], cumsum(randn(size(x))));
x=x+nx;
有些變形噪聲添加到x座標。它是如何工作的?我也沒有清楚地理解參數的解釋。 matlab文檔也沒有那麼有用。
過濾器是如何工作的?以及如何解釋不同的參數?
FILTER一維數字濾波器。 Y = FILTER(B,A,X)用矢量A和B描述的 濾波器對向量X中的數據進行濾波,以創建經過濾的數據Y.該濾波器是「Direct Form II Transposed」標準的實現。 差分方程:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na)
也許一個過濾器的最簡單的例子是運行平均值。在這種情況下,因爲數據中的信號不是隨機的(不是不相關的),而是噪聲是隨機的(至少是白噪聲),那麼平均就會有利於衰減噪聲而有利於信號。
在你的情況下,過濾器的使用方法如下:
y = filter(scale*(1-f), [1 -f], cumsum(randn(size(t))));
這裏Y(n)是噪聲(變形),您將添加到您的信號。在這種情況下b = scale*(1-f)
,a = [1 -f]
,所以我們可以寫出
y(n) = scale*(1-f)*x(n) + f*y(n-1)
有幾件事情值得注意:
(1)cumsum(randn(size(t)))
表示隨機遊動,並且等於上述公式中的濾波器輸入x(n)
。這在下圖中以紅色標出。添加一個隨機遊走而不僅僅是噪音(用randn
產生)會導致變形,而不僅僅是噪音。
(2)scale
僅影響總和中的第一項,顧名思義最重要的是設置原始信號變形的總體幅度。
(3)f
有利於一個術語。當f
大時,第一學期的貢獻減少,第二學期的貢獻增加。減少f
的結果是增加數據的「不連續性」。因此,您可以將f
視爲平滑參數。
下面是一些實驗(紅色=隨機遊走,藍色=正弦(信號),綠色=信號+過濾隨機遊走)的結果:
另一種方法undertand的效果過濾器是考慮其頻率響應,以計算freqz
,如下:
[h,w]=freqz(b,a,10000);
從頻率響應的以下圖(頻率在橫座標,幅度縮放因子在ordinat e)對於不同的縮放和平滑參數,在低通濾波器的行爲的參數的效果變得更明確:
由於Peter針對過濾器有助於原始表達式。
我同意filter help file中的說明不容易閱讀。
要認識到的一件重要的事情是他的過濾器並不是我通常認爲的日常生活中的過濾器。它通常不用於從數據中刪除一些(壞)事物。
取而代之,它循環遍歷數據,並對每個元素及其前輩執行操作。
對於它的價值,如果您在文檔文件中單擊「算法」,您可以看到它是如何工作的。它包含一個圖形和一個寫出的傳遞函數。
總結:如果你只是想增加噪音,可能會有一個更簡單的方法。
謝謝你的答案。我不想要任何噪音。我想讓噪音看起來像變形的形狀。正如你在上面的圖中看到的那樣,如果你沿着y添加過濾器並且繪製它。如果你對這樣簡單的過濾器有完善的建議,如果你也可以分享這些過濾器,那將是非常好的。 – user2178841
這個問題似乎是題外話題,因爲它是關於數字信號處理的概念而不是實現。嘗試dsp.stackexchange.com – Dan
@丹我必須部分不同意。海報詢問matlab中的實現,即關於主題(文檔是否有用是另一個問題)。如果你刪除了「或任何地方」的話,它就成了一個關於主題的問題。 –
Matlab中的*實現*僅適用於MathWorks員工。至於對濾波器應用的理解,這仍然是一個純粹的DSP問題。 –