Вейвлет-разложение и реконструкция ЭКГ-сигнала без встроенных функций - PullRequest
0 голосов
/ 11 октября 2018

Я сделал 1-D DWT-разложение и рассчитал каждый коэффициент энергии и общую энергию.Я должен выполнить DWT, используя скользящее окно и учитывая двоичную длину 256. Оконное окно должно быть для каждых 250 мс данных. Я получаю сообщение об ошибке как: Индексы нижнего индекса должны быть либо действительными положительными целыми числами, либо логическими.

Ошибка в вейвлете (строка 41) x2 (1i) = Ya (k)

Я делюсь своим кодом здесь для вашего удобства.Любое предложение о том, идет ли он правильно?

clc;
data= importdata('215_5.txt');
x = data(:, 1);
y = data(:, 2);
plot(x, y, 'b-', 'LineWidth', 2);
N= length(y);
FreqS=360;  %sampling frequency
nyqfreq=FreqS/2;  %nyquist frequency
fft_signal= abs(fft(y));
figure(1); %plot single sided magnitude spectrum
x1=0:1/(N/2-1):1;
y1=fft_signal(1:N/2);
p1=line(x1,y1);
grid on;
ax1=gca; %current axis
axis([0 1 0 1]);
xlabel('Normalised frequency[\pi rads/sample]');
ylabel('magnitude');
fc=70;
fs=1000;
[b, a]= butter(4,fc/(fs/2));
H= freqz(b,a,N/2);
hold on;
x2=linspace(0,nyqfreq,100);
y2=abs(H);
ax1_pos = ax1.Position;
ax2 = axes('Position',ax1_pos,'XAxisLocation','top','YAxisLocation','right','Color','none');
ax2.XLabel.String = 'Frequency [Hz]';
title('Magnitude spectrum of signal and frequency response of filter');
x_filtered = filter(b,a,y);
hold off;
[Xa,Ya]= alignsignals(y,x_filtered);

V=[];
n= length (x_filtered);
n1= n/256;
%%wavelet decomposition
for i= 1:1:n1

    k=(i-1)+1i;
    x2(1i)=Ya(k);
    [c,l]=wavedec(x2,5,'db4');
    [cd1,cd2,cd3,cd4,cd5] = detcoef(c,l,[1 2 3 4 5]);
    A=appcoef(c,l,'db4');
    V1=[V;cd1];
    V2=[V;cd2];
    V3=[V;cd3];
    V4=[V;cd4];
    V5=[V;cd5];
    V6=[V;A];
    m1= sum(abs(V1).^2);
    m2= sum(abs(V2).^2);
    m3= sum(abs(V3).^2);
    m4= sum(abs(V4).^2);
    m5= sum(abs(V5).^2);
    m6= sum(abs(V6).^2);

    E= m1+m2+m3+m4+m5+m6;

end 
...