我试图获得此信号的分量频率:
这是我的代码:
fs = 100;
x = UI_przebiegi.signals.values(:,7);
m = length(x); % Window length
n = pow2(nextpow2(m)); % Transform length
y = fft(x,n); % DFT of signal
f = (0:n-1)*(fs/n)/10; % Frequency range
p = y.*conj(y)/n; % Power of the DFT
plot(f(1:floor(n/2)),p(1:floor(n/2)))
它给了我:
怎么做?
答案 0 :(得分:0)
你的方法没有错。傅里叶变换很好,所以不要担心如其中一条评论中所建议的那样找到傅立叶级数。信号频率非常低,因此峰值几乎为DC。信号看起来大约是3pi旋转,显然是~1200(s),这意味着频率大约是1/900(Hz)。由于FT的频率分辨率为1/1200(Hz),因此信号的峰值将是来自DC的大麦一个分辨率单元。
但是有些事情让我很困惑:你为什么要把频率除以10?你是想对deca-Hertz进行策划吗?查看下面的代码是否对您没有帮助。我试图让它与你的相似,但当然必须自己制作信号。
fs = 100; % Sampling frequency of 100 (Hz).
T = 1200; % Signal duration (s).
t = 0 : 1/fs : T; % Time sample locations (s).
x = cos( 2*pi * 1/900 * t ); % Signal of iterest.
m = length(x); % Window length
n = 2*pow2(nextpow2(m)); % Transform length
y = fft(x,n); % DFT of signal
f = (0:n-1)*(fs/n); % Frequency sample locations (Hz)
p = y.*conj(y)/n; % Power of the DFT
% Now we plot the spectral power and change the x-limits
% to zoom in on where we expect the signal's energy to be.
% We also draw a line a 1/900 (Hz) for illustration.
plot(f(1:floor(n/2)), 20*log10( p(1:floor(n/2)) ) );
xlim( [ 0 3/900 ] );
line( 1/900 * [1 1], ylim(), 'color', 'k' );
您会看到信号频率的线路经过FT的峰值。我希望以上有所帮助。祝你好运。