اطلاعیه

Collapse
No announcement yet.

Matlab Code For Open ECG data

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    Matlab Code For Open ECG data

    سلام...

    من یه کد متلب واسه باز کردن دیتابیس های ECG از سایت physionet رو دارم. اما هر کاری می کنم نمی تونم دیتا ها رو باز کنم. اگه دوستان بتونن منو راهنمایی کنن ممنون می شم.. لینک یه M-File رو توی پست قبل گذاشته بودین اما انگار مشکل داره...


    #2
    پاسخ : Matlab Code For Open ECG data

    کد متلبی که دارم به این شکل هست
    کد:
    clear all
    
    close all
    
    clc
    
    load D:\MATLAB\R2008b\work\
    
    pathstring=[];
    
    patient=[];
    
    for i=1:290
    
     pathstring=[];
    
     pathstring=sprintf('d:\\patient\\patient (%d).dat');
    
     [fm,message]=fopen(pathstring,'r');
    
     [aa,count]=fread(fm,'bit16');
    
     fclose(fm);
    
    end

    دیدگاه


      #3
      پاسخ : Matlab Code For Open ECG data


      load D:\MATLAB\R2008b\work\
      پس اسم فایلش کو؟
      {خلاف قوانین - امضا ویرایش شد}

      دیدگاه


        #4
        پاسخ : Matlab Code For Open ECG data

        شما یه کار راحتر می تونی بکنی - در خود سایت physionet این امکان هست که هر فایل رو به صورت خروجی های مختلف در بیاری یعنی نمونه هاشو بکشی بیرون

        خودش حتی خروجی فایل .mat هم برای متلب داره این طوری کارت راحت تر میشه و به صورت یک آرایه دیتا ها رو بیرون می ده برات .

        دیدگاه


          #5
          پاسخ : Matlab Code For Open ECG data

          خوب مشکل منم همینه... من دیتابیس ها رو به صورت یه فولدر به نام ECG دارم که فولدر مربوط به تمام patient sample ها توی اون هست. هر کدوم از این فولدر مربوط به patient ها یک یا چندتا فایل dat. دارن.. من دقیقا متوجه نمیشم باید آدرس رو به چه صورت بنویسم...

          میشه بیشتر راهنمایی کنید که چجوری از physionet فایل mat. رو بگیرم؟؟؟؟

          راستی... ممنون از جوابتون :smile:

          دیدگاه


            #6
            پاسخ : Matlab Code For Open ECG data

            http://www.physionet.org/cgi-bin/ATM


            قانون هفتم انجمن ها :
            خ)همه ی کاربران ملزمند برای تشکر، تنها از دگمه ی تشکر استفاده نمایند.

            دیدگاه


              #7
              پاسخ : Matlab Code For Open ECG data

              ببخشید...

              دیدگاه


                #8
                پاسخ : Matlab Code For Open ECG data

                سلام من mfile شو دارم در سایت فیزیونت فکر کنم به نام rddata باشد که فکر کنم حدود 30 40 خط می باشد نه اینقدر کم .http://www.4shared.com/file/Rowt78Mj/rddata.html
                اینم لینکش برو حالشو ببر فقط یک نکته وقتی 3 فایل هدر و data و text را از فیزیونت کپی در فولدر کامپیوترت کردی اسم آن فایلهارو مثل من که در امفایل است تغییر بده و ادرسش هم مثل من همون جایی که فایلاتو ریختی تغییر بده و ذخیره کن و اجرا کن سپس یک سیگنال قلبی فشرده یعنی مپلا سیگنال 20 دقیقه را که دو ثبت روی هم است که در ماتریس M میریزد نشان میدهد برای دیدن خود سیگنال اولا باید یک ستونه کنی بعد مثلا از سطر 1000 تا 2000 را در یک ماتریس دیگر ریخته و plot کنی :nice:

                دیدگاه


                  #9
                  پاسخ : Matlab Code For Open ECG data

                  PATH= 'C:\Documents and Settings\mahdi\Desktop\New Folder (6)\418'; % path, where data are saved
                  HEADERFILE= '418.hea'; % header-file in text format
                  ATRFILE= '418.atr'; % attributes-file in binary format
                  DATAFILE='418.dat';
                  اینجایش را می گم بقیه جاهاشو نمی خواد دست بزنید بعدشم حدود 150 خط است :nice:

                  دیدگاه


                    #10
                    پاسخ : Matlab Code For Open ECG data

                    میتونید از این مقاله استفاده کنید :

                    http://www.iranbmemag.com/fa/issue/download.asp?t=tblarticle&f=file&i=1037&am p;n
                    سایت جامع مهندسی پزشکی ایران
                    www.dezmed.com
                    or
                    www.irbme.com

                    دیدگاه


                      #11
                      پاسخ : Matlab Code For Open ECG data

                      سلام به همه
                      من تازه عضو سایتتون شدم
                      مشکل من هم همینه اطلاعات رو از سایت فیزیونت گرفتم ولی موقع اجرا در متلب به این خط برنامه گیر میده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :question:
                      z= fgetl(fid1
                      و اینم پیغام خطایی هست که میده
                      Invalid file identifier. Use fopen to generate a valid file identifier.

                      دیدگاه


                        #12
                        پاسخ : Matlab Code For Open ECG data

                        سلام
                        این برنامه run میشه اما erorr میده :Undefined function or variable 'rddata'.
                        و گاهی یک خطا دیگه هم میده که یه نفر قبلا به اون اشاره کرده
                        اگه میشه راهنمایی کنید

                        دیدگاه


                          #13
                          پاسخ : Matlab Code For Open ECG data

                          من نمی تونم دانلودش کنم کدهارو میشه بفرستید به ایمیلم hadis.kogani2014@gmail.com

                          دیدگاه


                            #14
                            پاسخ : Matlab Code For Open ECG data

                            سلام من این کدو یکم تغییر دادم تا errors درست شه فقط توجه کنید این mfile برای دیتای 100.dat نوشته شده پس برای هر دیتایی باید header واطلاعات مربوط به خودشو load کنید .امیدوارم به درد بخوره
                            کد:
                            % This programm reads ECG data which are saved in format 212.
                            % (e.g., 100.dat from MIT-BIH-DB, cu01.dat from CU-DB,...)
                            % The data are displayed in a figure together with the annotations.
                            % The annotations are saved in the vector ANNOT, the corresponding
                            % times (in seconds) are saved in the vector ATRTIME.
                            % The annotations are saved as numbers, the meaning of the numbers can
                            % be found in the codetable "ecgcodes.h" available at www.physionet.org.
                            %
                            % ANNOT only contains the most important information, which is displayed
                            % with the program rdann (available on www.physionet.org) in the 3rd row.
                            % The 4th to 6th row are not saved in ANNOT.
                            %
                            %
                            %   created on Feb. 27, 2003 by
                            %   Robert Tratnig (Vorarlberg University of Applied Sciences)
                            %   (email: rtratnig@gmx.at),
                            %
                            %   algorithm is based on a program written by
                            %   Klaus Rheinberger (University of Innsbruck)
                            %   (email: klaus.rheinberger@uibk.ac.at)
                            %
                            % -------------------------------------------------------------------------
                            clc; clear all;
                            
                            %------ SPECIFY DATA ------------------------------------------------------
                            PATH= 'M:\Profile\Desktop2k\MIT_CD\mitdb'; % path, where data are saved
                            HEADERFILE= '100.hea';   % header-file in text format
                            ATRFILE= '100.atr';     % attributes-file in binary format
                            DATAFILE='100.dat';     % data-file
                            SAMPLES2READ=30000;     % number of samples to be read
                                          % in case of more than one signal:
                                          % 2*SAMPLES2READ samples are read
                            
                            %------ LOAD HEADER DATA --------------------------------------------------
                            fprintf(1,'\\n$> WORKING ON %s ...\n', HEADERFILE);
                            signalh= fullfile(PATH, HEADERFILE);
                            fid1=fopen('100m.hea.txt');
                            z= fgetl(fid1);
                            A= sscanf(z, '%*s %d %d %d',[1,3]);
                            nosig= A(1); % number of signals
                            sfreq=A(2);  % sample rate of data
                            clear A;
                            for k=1:nosig
                              z= fgetl(fid1);
                              A= sscanf(z,'%d %*s %*s %d %*s %d %d %d ',[1,5]);
                              dformat(k)= A(1);      % format; here only 212 is allowed
                              gain(k)= A(2);       % number of integers per mV
                              bitres(k)= A(3);      % bitresolution
                              zerovalue(k)= A(4);     % integer value of ECG zero point
                              firstvalue(k)= A(5);    % first integer value of signal (to test for errors)
                            end;
                            fclose(fid1);
                            clear A;
                            
                            %------ LOAD BINARY DATA --------------------------------------------------
                            %if dformat~= [212,212], error('this script does not apply binary formats different to 212.'); end;
                            signald= fullfile('100.dat');      % data in format 212
                            fid2=fopen(signald,'r');
                            A= fread(fid2, [3, SAMPLES2READ], 'uint8')'; % matrix with 3 rows, each 8 bits long, = 2*12bit
                            fclose(fid2);
                            M2H= bitshift(A(:,2), -4);
                            M1H= bitand(A(:,2), 15);
                            PRL=bitshift(bitand(A(:,2),8),9);   % sign-bit
                            PRR=bitshift(bitand(A(:,2),128),5);  % sign-bit
                            M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;
                            M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;
                            if M(1,:) ~= firstvalue, error('inconsistency in the first bit values'); end;
                            switch nosig
                            case 2
                              M( : , 1)= (M( : , 1)- zerovalue(1))/gain(1);
                              M( : , 2)= (M( : , 2)- zerovalue(2))/gain(2);
                              TIME=(0:(SAMPLES2READ-1))/sfreq;
                            case 1
                              M( : , 1)= (M( : , 1)- zerovalue(1));
                              M( : , 2)= (M( : , 2)- zerovalue(1));
                              M=M';
                              M(1)=[];
                              sM=size(M);
                              sM=sM(2)+1;
                              M(sM)=0;
                              M=M';
                              M=M/gain(1);
                              TIME=(0:2*(SAMPLES2READ)-1)/sfreq;
                            otherwise % this case did not appear up to now!
                              % here M has to be sorted!!!
                              disp('Sorting algorithm for more than 2 signals not programmed yet!');
                            end;
                            clear A M1H M2H PRR PRL;
                            fprintf(1,'\\n$> LOADING DATA FINISHED \n');
                            
                            %------ LOAD ATTRIBUTES DATA ----------------------------------------------
                            atrd= fullfile(PATH, ATRFILE);   % attribute file with annotation data
                            fid3=fopen('100.atr');
                            A= fread(fid3, [2, inf], 'uint8')';
                            fclose(fid3);
                            ATRTIME=[];
                            ANNOT=[];
                            sa=size(A);
                            saa=sa(1);
                            i=1;
                            while i<=saa
                              annoth=bitshift(A(i,2),-2);
                              if annoth==59
                                ANNOT=[ANNOT;bitshift(A(i+3,2),-2)];
                                ATRTIME=[ATRTIME;A(i+2,1)+bitshift(A(i+2,2),8)+...
                                    bitshift(A(i+1,1),16)+bitshift(A(i+1,2),24)];
                                i=i+3;
                              elseif annoth==60
                                % nothing to do!
                              elseif annoth==61
                                % nothing to do!
                              elseif annoth==62
                                % nothing to do!
                              elseif annoth==63
                                hilfe=bitshift(bitand(A(i,2),3),8)+A(i,1);
                                hilfe=hilfe+mod(hilfe,2);
                                i=i+hilfe/2;
                              else
                                ATRTIME=[ATRTIME;bitshift(bitand(A(i,2),3),8)+A(i,1)];
                                ANNOT=[ANNOT;bitshift(A(i,2),-2)];
                              end;
                              i=i+1;
                            end;
                            ANNOT(length(ANNOT))=[];    % last line = EOF (=0)
                            ATRTIME(length(ATRTIME))=[];  % last line = EOF
                            clear A;
                            ATRTIME= (cumsum(ATRTIME))/sfreq;
                            ind= find(ATRTIME <= TIME(end));
                            ATRTIMED= ATRTIME(ind);
                            ANNOT=round(ANNOT);
                            ANNOTD= ANNOT(ind);
                            
                            %------ DISPLAY DATA ------------------------------------------------------
                            figure(1); clf, box on, hold on
                            plot(TIME, M(:,1),'r');
                            if nosig==2
                              plot(TIME, M(:,2),'b');
                            end;
                            for k=1:length(ATRTIMED)
                              text(ATRTIMED(k),0,num2str(ANNOTD(k)));
                            end;
                            xlim([TIME(1), TIME(end)]);
                            xlabel('Time / s'); ylabel('Voltage / mV');
                            string=['ECG signal ',DATAFILE];
                            title(string);
                            fprintf(1,'\\n$> DISPLAYING DATA FINISHED \n');
                            
                            % -------------------------------------------------------------------------
                            fprintf(1,'\\n$> ALL FINISHED \n');

                            دیدگاه


                              #15
                              پاسخ : Matlab Code For Open ECG data

                              نوشته اصلی توسط mahdifarahani2007
                              سلام من mfile شو دارم در سایت فیزیونت فکر کنم به نام rddata باشد که فکر کنم حدود 30 40 خط می باشد نه اینقدر کم .http://www.4shared.com/file/Rowt78Mj/rddata.html
                              اینم لینکش برو حالشو ببر فقط یک نکته وقتی 3 فایل هدر و data و text را از فیزیونت کپی در فولدر کامپیوترت کردی اسم آن فایلهارو مثل من که در امفایل است تغییر بده و ادرسش هم مثل من همون جایی که فایلاتو ریختی تغییر بده و ذخیره کن و اجرا کن سپس یک سیگنال قلبی فشرده یعنی مپلا سیگنال 20 دقیقه را که دو ثبت روی هم است که در ماتریس M میریزد نشان میدهد برای دیدن خود سیگنال اولا باید یک ستونه کنی بعد مثلا از سطر 1000 تا 2000 را در یک ماتریس دیگر ریخته و plot کنی :nice:
                              نوشته اصلی توسط mbegol
                              میتونید از این مقاله استفاده کنید :

                              http://www.iranbmemag.com/fa/issue/download.asp?t=tblarticle&f=file&i=1037&am p;n
                              سلام لطفا دوباره پ کنید
                              اول توکل
                              دوم پشتکار
                              سوم مشورت
                              چهارم عمل
                              -----------------------------------------------------------------------------------------------------------------
                              نرم افزار برای دانلود نامحدود از rapideshare: http://k12student.persiangig.com/other ------- تشکر یادتون نره. موفق باشید.

                              دیدگاه

                              لطفا صبر کنید...
                              X