Matlab 信号分量频率

Matlab 信号分量频率,matlab,math,fft,Matlab,Math,Fft,我试图得到这个信号的成分频率: 这是我的密码: 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;

我试图得到这个信号的成分频率:

这是我的密码:

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)))
它给了我:


怎么做?

你的方法没有错。傅里叶变换很好,所以不要担心找到其中一条评论中建议的傅里叶级数。信号的频率非常低,因此峰值几乎在直流。该信号在约1200(s)的范围内旋转约3pi,这意味着其频率约为1/900(Hz)。由于FT的频率分辨率将为1/1200(Hz),因此信号的峰值将为来自DC的一个分辨率单元

但有件事让我困惑:为什么你要把频率除以10?你是在密谋对付德卡·赫兹吗

看看我下面的代码是否对您没有帮助。我试着让它和你的一样,但当然我必须自己制作信号

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的峰值。我希望上面的内容能有所帮助。祝你好运。

你所做的是,它为你的信号提供了频谱。你得到了一个似乎正确的结果,你几乎有一个非常低频率的正弦,这就是你的图所显示的。我认为你要寻找的是答案,解释如何做到这一点的答案会更广泛一些,所以首先尝试做更多的研究。