Jak vypočítám fázový rozdíl mezi dvěma signály v MATLABu?


Odpověď 1:

Co je běžné na signálech, že rozdíly ve fázi by byly užitečným parametrem k prozkoumání? Předpokládám, že sledujeme fázový profil jako funkci frekvence. Jedním z příkladů, který přijde na mysl, je fázové srovnání spektra odezvy filtrových impulsů pro tři různá návrhová kritéria. Řekněte minimální fázi, lineární fázi a maximální fázi. Můžeme navrhnout filtr FIR s přesně stejnou odezvou protokolu, ale se třemi různými fázovými odezvami. Dělám to, když učím design filtrů a dávám studentům představu o tom, jaká minimální fáze je na rozdíl od lineární fáze ... maximální fáze je pro úplnost. Navrhuji filtr s nízkým průchodem pomocí algoritmu Parks McLellan (Remez) a poté složím nuly vnější kruhové jednotky zpět na vnitřní inverzní nuly, aby se vytvořil filtr s minimální fází, a přitom udělejte opak, složte vnitřní nuly zpět na vnější nuly a vytvořte maximální fázový filtr. Poté zobrazím impulsní odezvu všech tří filtrů, spektrální velikost každého z nich a nerozbalenou fázovou odezvu (zarovnané na stejnosměrný proud). jasně ukazuje, proč mají svá jména. Příklad mohu poslat každému, kdo chce matlab kód.

fred harris


Odpověď 2:

Použijte [corr.lags] = xcorr; dělat křížovou korelaci; najděte maximální index píku, [~, ix] = max (corr); delay = zpoždění (ix); To dává rozdíl mezi signály to to ve vzorcích. Převod na radiánů (nebo cokoli) na základě doby vašich signálů: IF N_sig je počet vzorků za období:

phase_deg = 2 * pi * zpoždění / N_sig; nebo 360 * zpoždění / N_sig, pokud je v deg.