1

所以我有一个现有的 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

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

4

1 回答 1

0

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

>> t(1:10)

ans =

    0.0003    0.0005    0.0008    0.0010    0.0013 ... and so on

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

这会给你错误:

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

因此,您需要执行以下操作:

mhb(1:length(t));

这能把事情弄清楚吗?

于 2013-11-19T01:40:30.590 回答