Matlab 如何";强制执行;一个信号对另一个信号的频率;两个不同频率的信号

Matlab 如何";强制执行;一个信号对另一个信号的频率;两个不同频率的信号,matlab,signal-processing,frequency,similarity,Matlab,Signal Processing,Frequency,Similarity,我需要测量两个不同频率的信号之间的某些参数。即滞后/相位差 例如,我知道我不能使用xcorr,因为频率不同 数据示例: 如果需要,我可以附加数据 我能够使用以下方法测量两个信号的频率: %calculate frequencies [maxValue1,indexMax1] = max(abs(fft(sig1-mean(sig1)))); f1 = indexMax1 * 100 / 100; [maxValue2,indexMax2] = max(abs(fft(sig2-mean(s

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

例如,我知道我不能使用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

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

希望这有帮助

为什么振幅不应该改变?要估计相位滞后,不需要真实振幅。你说得对。如果它们改变了也没关系。你想“改变信号的频率”。。。你是一开始就产生了信号还是测量了信号?非常感谢。这是有帮助的,我不知道为什么我从来没有这样想过!你确定包裹有效吗?对于类型为“double”的输入参数,未定义函数“wrap”。我正在尝试查找函数wrap所需的工具箱-似乎找不到它!哎呀!很抱歉Matlab的内置函数是wrapTo2PI()。我编辑了上面的帖子。或者,您可以使用
angle=angle-2*pi*floor(angle/(2*pi))
wrapTo2Pi位于我没有的映射工具箱中,让我用另一种方法试试。非常感谢。别介意最后的评论,我已经成功了!谢谢只是想弄清楚相位差是多少?想象一下,如果我也想看到频率和振幅的差异。这里简单的减法行吗?