0
我想找到信號窗口上的瞬時頻率。我正在採集信號的一小部分,並試圖找到該窗口中的瞬時頻率。但該頻率與信號的實際頻率不匹配。以下是我的代碼。查找瞬時頻率
close all; clear all; clc
fs = 25000;
T = 0.5;
t = 0:1/fs:T;
n = length(t);
m = floor(n/4);
f1 = 100;
z1 = cos(2*pi*f1*t(1:m));
f1 = 200;
z2 = cos(2*pi*f1*t(1:m));
f1 = 300;
z3 = cos(2*pi*f1*t(1:m));
f1 = 400;
z4 = cos(2*pi*f1*t(1:(n-3*m)));
z = [z1 z2 z3 z4];
window = 100;
wStart = 1;
wEnd = wStart + window;
freqs = [];
while wEnd < length(z)
x = z(wStart:wEnd);
y = t(wStart:wEnd);
h=hilbert(x);
unrolled_phase = unwrap(angle(h));
dx = diff(unrolled_phase);
dy = diff(y);
p = dx./dy;
inst_freq = p/(2*pi) + 2*pi;
freqs = [freqs inst_freq];
wStart = wEnd;
wEnd = wStart + window;
end
「freqs」的情節是這樣的:
我覺得有什麼不對的,我計算頻率,但我不知道的方式。任何人都可以幫忙嗎?我需要從代碼中看出,頻率只有100,200,300和400。我想要做的就是找到每個頻率的起始點(時間)
您的hilbert功能不能正常工作,您認爲它應該可以正常工作。嘗試使用較低的採樣率(可能爲801 Hz)並使用平均濾波器對結果進行平滑 –
希爾伯特變換不能正常工作的原因以及您希望當正弦波的希爾伯特變換具有恆定的幅度和恆定相位時改變,這個信號由正弦分段組成,所以在希爾伯特變換中存在瞬變。 –