我需要在两个不同频率的信号之间测量某些参数。即,滞后/相位差。
据我所知,我不能使用xcorr,因为频率不同。
如果需要,我可以附加数据。
我可以使用以下方法测量两种信号的频率:
%calculate frequencies
[maxValue1,indexMax1] = max(abs(fft(sig1-mean(sig1))));
f1 = indexMax1 * 100 / 100;
[maxValue2,indexMax2] = max(abs(fft(sig2-mean(sig2))));
f2 = indexMax2 * 100 / 100;
%which one is higher?
maxF = max (f1, f2);
如何强制/更改信号的频率与其他信号的频率相同?例如,两个信号的频率应该是maxF。
答案 0 :(得分:1)
FFT可能不是做你想做的最好的方法。如果您的两个信号中的每一个都是真正的单组分(即,它们不是多个正弦波的混合),那么使用希尔伯特变换可以获得更好的性能。希尔伯特将您的真实信号转换为复杂信号。它还允许您非常轻松地直接评估相位,频率和振幅。
%convert to complex domain
h_sig1 = hilbert(sig1);
h_sig2 = hilbert(sig2);
%plot instantaneous phase of the signals
phase_sig1_rad = angle(h_sig1); %radians
phase_sig2_rad = angle(h_sig2); %radians
dphase_rad = wrapTo2Pi(phase_sig1_rad - phase_sig2_rad);
plot([phase_sig1_rad(:) phase_sig2_rad(:) dphase_rad(:)]);
%other info: compute the frequency of the signals
dt_sec = 1/sample_rate_Hz; %what is the time between samples
freq_sig1_Hz = diff(unwrap(phase_sig1_rad))/(2*pi)/dt_sec;
freq_sig2_Hz = diff(unwrap(phase_sig2_rad))/(2*pi)/dt_sec;
%other info: compute the amplitude of the signals
amp_sig1 = abs(h_sig1);
amp_sig2 = abs(h_sig2);
希望这有帮助!