Hvordan beregner jeg faseforskellen mellem to signaler i MATLAB?


Svar 1:

Hvad er almindeligt med signalerne om, at forskelle i fase ville være en nyttig parameter til at undersøge? Jeg antager, at vi ser på faseprofilen som en funktion af frekvensen. Et eksempel, der kommer i tankerne, er fasesammenligning af spektret af filterimpulsresponser for tre forskellige designkriterier. Sig minimum fase, lineær fase og maksimal fase. Vi kan designe et FIR-filter med nøjagtigt det samme Log Magnitude-svar, men med tre forskellige fasereaktioner. Det gør jeg, når jeg underviser i filterdesign og for at give de studerende en fornemmelse af, hvilken minimumsfase er i modsætning til lineær fase ... den maksimale fase er for fuldstændighed. Jeg designer et lavpasfilter med Parks McLellan (Remez) -algoritmen og fold derefter nuller uden for enhedens cirkel tilbage på indvendige inverse nuller for at danne et minimum fasefilter, og mens det gør det modsatte, fold de indvendige nuller tilbage på de udvendige nuller for at danne maksimal fasefilter. Derefter viser jeg impulsrespons for alle tre filtre, spektralstørrelsen af ​​hver og den udpakkede faserespons (justeret ved DC). det viser tydeligt, hvorfor de har deres respektive navne. Jeg kan sende alle, der ønsker matlabkoden eksemplet.

fred harris


Svar 2:

Brug [corr.lags] = xcorr; at udføre krydskorrelation; find det maksimale topindeks, [~, ix] = max (corr); forsinkelse = forsinkelse (ix); Det giver forskellen mellem to-signalet i prøver. Konverter til radianer (eller hvad som helst) baseret på perioden for dine signaler: IF N_sig er antallet af prøver i en periode:

fase_deg = 2 * pi * forsinkelse / N_sig; eller 360 * forsinkelse / N_sig, hvis du er i deg.