Цитата(Alex65111 @ Jan 15 2009, 17:25)

...
c1=angle(sp(45))/(2*pi*f) %вроде как ожидаемый центр импульса
...
но типа расчитанный центр не совпадает с истинным. Где заглюк?
Надо фазу разворачивать в линейную функцию при помощи unwrap.
Привожу свой пример, который работает:
%
clear; close all
t = (0:0.01:10)';
N = length(t);
f = 1.2; a = 1;
t1 = 0.0; t2 = 1.5;
tm = (t1+t2)/2; T = t2-t1;
disp( sprintf( 'Used parameters: f = %g, t1 = %g, t2 = % g, tm = %g, T = %g', f, t1, t2, tm, T ) );
TimeGate = (t >= t1 & t<= t2);
s = a * exp(1i*2*pi*f*t) .* TimeGate;
hf1 = figure('Name', 'Time signal', 'WindowStyle', 'docked');
plot(t,real(s),'.k-'); axis([t(1) t(end) -inf inf]); grid on; hold on
w = (0:N-1)'/(t(2)-t(1))/N;
S = fft(s)/N;
hf2 = figure('Name', 'Spectrum of signal', 'WindowStyle', 'docked');
subplot(2,1,1); plot(w,abs(S),'.k-'); axis([w(1) w(end) -inf inf]); grid on;
Phase = angle(S); uPhase = unwrap(Phase);
subplot(2,1,2); plot(w,Phase,'.k-'); axis([w(1) w(end) -inf inf]); grid on;
d = diff(Phase);
D = -median(d)/(w(2)-w(1))/2/pi;
disp( sprintf( 'D = %g, tm = %g', D, tm ) );
%
Но это вариант сделанный по быстрому и методически неправильный в плане определения параметров линейной регрессии.
Функция median() используется для отбора "правильных" значений наклона ФЧХ.
Сообщение отредактировал Ulysses - Jan 19 2009, 15:17