Как да изчисля разликата във фазата между два сигнала в MATLAB?


Отговор 1:

Какво е общото за сигналите, че разликите във фазата биха били полезен параметър за изследване? Предполагам, че разглеждаме фазовия профил като функция на честотата. Един пример, който идва на ум е фазовото сравнение на спектъра на филтърните импулсни реакции за три различни критерии на проектиране. Кажете Минимална фаза, линейна фаза и максимална фаза. Можем да проектираме FIR филтър с точно същата характеристика на Log Magnitude, но с три различни фазови реакции. Правя това, когато преподавам дизайн на филтри и да дам на учениците усещане каква е минималната фаза, а не линейна фаза ... максималната фаза е за пълнота. Проектирам нискочестотен филтър с алгоритъма Parks McLellan (Remez) и след това сгъвам нулите извън кръга на единицата обратно във вътрешните обратни нули, за да образувам минимален фазов филтър и докато в него правя обратното, сгъвам вътрешните нули обратно на външните нули, за да се образува максимален фазов филтър. След това показвам импулсна характеристика и на трите филтъра, спектралната величина на всеки от тях и неразгърнатата фазова реакция (подравнена в DC). ясно се вижда защо имат съответните им имена. Мога да изпратя всеки, който иска matlab код, пример.

Фред Харис


Отговор 2:

Използвайте [corr.lags] = xcorr; да правите кръстосана връзка; намерете максималния индекс на пика, [~, ix] = max (corr); забавяне = изоставане (ix); Това дава разликата между сигнала s в пробите. Преобразувайте в радиани (или каквото и да е) въз основа на периода на вашите сигнали: IF N_sig е броят на пробите за период:

phase_deg = 2 * pi * забавяне / N_sig; или 360 * закъснение / N_sig, ако е в градус.