matlab中求信號相位,有沒有什麼好的方法?

現有一很長,高採樣的正弦或者餘弦信號(從原始連續數據採樣來的離散數據),請問有什麼好方法求該信號的相位?(數據採集不一定從零點開始)

具體應用是已知電流或電壓信號(非連續),信號略有畸變,求相位。


一個簡單的辦法是構造一個沒有lag的,頻率相同的標準信號。然後做兩者的cross-correlation, 然後找出最大的Lag, 看它對應的時間點是什麼。

舉例來說

比如你有信號s2, 相位是-0.35, 那麼你可以構造一個0相位的s1

t = [0:127]*0.02;
f = 1.0;
s1 = sin(2*pi*f*t);
s2 = sin(2*pi*f*(t-0.35));

做cross-correlation

&>&> x = xcorr(s1,s2,"coeff");
&>&> tx = [-127:127]*0.02;

把s1,s2, vs t 和 x vs tx 畫出來是這樣的

x的最大值那點所對應的橫坐標(tx)就是相位差。


沒太看懂,我重新理解下題主看對不對:

求同時採樣的兩個同頻率離散信號的相位差。

說個思路:

先濾波得到乾淨的兩個正弦信號,歸一化。取其中一個或幾個時間點,代入和角公式聯立求解。再用該點導數去掉無效結果。


推薦閱讀:

山東大學電氣專業想進江蘇電網?
請教各位老師用基爾霍夫定律解這個電路?
西門子1P+N斷路器能否作為家庭總開關使用?
怎麼解決斷路器越級跳閘的問題?
為什麼不在同一個帶漏電斷路器下控制接觸器會導致跳閘?

TAG:信號 | MATLAB | 數字信號處理 | 電氣工程 |