我是matlab的新手,所以也许我的问题很愚蠢。我有两个信号rec(t)和sent(t),我想通过相位与频率实现从交叉谱中找到时间延迟。我通过rec(t)和sent(t)之间的交叉核心的FFT获得了交叉谱。这是:
time=data(15:length(data),1); %time of measurement - s
sent=data(15:length(data),2); %sent signal - mV
rec=data(15:length(data),3); %recorded signal - mV
samples=length(time); %number of samples
Fs=samples/max(time); %sampling frequency - Hz
dt=max(time)/samples; %time interval - s
freq=(0:samples/2)/samples/dt; %frequency scale for FFT
FFTrec=fft(rec); %FFT of recorded signal
FFTsent=fft(sent); %FFT of sent signal
CorrRecSent=(ifft(FFTrec.*conj(FFTsent))); %cross correlation definition
CS=fft(CorrRecSent); %cross spectrum (CS)
amp=abs(CS); %amplitude of CS
amp1=amp(1:samples/2+1); %amplitude of CS for half of the frequency spectrum
A2=angle(CS);
A1=A2(1:samples/2+1); %phase angle of (CS)
A=unwrap(A1); %unwrapped phase
plot(freq,(A));
xlabel('frequency (Hz)')
ylabel('phase (rad)')
这是情节。是否有任何命令或程序如何获得给定频率的精确相位角(用黑线标记)?或者我怎样才能找到绘制的橙色线的斜率?我选择了这个频率范围,因为我发送的信号是5 kHz,所以选择了一些东西。
感谢您的帮助。
答案 0 :(得分:0)
在图中,您将freq
设置为x轴向量,将A
设置为y轴向量。
如果你想知道橙色线的斜率,你首先需要知道4000Hz和8000Hz的指数:
f1 = find(freq==4000);
f2 = find(freq==8000);
然后你可以检查这两点的哪个阶段:
p1 = A(f1);
p2 = A(f2);
最后斜率为deltaX / deltaY:
slope = (f2-f1)/(p2-p1);