如何"enforce"一个信号在另一个信号上的频率;两个不同频率的信号

How to "enforce" the frequency of one signal on the other; two signals with different frequencies

我需要测量两个不同频率信号之间的某些参数。即,lag/phase 差异。

我知道我不能使用 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);

我怎么 enforce/change 两个信号的频率都一样?例如,两个信号的频率都应为 maxF。

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);

希望对您有所帮助!