2013-03-14 55 views
4

我想獲得音頻信號的過零率。我試着寫這個公式的代碼:如何計算信號的過零率?

enter image description here

,但我不明白excatly整個公式。

要處理我的代碼,我按塊分割信號,我的意思是「幀阻塞」。例如,每個塊的長度是512(有512個信號樣本)。讓我說我有100塊。那麼過零率是否會爲每個區塊返回一個值?我的意思是根據公式我會有100個整個信號的值嗎?

而且我不明白w()的意思。它是用於開窗的海明?它如何計算n-m?這很可能是一個負數?

我很困惑請幫幫我嗎?

+0

這聽起來不錯更像是一個數學問題,而不是程序員的一個 – Nolonar 2013-03-14 16:52:15

+0

信號中有多少個zcr? 100或100 * 512? – Cengaver 2013-03-14 16:58:33

+0

而不是被關閉,也許這應該被移動到dsp.stackexchange.com或math.stackexchange.com或任何更合適的地方。 – 2014-03-19 18:09:44

回答

6

忘掉公式 - 當你試圖用這種方式表達時,它會變得更加複雜。

過零率是信號在給定時間段(通常爲一秒)內改變符號的次數。這就是你需要知道的一切。通常情況下,您只對速度從負向正向或反向正向變化感興趣,而不是每次標誌變化。查看從負值變爲正值的次數可以用作信號頻率的代表。

至於w(n-m)是什麼,這是一個window function。這是什麼改變了你的公式從「信號有多少次過零?到「信號在最後n個採樣中過零的次數是多少次?」。老實說,它有點讓我的眼睛越過,所以不要因爲不理解而感到難過 - 它也讓我感到困惑。對於過零率,我們將選擇一個窗口函數,使w在某個範圍內返回1,否則返回零。 (這被稱爲矩形窗口)。爲這種窗口表達這個公式的一種更好的方法是忘記「開窗」作爲一般概念,並限制西格瑪的界限(對不起,我不知道如何在SO上表達公式):

Z_n (m)= sum_ {m = xn}^0 | sign [x(m)] - sign [x(m-1)] |

如果n =您的採樣率,這會以Hz爲單位給出您的過零率。這更有意義:沒有更多的w和沒有更多的無限!你使用的源代碼可能包含了這個窗口,試圖推廣,但在這種情況下,沒有什麼可以獲得的(據我所知 - 但我什麼都不知道!)

+0

感謝您的回答。我得到了你,但我不明白在公式中w(n-m)的詭計。你可以露出它嗎? – Cengaver 2013-03-20 10:00:06

+0

我添加了對w的解釋。 – 2013-03-20 15:36:17