【问题标题】:FFT of ECG signal in MATLABMATLAB中心电信号的FFT
【发布时间】:2012-12-03 20:47:17
【问题描述】:

这是输入信号:

    plot(abs(fft(ecg)))

我也试过了

    fvtool(x_vals)

这给了我:

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

谢谢!

【问题讨论】:

  • 原始信号的持续时间(秒)是多少? FFT 将秒转换为1/2pi 或弧度/秒单位。为了将其转换为 Hz,您需要乘以 2*pi

标签: matlab frequency


【解决方案1】:
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

我希望这可能会有所帮助。

【讨论】:

  • 嗨,是的,当我绘制(f,amp)它给了我一个频谱。你介意简单解释一下代码吗?
  • "plot(f,amp)" ... 就是这样,是的。
  • 其实我几年前就根据fft的matlab文档中的示例代码实现了这个功能:mathworks.de/de/help/matlab/ref/fft.html
  • 这是我得到的结果:s9.postimage.org/emsz22w0f/fft_main.jpg 有意义吗?我期待一个 50 Hz 的峰值,但似乎并不多。谢谢。
  • 感觉:这取决于您的初始采样率。我您在 10 秒内有 3.6k 个样本,这对应于 360 Hz 的采样率。所以,根据老奈奎斯特的想法,你可以“表示”最高180赫兹的信号,也就是说你的情节基本没问题。结果取决于快速傅里叶变换背后的数学和您的数据。好吧,申请例如对您的情节取对数以便查看更多信息……但是编程问答网站对于查看您的数据来说是一种错误的地方。 (无论如何,我的钱在 60 Hz 时达到峰值。)
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 2015-07-28
  • 2012-05-18
  • 2020-06-04
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多