信号的分量频率

时间:2014-11-15 21:27:30

标签: matlab math fft

我试图获得此信号的分量频率:

enter image description here

这是我的代码:

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

它给了我:

enter image description here

怎么做?

1 个答案:

答案 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的峰值。我希望以上有所帮助。祝你好运。