【问题标题】:Plotting the phase and magnitude of a Fourier Transform of a EKG signal绘制 EKG 信号的傅立叶变换的相位和幅度
【发布时间】:2013-11-19 01:24:19
【问题描述】:

所以我有一个现有的 ekg 信号,我必须对其进行傅立叶变换,并绘制相位(角度)和幅度。我的代码如下所示:

x1 = 3.5*ecg(2700);
y1 = sgolayfilt(kron(ones(1,13),x1),0,21);
n = (1:30000)';
del = round(2700*rand(1));
mhb = y1(n+del);
ts = 0.00025;
t = [ts: ts: 7.5];
%plot(t,mhb)
%xlabel('Time(sec)')
%ylabel('Amp'); grid on 

Xf = fft(mhb(t));

w = [-(n/2):1:(n/2)-1]*(1/(ts*n));
w = [-(n/2):1:(n/2)-1]*(1/(ts*n));

subplot(211), plot(w, fftshift(abs(Xf))), grid 
subplot(212), plot(w, fftshift(angle(Xf))), grid

它告诉我这个错误:“下标索引必须是真正的正整数或逻辑。”我很确定那是正确的,除非我做的事情完全不正确。任何帮助将不胜感激。

【问题讨论】:

标签: matlab signals fft phase dn


【解决方案1】:

注意 t 是带有值的实数数组(让我们看看前几个):

>> t(1:10)

ans =

    0.0003    0.0005    0.0008    0.0010    0.0013 ... and so on

所以你的 fft 的参数是 mhb(t),但是你正在调用 mhb 的值(也是一个数组),并将 t 的值作为索引。

这会给你错误:

>> mhb(t)
Subscript indices must either be real positive integers or logicals.

所以你需要做类似的事情:

mhb(1:length(t));

这样就清楚了吗?

【讨论】:

  • 啊,是的,这确实有道理。谢谢,清除了那个错误:)
  • 这在理论上是有道理的,但由于某种原因仍然没有产生任何信号。语法有点不对劲。可能是另一个内置函数而不是长度
  • 我会回去检查你的信号,以确保你正在 FFT 中你认为你是什么,只需仔细检查你的所有输入。此外,从您的 t 值到 mhb 数组的索引可能还有一些其他映射,这可能会更复杂一些,尽管从您的设置中不清楚这可能是什么。我认为你问的原始问题已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多