如何“强制”另一个信号的频率;两个不同频率的信号

时间:2015-08-04 18:23:20

标签: matlab signal-processing frequency similarity

我需要在两个不同频率的信号之间测量某些参数。即,滞后/相位差。

据我所知,我不能使用xcorr,因为频率不同。

数据示例: enter image description here

如果需要,我可以附加数据。

我可以使用以下方法测量两种信号的频率:

%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。

1 个答案:

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

希望这有帮助!