如何"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);
希望对您有所帮助!
我需要测量两个不同频率信号之间的某些参数。即,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);
希望对您有所帮助!