MATLAB中心电信号的FFT处理

MATLAB中心电信号的FFT处理,matlab,frequency,Matlab,Frequency,这是输入信号: 我也试过了 fvtool(x_vals) 这给了我: 但是我想要以赫兹为单位的x轴。所以本质上我想看到这个信号的频谱,以赫兹为单位 谢谢 function [f amp] = getspectrum( Mdata, Mf ) % Mdata data % Mf sampling rate / frequency (Hz) NFFT = 2 ^ nextpow2(length(Mdata)); Y = fft(double(Mdata

这是输入信号:

我也试过了

    fvtool(x_vals)
这给了我:

但是我想要以赫兹为单位的x轴。所以本质上我想看到这个信号的频谱,以赫兹为单位

谢谢

function [f amp] = getspectrum( Mdata, Mf )

%  Mdata    data 
%  Mf       sampling rate / frequency (Hz)

NFFT = 2 ^ nextpow2(length(Mdata)); 
Y = fft(double(Mdata), NFFT) / length(Mdata);
f = (double(Mf) / 2 * linspace(0, 1, NFFT / 2))'; % Vector containing frequencies in Hz
amp = 2 * abs(Y(1:(NFFT / 2))); % Vector containing corresponding amplitudes

我希望这能有所帮助

原始信号的持续时间(秒)是多少?FFT将秒转换为
1/2pi
或rad/sec单位。为了把它转换成赫兹,你需要乘以
2*pi
。嗨,是的,当我绘制(f,amp)时,它会给我一个频谱。请简要解释一下代码好吗?“绘图(f,amp)”。。。这就是我的想法,是的。事实上,几年前我根据fft的matlab文档中的示例代码实现了这个函数:这就是我得到的结果:它有意义吗?我原以为会有50赫兹的峰值,但似乎没有太多。谢谢。感觉:这取决于你的初始采样率。我猜你在10秒内有3.6k个样本,相当于360赫兹的采样率。因此,根据老奈奎斯特的想法,你可以“表现”高达180赫兹的信号,这意味着你的情节基本上是好的。结果取决于快速傅里叶变换背后的数学和您的数据。好吧,在你的图上画一个对数,以便看到更多。。。但一个编程问答网站对于查看你们的数据来说是一个错误的地方。(无论如何,我的钱在60赫兹的峰值上。)
function [f amp] = getspectrum( Mdata, Mf )

%  Mdata    data 
%  Mf       sampling rate / frequency (Hz)

NFFT = 2 ^ nextpow2(length(Mdata)); 
Y = fft(double(Mdata), NFFT) / length(Mdata);
f = (double(Mf) / 2 * linspace(0, 1, NFFT / 2))'; % Vector containing frequencies in Hz
amp = 2 * abs(Y(1:(NFFT / 2))); % Vector containing corresponding amplitudes