簡體   English   中英

從嘈雜的1d周期性信號中檢索相位

[英]retrieve a phase from a noisy 1d periodic signal

我在給定的網格上有一個周期性的信號,說:

t = 1:30;
omega = 2*pi/18.431;
phi = -pi+2*pi*rand(1);   % a random phase [-pi,pi]
x = sin(omega*t+phi);     % the signal
x = x+0.5*rand(1,length(x)); % add some noise

在此處輸入圖片說明

現在,我要檢索相位phi 有幾種方法可以解決這個問題,例如,使之適合於sin ,但是如果我需要做1e6次(除非有並行的方法?),這花費的時間太長了。 另一個是使用fft 問題在於我的網格不夠好,無法精確選擇該頻率,因此與之相關的相位(我無法更改)。 我如何設法通過其他方式達到該階段? (以及如何估計相位檢索中的誤差?我希望跟蹤噪聲太大而無法正確估計,並且我想知道那種情況下的相位誤差)

FT只是信號與余弦和正弦波的相關性,其結果給出了相位和幅度。 無需對整個信號進行傅立葉變換,只需計算您感興趣的頻率即可。

至於准確性-信號越長,您的檢查頻率與相鄰頻率的“區別”就越大,因此我不確定如果沒有更長的樣本長度,使用這種方法可以獲得更高的准確性。

編輯:

還沒有Matlab,所以要在Python中進行此操作(我試圖使其與Matlab相似):

from numpy import arange, pi, cos, dot, exp, angle
from numpy.random import rand

N = 1  # Number of cycles
t = arange(30 * N) + 1  # [1, 2 ... 30 * N]
omega = 2 * pi / 18.431
phi = -pi + 2 * pi * rand(1)[0]
x = cos(omega * t + phi)
x = x + 0.5 * rand(len(x))

coeff = dot(x, exp(-1j * omega * t))
phase = angle(coeff)

print "Actual phase:", phi
print "Calculated phase:", phase

即使在一個周期內,這也能提供相當好的結果。 有時,計算出的相位是2*pi ,這並不意味着給出了錯誤的答案,但是在后續計算中需要牢記。

增加周期數N會始終產生良好的結果,但這顯然會增加計算時間,因此您可能想嘗試一下它,並在速度與精度之間做出折衷(取決於您的應用程序)。

希望這可以幫助!

您可以嘗試搜索局部最小值/最大值以獲取相位和頻率。

編輯

如果您知道頻率,則可以對信號進行歸一化,先與cos相乘,然后與sin相乘並積分。 如果信號顯示為A,則直接獲得A和B

A*sin(x) +B*cos(x) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM