(57)【特許請求の範囲】
【請求項１】
ＧＰＵによる心電信号の並列解析方法であって、
長インターバルアーチファクト除去と短インターバルアーチファクト除去をすることで心電信号にフィルタリング処理をすることと、
Ｒ波位置抽出、ＱＲＳ波群の開始・停止位置の抽出及びＱＲＳ波群幅抽出をすることで、フィルタリング処理がされた前記心電信号にＱＲＳ検波をすることと、
テンプレート作成をして、ＱＲＳ検波がされた前記心電信号について異常波形分類をすることとが含まれ、
前記長インターバルアーチファクト除去、前記短インターバルアーチファクト除去、前記Ｒ波位置抽出、前記ＱＲＳ波群幅抽出及び前記テンプレート作成の少なくともいずれか1つが、ＧＰＵ装置端末の複数のスレッドにより並列に実行され、前記スレッドが、その唯一対応するＩＤナンバーによって、それに対応するデータを読み取って処理し、
前記長インターバルアーチファクト除去が、
複数の前記スレッドによって並列に実行され、
前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記心電信号をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、
長インターバルアーチファクト除去のインターバルに応じて前記心電信号をセグメント化し、各々の前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて前記グローバルメモリから前記スレッドに対応する１セグメントの心電信号を読み取り、当該セグメントの心電信号の標準偏差を計算して、前記ＩＤナンバーに基づいて前記標準偏差を前記グローバルメモリ中の第１の標準偏差シーケンスに格納することと、
標準偏差が設定閾値範囲内にない前記セグメントの心電信号を除去することと、
前記スレッドで前記ＧＰＵ装置端末の次元削減合計カーネル関数を呼び出して、除去がされた後に残ったすべての当該セグメントの心電信号の標準偏差の合計値を計算することと、
前記合計値から平均値を求めた上で、前記平均値により第１の閾値範囲を生成することと、
各々の前記スレッドで前記カーネル関数を呼び出し直して、前記ＩＤナンバーに基づいて、除去がされた後に残った前記セグメントの心電信号の標準偏差を読み取って、当該標準偏差が前記第１の閾値範囲内にあるか否か判定し、前記ＩＤナンバーに基づいて判定結果を前記グローバルメモリ中の第１のノイズシーケンスに格納することと、
各々の前記スレッドが前記ＩＤナンバーに基づいて前記第１のノイズシーケンスから前記判定結果及びそれに隣接する１つ前の判定結果と１つ後の判定結果を順次読み取って、前記１つ前の判定結果と前記１つ後の判定結果のいずれの標準偏差も前記第１の閾値範囲内になければ、ノイズであることを示す第１のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、逆の場合であれば、ノイズでないことを示す第２のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、長インターバルアーチファクト除去の結果を生成することと、
前記長インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと
を含むことを特徴とする、ＧＰＵによる心電信号の並列解析方法。
【請求項２】
前記スレッドの数
【数１】
0006389907.tif 000046
で、各々の前記スレッドの処理する心電信号に対応するサンプリング点の個数はｆ＊Ｔで、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルであることを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項３】
前記標準偏差
【数２】
0006389907.tif 000047
であり、ここで、
【数３】
0006389907.tif 000048
で、そのうち、ｐｊは前記セグメントの心電信号のうちｊつ目のサンプリング点の心電信号、ｊは整数、ｊ≧０で、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルであることを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項４】
前記第１の閾値範囲の上限と前記第１の閾値範囲の下限が、それぞれ前記平均値の３倍と前記平均値の１／３．５倍であることを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項５】
前記設定閾値範囲が［０．５、３］であることを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項６】
前記短インターバルアーチファクト除去が、
複数の前記スレッドによって並列に実行され、
前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記長インターバルアーチファクト除去がされた心電信号をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、
短インターバルアーチファクト除去のインターバルＴ１に応じて前記心電信号をセグメント化し、各々の前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて１セグメントの心電信号を読み取り、式
【数４】
0006389907.tif 000049
の値を計算して、ここで、ｓｕｍが前記セグメントの心電信号中のすべての心電信号の二乗和であり、前記ＩＤナンバーに基づいて前記式の値を前記グローバルメモリ中の第２のノイズシーケンスに格納することと、
前記スレッドの数及びその処理する心電信号に対応するサンプリング点の個数を修正して、各々の修正後のスレッドでカーネル関数を呼び出し直して、前記修正後のスレッドのＩＤナンバーに基づいて、その唯一対応する前記長インターバルアーチファクト除去の結果である第１のノイズシーケンス中の１つのフラグ値を読み取り、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を第３のフラグによって表示することと、
前記第３のフラグに基づいて、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を直列に除外することと、
前記修正後のスレッドで前記ＧＰＵ装置端末における次元削減合計カーネル関数を呼び出して、除外がされた後に残ったすべての心電信号の合計値を計算することと、
前記合計値から平均値を求め、前記平均値により第２の閾値範囲を生成することと、
前記スレッドの数及びその処理する心電信号に対応する数を再度修正して、再修正後の前記スレッドでカーネル関数を再度呼び出し直して、再修正後の前記スレッドのＩＤナンバーに基づいて、前記第２の閾値範囲内にない各々の前記式の値を前記第２のノイズシーケンスから読み取って除去し、短インターバルアーチファクト除去の結果を生成することと、
前記短インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと
を含むことを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項７】
各々の前記スレッドで処理する心電信号のサンプリング点の個数はｆ＊Ｔ１、前記スレッドの数
【数５】
0006389907.tif 000050
で、
ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数で、
１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ個の前記スレッドを設定し、各々の前記スレッドブロックに対応する心電信号のサンプリング点の個数
【数６】
0006389907.tif 000051
、前記スレッドブロックの数
【数７】
0006389907.tif 000052
であること
をさらに含むことを特徴とする、請求項６に記載のＧＰＵによる心電信号の並列解析方法。
【請求項８】
修正後のスレッドの数
【数８】
0006389907.tif 000053
で、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルで、
【数９】
0006389907.tif 000054
個の修正後のスレッドが１つのスレッドブロックに対応し、前記スレッドブロックの数
【数１０】
0006389907.tif 000055
で、ここで、Ｌ１は前記長インターバルアーチファクト除去の結果であるすべての第１のノイズシーケンスの長さであること
をさらに含むことを特徴とする、請求項６に記載のＧＰＵによる心電信号の並列解析方法。
【請求項９】
再修正後のスレッドの数
【数１１】
0006389907.tif 000056
で、各々の前記再修正後のスレッドが１つの前記式の値に対応して処理し、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ２個の前記再修正後のスレッドを設定し、前記スレッドブロックの数
【数１２】
0006389907.tif 000057
で、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長であること
をさらに含むことを特徴とする、請求項６に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１０】
前記Ｒ波位置抽出が、
複数の前記スレッドによって並列に実行され、
前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、フィルタリング処理がされた前記心電信号をホスト端末のメモリから前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、
各々の前記スレッドでカーネル関数を呼び出して、そのＩＤナンバーに応じて、フィルタリング処理がされた前記心電信号から１つの検波しようとする心電信号を読み取ることと、
前記スレッドが、設定するウィンドウサイズｗと設定する勾配に応じて、読み取った前記の検波しようとする心電信号及びその直後に隣接するｗ−１個（ｗは整数、ｗ≧２である）の検波しようとする心電信号をそれぞれ異なる程度で侵食演算して、侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値を、前記ＩＤナンバーに基づいて前記グローバルメモリ中の第１の仮シーケンスに格納することと、
各々の前記スレッドで前記ＩＤナンバーに基づいて前記第１の仮シーケンスから１つの前記最小値を読み取ることと、
前記の設定するウィンドウサイズｗと前記の設定する勾配に応じて、読み取った前記最小値及びその直後に隣接するｗ−１個の前記最小値をそれぞれ異なる程度で膨張演算して、前記ＩＤナンバーに基づいて、膨張演算がされた後の読み取った前記最小値及びその直後に隣接するｗ−１個の前記最小値のうちの最大値を、前記グローバルメモリ中の第２の仮シーケンスに格納することと、
前記ＩＤナンバーに基づいて前記の検波しようとする心電信号を読み取って前記最大値との差分値を計算し、前記差分値を前記グローバルメモリ中の第３の仮シーケンスに格納することと、
前記スレッドで次元削減合計カーネル関数を呼び出して前記第３の仮シーケンス中のすべての前記差分値の合計値を計算することと、
前記合計値から平均値を求めることと、
前記平均値を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと
を含むことを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１１】
侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値をレジスターに格納することと、
前記レジスターから前記最小値を読み取り、前記グローバルメモリから前記ｗ−１個の前記最小値を読み取ることと
をさらに含むことを特徴とする、請求項１０に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１２】
前記の設定するウィンドウサイズｗ＝５で、前記の設定する勾配としてｋ［ｗ］＝｛０、５０、１００、５０、０｝であることを特徴とする、請求項１０に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１３】
前記スレッドの数が、前記ホスト端末からコピーされる前記心電信号のサンプリング点のシーケンス長Ｌ３に等しく、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ３個の前記スレッドを設定し、前記スレッドブロックの数
【数１３】
0006389907.tif 000058
であることを特徴とする、請求項１０に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１４】
前記ＱＲＳ波群幅抽出が、
複数の前記スレッドによって並列に実行され、
前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、ＱＲＳ波群の開始・停止位置の抽出結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、
前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、そのＩＤナンバーに基づいて、前記のＱＲＳ波群の開始・停止位置の抽出結果における開始位置と停止位置を読み取り、前記開始位置と停止位置の差分値を計算し、前記ＩＤナンバーに基づいて前記差分値を前記グローバルメモリに格納して、ＱＲＳ波群幅抽出の結果を生成することと、
前記のＱＲＳ波群幅抽出の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと、
を含むことを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１５】
ホスト端末でピーク値群特定法によってＱＲＳ波群の前記開始位置と前記停止位置を得ることを特徴とする、請求項１４に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１６】
前記テンプレート作成が、複数の前記スレッドによって並列実行され、
前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、Ｒ波位置抽出の結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、
前記スレッドでカーネル関数を呼び出して、そのＩＤナンバーに基づいて、前記のＲ波位置抽出の結果におけるＲＲインターバルを読み取り、設定基準に基づいて各々の前記ＲＲインターバルの識別子を取得した上で、前記ＩＤナンバーに基づいて前記識別子を前記グローバルメモリに格納して、テンプレート作成の結果を生成することと、
前記のテンプレート作成の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと
を含むことを特徴とする、請求項１に記載のＧＰＵによる心電信号の並列解析方法。
【請求項１７】
前記設定基準に、
ｉつ目のＲＲインターバルＲＲｌｉｓｔ［ｉ］に隣接するｉ＋１つ目のＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にない場合、前記ＲＲインターバルのデータであるＲＲｌｉｓｔ［ｉ］の識別子を−１とする（ここで、ｉは整数、ｉ≧０である）ことと、
前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にない場合（ここで、ＲＲｍｅａｎはすべての前記ＲＲインターバルの平均値である）、前記ＲＲインターバル・ＲＲｌｉｓｔ［ｉ］の識別子を０とすることと、
前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にある場合、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］の識別子を１とすることと
が含まれることを特徴とする、請求項１６に記載のＧＰＵによる心電信号の並列解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生体医用工学の技術分野、特に、ＧＰＵ（Graphics Processing Unit）による心電信号の並列解析方法に関するものである。
【背景技術】
【０００２】
バイオ情報技術の発達に伴い、益々多くのウェアラブル健康医療製品で人体の心電信号を採集して解析することにより、人々にカスタマイズな健康医療サービスを提供することが可能となり、人々が専門の医療機関に行かなくても自分自身の健康状況を知ることができるようになっている。
【０００３】
そのため、心電データの自動解析が現在の医用生体分野における研究のホットスポットとなっている。現在、多くの心電データの自動解析技術では、いずれも病院を基本単位として収集された心電データを対象とし、扱っている心電データの規模は限られたものである。しかし、家庭向けのヘルス・クラウド・プラットフォーム（Health Cloud Platform）は、中小都市さらには大都市の家庭ユーザーをサービス対象としており、毎日数多くのユーザーが長時間と短時間の心電データがアップロードされている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
現在、ヘルス・クラウド・プラットフォームで使用されているものは、心電データの直列解析アルゴリズムであり、短時間心電データのリアルタイム解析とリアルタイムフィードバックを実現できるが、長時間心電信号データの解析にはなお多くの時間がかかり、ユーザーエクスペリエンスも著しく妨げている。例えば、現在の家庭向けのヘルス・クラウド・プラットフォームでは、２４時間の長時間心電データをアップロードしてから解析結果をフィードバックするまでの平均応答時間は３５秒で、時間がかかっている。
【０００５】
国内外の関係研究者らは、様々な観点から心電データの解析処理過程を速めようと積極的に試みているところである。心電データを並列に処理する面では既に多くの有意義な研究成果が出たが、これらの研究成果は、心電データの解析処理フローは精密ではなく、現在直面している課題が解決できなかった。
【０００６】
本発明は、ＧＰＵによる心電信号の並列解析方法を提供することにより、上記の欠点の１つ又は複数を解決するものである。
【課題を解決するための手段】
【０００７】
本発明は、ＧＰＵによる心電信号の並列解析方法を提供するもので、前記方法には、長インターバルアーチファクト除去と短インターバルアーチファクト除去をすることで心電信号にフィルタリング処理をすることと、Ｒ波位置抽出、ＱＲＳ波群の開始・停止位置の抽出及びＱＲＳ波群幅抽出をすることで、フィルタリング処理がされた前記心電信号にＱＲＳ検波をすることと、テンプレート作成をして、ＱＲＳ検波がされた前記心電信号について異常波形分類をすることとが含まれ、前記長インターバルアーチファクト除去、前記短インターバルアーチファクト除去、前記Ｒ波位置抽出、前記ＱＲＳ波群幅抽出及び前記テンプレート作成の少なくともいずれか1つが、ＧＰＵ装置端末の複数のスレッドにより並列に実行され、前記スレッドが、その唯一対応するＩＤナンバーによって、それに対応するデータを読み取って処理する。
【０００８】
実施例の一つでは、前記長インターバルアーチファクト除去が、複数の前記スレッドによって並列に実行され、前記方法は、前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記心電信号をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、長インターバルアーチファクト除去のインターバルに応じて前記心電信号をセグメント化し、各々の前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて前記グローバルメモリから前記スレッドに対応する１セグメントの心電信号を読み取り、当該セグメントの心電信号の標準偏差を計算して、前記ＩＤナンバーに基づいて前記標準偏差を前記グローバルメモリ中の第１の標準偏差シーケンスに格納することと、標準偏差が設定閾値範囲内にない前記セグメントの心電信号を除去することと、前記スレッドで前記ＧＰＵ装置端末の次元削減合計カーネル関数を呼び出して、除去がされた後に残ったすべての当該セグメントの心電信号の標準偏差の合計値を計算することと、前記合計値から平均値を求めた上で、前記平均値により第１の閾値範囲を生成することと、各々の前記スレッドで前記カーネル関数を呼び出し直して、前記ＩＤナンバーに基づいて、除去がされた後に残った前記セグメントの心電信号の標準偏差を読み取って、当該標準偏差が前記第１の閾値範囲内にあるか否か判定し、前記ＩＤナンバーに基づいて判定結果を前記グローバルメモリ中の第１のノイズシーケンスに格納することと、各々の前記スレッドが前記ＩＤナンバーに基づいて前記第１のノイズシーケンスから前記判定結果及びそれに隣接する１つ前の判定結果と１つ後の判定結果を順次読み取って、前記１つ前の判定結果と前記１つ後の判定結果のいずれの標準偏差も前記第１の閾値範囲内になければ、ノイズであることを示す第１のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、逆の場合であれば、ノイズでないことを示す第２のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、長インターバルアーチファクト除去の結果を生成することと、前記長インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることとを含む。
【０００９】
実施例の一つでは、前記スレッドの数
【数１】
0006389907.tif 000002
で、各々の前記スレッドの処理する心電信号に対応するサンプリング点の個数はｆ＊Ｔで、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルである。
【００１０】
実施例の一つでは、前記標準偏差
【数２】
0006389907.tif 000003
であり、ここで、
【数３】
0006389907.tif 000004
で、そのうち、ｐｊは前記セグメントの心電信号のうちｊつ目のサンプリング点の心電信号、ｊは整数、ｊ≧０で、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルである。
【００１１】
実施例の一つでは、前記第１の閾値範囲の上限と前記第１の閾値範囲の下限が、それぞれ前記平均値の３倍と前記平均値の１／３．５倍である。
【００１２】
実施例の一つでは、前記設定閾値範囲が［０．５、３］である。
【００１３】
実施例の一つでは、前記短インターバルアーチファクト除去が、複数の前記スレッドによって並列に実行され、前記方法は、前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記長インターバルアーチファクト除去がされた心電信号をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、短インターバルアーチファクト除去のインターバルＴ１に応じて前記心電信号をセグメント化し、各々の前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて１セグメントの心電信号を読み取り、式
【数４】
0006389907.tif 000005
の値を計算して、ここで、ｓｕｍが前記セグメントの心電信号中のすべての心電信号の二乗和であり、前記ＩＤナンバーに基づいて前記式の値を前記グローバルメモリ中の第２のノイズシーケンスに格納することと、前記スレッドの数及びその処理する心電信号に対応するサンプリング点の個数を修正して、各々の修正後のスレッドでカーネル関数を呼び出し直して、前記修正後のスレッドのＩＤナンバーに基づいて、その唯一対応する前記長インターバルアーチファクト除去の結果である第１のノイズシーケンス中の１つのフラグ値を読み取り、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を第３のフラグによって表示することと、前記第３のフラグに基づいて、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を直列に除外することと、前記修正後のスレッドで前記ＧＰＵ装置端末における次元削減合計カーネル関数を呼び出して、除外がされた後に残ったすべての心電信号の合計値を計算することと、前記合計値から平均値を求め、前記平均値により第２の閾値範囲を生成することと、前記スレッドの数及びその処理する心電信号に対応する数を再度修正して、再修正後の前記スレッドでカーネル関数を再度呼び出し直して、再修正後の前記スレッドのＩＤナンバーに基づいて、前記第２の閾値範囲内にない各々の前記式の値を前記第２のノイズシーケンスから読み取って除去し、短インターバルアーチファクト除去の結果を生成することと、前記短インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることとを含む。
【００１４】
実施例の一つでは、各々の前記スレッドで処理する心電信号のサンプリング点の個数はｆ＊Ｔ１、前記スレッドの数
【数５】
0006389907.tif 000006
で、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数で、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ個の前記スレッドを設定し、各々の前記スレッドブロックに対応する心電信号のサンプリング点の個数
【数６】
0006389907.tif 000007
、前記スレッドブロックの数
【数７】
0006389907.tif 000008
であることをさらに含む。
【００１５】
実施例の一つでは、修正後のスレッドの数
【数８】
0006389907.tif 000009
で、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルで、
【数９】
0006389907.tif 000010
個の修正後のスレッドが１つのスレッドブロックに対応し、前記スレッドブロックの数
【数１０】
0006389907.tif 000011
で、ここで、Ｌ１は前記長インターバルアーチファクト除去の結果であるすべての第１のノイズシーケンスの長さであることをさらに含む。
【００１６】
実施例の一つでは、再修正後のスレッドの数
【数１１】
0006389907.tif 000012
で、各々の前記再修正後のスレッドが１つの前記式の値に対応して処理し、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ２個の前記再修正後のスレッドを設定し、前記スレッドブロックの数
【数１２】
0006389907.tif 000013
で、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長であることをさらに含む。
【００１７】
実施例の一つでは、前記Ｒ波位置抽出が、複数の前記スレッドによって並列に実行され、前記方法は、前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、フィルタリング処理がされた前記心電信号をホスト端末のメモリから前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、各々の前記スレッドでカーネル関数を呼び出して、そのＩＤナンバーに応じて、フィルタリング処理がされた前記心電信号から１つの検波しようとする心電信号を読み取ることと、前記スレッドが、設定するウィンドウサイズｗと設定する勾配に応じて、読み取った前記の検波しようとする心電信号及びその直後に隣接するｗ−１個（ｗは整数、ｗ≧２である）の検波しようとする心電信号をそれぞれ異なる程度で侵食（erosion）演算して、侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値を、前記ＩＤナンバーに基づいて前記グローバルメモリ中の第１の仮シーケンスに格納することと、各々の前記スレッドで前記ＩＤナンバーに基づいて前記第１の仮シーケンスから１つの前記最小値を読み取ることと、前記の設定するウィンドウサイズｗと前記の設定する勾配に応じて、読み取った前記最小値及びその直後に隣接するｗ−１個の前記最小値をそれぞれ異なる程度で膨張（dilation）演算して、前記ＩＤナンバーに基づいて、膨張演算がされた後の読み取った前記最小値及びその直後に隣接するｗ−１個の前記最小値のうちの最大値を、前記グローバルメモリ中の第２の仮シーケンスに格納することと、前記ＩＤナンバーに基づいて前記の検波しようとする心電信号を読み取って前記最大値との差分値を計算し、前記差分値を前記グローバルメモリ中の第３の仮シーケンスに格納することと、前記スレッドで次元削減合計カーネル関数を呼び出して前記第３の仮シーケンス中のすべての前記差分値の合計値を計算することと、前記合計値から平均値を求めることと、前記平均値を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることとを含む。
【００１８】
実施例の一つでは、侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値をレジスターに格納することと、前記レジスターから前記最小値を読み取り、前記グローバルメモリから前記ｗ−１個の前記最小値を読み取ることとをさらに含む。
【００１９】
実施例の一つでは、前記の設定するウィンドウサイズｗ＝５で、前記の設定する勾配としてｋ［ｗ］＝｛０、５０、１００、５０、０｝である。
【００２０】
実施例の一つでは、前記スレッドの数が、前記ホスト端末からコピーされる前記心電信号のサンプリング点のシーケンス長Ｌ３に等しく、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ３個の前記スレッドを設定し、前記スレッドブロックの数
【数１３】
0006389907.tif 000014
である。
【００２１】
実施例の一つでは、前記ＱＲＳ波群幅抽出が、複数の前記スレッドによって並列に実行され、前記方法は、前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、ＱＲＳ波群の開始・停止位置の抽出結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、そのＩＤナンバーに基づいて、前記のＱＲＳ波群の開始・停止位置の抽出結果における開始位置と停止位置を読み取り、前記開始位置と停止位置の差分値を計算し、前記ＩＤナンバーに基づいて前記差分値を前記グローバルメモリに格納して、ＱＲＳ波群幅抽出の結果を生成することと、前記のＱＲＳ波群幅抽出の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることと、を含む。
【００２２】
実施例の一つでは、ホスト端末でピーク値群特定法によってＱＲＳ波群の前記開始位置と前記停止位置を得る。
【００２３】
実施例の一つでは、前記テンプレート作成が、複数の前記スレッドによって並列実行され、前記方法は、前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、Ｒ波位置抽出の結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーすることと、前記スレッドでカーネル関数を呼び出して、そのＩＤナンバーに基づいて、前記のＲ波位置抽出の結果におけるＲＲインターバルを読み取り、設定基準に基づいて各々の前記ＲＲインターバルの識別子を取得した上で、前記ＩＤナンバーに基づいて前記識別子を前記グローバルメモリに格納して、テンプレート作成の結果を生成することと、前記のテンプレート作成の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーすることとを含む。
【００２４】
実施例の一つでは、前記設定基準に、ｉつ目のＲＲインターバルＲＲｌｉｓｔ［ｉ］に隣接するｉ＋１つ目のＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にない場合、前記ＲＲインターバルのデータであるＲＲｌｉｓｔ［ｉ］の識別子を−１とする（ここで、ｉは整数、ｉ≧０である）ことと、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にない場合（ここで、ＲＲｍｅａｎはすべての前記ＲＲインターバルの平均値である）、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］の識別子を０とすることと、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にある場合、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］の識別子を１とすることとが含まれる。
【００２５】
本発明の実施例におけるＧＰＵによる心電信号データの並列解析方法は、心電信号の解析過程における１つ又は複数のステップをＧＰＵで並列に実行することで、心電信号の解析速度を著しく高めることができるものである。
【００２６】
本発明で設計したＧＰＵによる並列的な心電データ解析方法では、心電データ解析の各段階では数倍から数十倍に加速され、心電データ解析全体にかかる時間が通常のワークステーション型サーバーと比べて１７倍加速される。家庭向けのヘルス・クラウド・プラットフォームのＧＰＵサーバーにこの並列アルゴリズムを備えることで、大規模な長時間心電信号データを迅速に解析するという現段階のニーズを満足することができる。
【００２７】
本発明の実施例又は先行技術における技術的思想をより明確に説明するため、次に、実施例又は先行技術を説明する上で使用することが必要な図面を簡単に紹介する。自明なこととして、次の説明における図面は、本発明の実施例の一部であるのにすぎず、当業者にとっては、創作的な労働を伴わない前提で、これらの図面に基づいてさらに他の図面を得ることもできる。図面のうち、図１〜図１４は以下の通りである。
【図面の簡単な説明】
【００２８】
【図１】従来の心電信号の直列解析方法についてのフローチャートである。
【図２】本発明の実施例におけるＧＰＵによる心電信号の並列解析方法である。
【図３】本発明の実施例における長インターバルアーチファクト除去の直列実行アルゴリズムについてのフローチャートである。
【図４】本発明の実施例における長インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。
【図５】本発明の一実施例における長インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。
【図６】本発明の実施例における短インターバルアーチファクト除去の直列実行アルゴリズムについてのフローチャートである。
【図７】本発明の実施例における短インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。
【図８】本発明の一実施例における短インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。
【図９】本発明の実施例におけるＲ波位置抽出の直列実行アルゴリズムについてのフローチャートである。
【図１０】本発明の実施例におけるＲ波位置抽出の並列実行アルゴリズムについてのフローチャートである。
【図１１】本発明の一実施例におけるＲ波位置抽出の並列実行アルゴリズムについてのフローチャートである。
【図１２】本発明の実施例におけるＱＲＳ波群幅抽出の直列実行アルゴリズムについてのフローチャートである。
【図１３】本発明の実施例におけるＱＲＳ波群幅抽出の並列実行アルゴリズムについてのフローチャートである。
【図１４】本発明の実施例におけるテンプレート作成の並列実行アルゴリズムについてのフローチャートである。
【発明を実施するための形態】
【００２９】
本発明の実施例の目的、技術的思想及び利点をより明確に分かるようにするため、次に、図面により本発明の実施例についてさらに詳細に説明する。ここで、本発明の概略的な実施例及びその説明は、本発明の解説に用いるものであるが、本発明を限定するものではない。
【００３０】
図１は、従来の心電信号の直列解析方法についてのフローチャートであるが、図１に示すように、フィルタリング処理１０１において、従来技術では、長インターバル（interval）アーチファクト（artifact）除去アルゴリズム、短インターバルアーチファクト除去アルゴリズム及び簡単な整係数コムフィルタ（simple integer coefficients comb filter）を用いてフィルタリング処理をすることで、商用電源周波数によるノイズ、基線変動、筋電のアーチファクトによるノイズを含むアーチファクトによるノイズを除去し、人体や信号収集機器などの外界の環境から生じるノイズの影響を除去していた。フィルタリング処理１０１に用いる上記の３通りのアルゴリズムはいずれも直列アルゴリズムで、また、アーチファクト除去が特徴抽出や波形分類の段階でも用いられていたので、上記の３通りのアルゴリズムにより、心電信号を処理するスピードが明らかに低下されていた。
【００３１】
上記の３通りの直列アルゴリズムを含むフィルタリング処理のプロセスを分析することで、発明者は、いずれのアルゴリズムでもフィルタリング処理の段階でかかる時間の１／３を占めることを発見した。オールパスネットワーク（全域通過回路網）の簡単な整係数コムフィルタ（all-pass network simple integer coefficients comb filter）では、データのフィルタリング処理中にデータの前後依存関係が非常に強く、ＣＵＤＡ（Ｃｏｍｐｕｔｅ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ、計算統合デバイスアーキテクチャ）のプログラミングモデルにおける並列計算の単一命令複数データ原則（ＳＩＭＤ）に反するので、このアルゴリズムは並列実行に適しない。長インターバルアーチファクト除去アルゴリズム及び短インターバルアーチファクト除去アルゴリズムでは、データのフィルタリング処理中にデータの関連性が弱いので、並列処理をすることができる。
【００３２】
従って、心電信号にフィルタリング処理をする場合、長インターバルアーチファクト除去アルゴリズム及び／又は短インターバルアーチファクト除去アルゴリズムに並列実行する方法を採用すれば、フィルタリング処理の段階でかかる時間の１／３又は２／３を短縮することができる。
【００３３】
図１に示すように、従来技術においては、直列アルゴリズムを用いてＱＲＳ検出１０２におけるＲ波位置抽出とＱＲＳ波群の開始・停止位置の抽出の２つの処理プロセスを行っている。Ｒ波位置抽出とＱＲＳ波群の開始・停止位置の抽出を並列実行するアルゴリズムを設計できれば、心電信号の解析速度をさらに高めることができる。
【００３４】
さらに図１に示すように、従来技術においては、直列アルゴリズムによってＱＲＳ波群を識別することで異常波形分類１０３を行っている。ＱＲＳ波群を識別する並列アルゴリズムを設計できれば、より速い心電信号の解析速度を得ることができる。
【００３５】
先行技術に存在する課題を解決するため、本発明の実施例では、ＧＰＵによる心電信号の並列解析方法を提供する。図２に示すように、本発明の実施例における心電信号の並列解析方法には、次のステップが含まれる。
【００３６】
Ｓ２０１：長インターバルアーチファクト除去と短インターバルアーチファクト除去をすることで心電信号にフィルタリング処理をする。
【００３７】
Ｓ２０２：Ｒ波位置抽出、ＱＲＳ波群の開始・停止位置の抽出及びＱＲＳ波群幅抽出をすることで、フィルタリング処理がされた前記心電信号にＱＲＳ検波をする。
【００３８】
Ｓ２０３：テンプレート作成をして、ＱＲＳ検波がされた前記心電信号について異常波形分類をする。
【００３９】
ここで、上記長インターバルアーチファクト除去、上記短インターバルアーチファクト除去、上記Ｒ波位置抽出、上記ＱＲＳ波群幅抽出及び上記テンプレート作成の少なくとも１つは、ＧＰＵ装置における複数のスレッドにより並列実行される。ここで、各スレッドは、その唯一対応する番号によって、それに対応するデータを読み取って処理する。
【００４０】
本発明の実施例における心電信号の並列解析方法では、長インターバルアーチファクト除去アルゴリズム、短インターバルアーチファクト除去アルゴリズム、Ｒ波位置抽出、ＱＲＳ波群幅抽出及びテンプレート作成のうち少なくとも１つをＧＰＵ上並列実行することにより、心電信号の解析速度をある程度速めることができる。
【００４１】
実施例の一つにおいて、長インターバルアーチファクト除去は直列アルゴリズムを用いて実行してもよい。長インターバルアーチファクト除去の実行中に、１つのノイズシーケンスｎｏｉｓｅｌｉｓｔ［ｌｅｎｇｔｈ］を生じ、ノイズシーケンスの配列の長さは次の通りとなる。
【００４２】
【数１４】
0006389907.tif 000015
【００４３】
そのうち、ｅｃｇｎｕｍ最初の心電信号データの配列の長さ、Ｔは長インターバルアーチファクト除去のインターバルを表し、あるセグメントのデータがノイズと判定された場合、ノイズシーケンスの相応の位置に１と書き込まれ、逆の場合であれば０と書き込まれる。図３は、本発明の実施例における長インターバルアーチファクト除去の直列実行アルゴリズムについてのフローチャートである。図３に示すように、長インターバルアーチファクト除去の直列実行アルゴリズムには、次のステップが含まれる。
【００４４】
Ｓ３０１：心電信号のセグメント識別子をＫ＝０と初期設定する。
【００４５】
Ｓ３０２：最初の心電信号から心電信号データを順次読み取る。
【００４６】
Ｓ３０３：ｆ＊Ｔ個の心電信号データ点を読み込むとき、標準偏差公式Ｍに従って各セグメントの心電信号データセットの標準偏差を計算し、セグメント識別子Ｋに１を加算する。
【００４７】
【数１５】
0006389907.tif 000016
【数１６】
0006389907.tif 000017
【００４８】
ここで、ｆは心電信号のサンプリング周波数で、ｐｊは各セグメントの心電信号データセットにおけるｊつ目のサンプリングデータ点を表すが、ｊは正整数、ｊ≧０である。
【００４９】
Ｓ３０４：すべての心電信号データが処理されるまで、Ｓ３０２及びＳ３０３のステップを繰り返す。
【００５０】
Ｓ３０５：経験的な閾値の範囲［０．５、３０］に基づいて、各セグメントの心電信号データセットの標準偏差が当該経験的な閾値の範囲内にあるか否かを判定し、当該経験的な閾値の範囲内にある心電信号データセットの標準偏差の平均値ｔｅｍｐ＿Ｍを計算する。
【００５１】
Ｓ３０６：平均値ｔｅｍｐ＿Ｍに基づいて、新たな閾値上限ｔｅｍｐ＿ｈと閾値下限ｔｅｍｐ＿ｌを算出し、さらに、１つの新たな閾値範囲を導き出す。そのうち、 
【数１７】
0006389907.tif 000018
【数１８】
0006389907.tif 000019
【数１９】
0006389907.tif 000020
である。
【００５２】
Ｓ３０７：ステップＳ３０６で導き出された新たな閾値範囲に基づいて心電信号のノイズセグメントを判定し、当該セグメントの心電信号データセットの標準偏差が当該新たな閾値範囲内にあればノイズセグメントでないとしてｎｏｉｓｅｌｉｓｔ［ｉ］＝０と記し、逆の場合であれば、ノイズセグメントと判定してｎｏｉｓｅｌｉｓｔ［ｉ］＝１と記す。
【００５３】
Ｓ３０８：全てのノイズセグメントの判定が完了するまでに、以上の処理を繰り返す。あるセグメントの心電信号データの1つ前と1つ後ろのセグメントの心電信号データがいずれもノイズセグメントである場合、当該セグメントの心電信号データもノイズセグメントと判定する。
【００５４】
Ｓ３０９：長インターバルアーチファクト除去を終了する。
【００５５】
長インターバルアーチファクト除去の直列アルゴリズムについて分析することで、発明者は、長インターバルアーチファクトの判定フローに４つのループがあるが、ＣＵＤＡのアーキテクチャではスレッドが単一命令複数データの方式で構成されるので、ループが並列化に適している改良を発見した。
【００５６】
カーネル関数を呼び出す際、スレッドブロックとブロック内のスレッドリソースの数を指定するが、スレッドブロックの数ＢｌｏｃｋＮｕｍは、最初の心電信号の長さと設定した各々のスレッドブロックにおけるスレッドの数ＴｈｒｅａｄｓＰｅｒＢｌｏｃｋに基づいて、次の数式（１）及び数式（２）により算出することができる。
【００５７】
【数２０】
0006389907.tif 000021
【数２１】
0006389907.tif 000022
【００５８】
長インターバルアーチファクトの判定プロセスにおいて、１つ目のループは１つのネスティングループであるが、内部ループにより定められるサブデータセットの数によってデータセット全体における各々のサブデータセットの標準偏差を計算するという機能を実現するものである。当該ループの特徴により、当該ループに並列化をすれば、１つのスレッドに１つのサブデータセットの標準偏差を計算させて、複数のスレッドで同時に無通信で並列化に実行できるようになる。
【００５９】
２つ目のループにより実現される機能は、経験閾値に基づいて部分データを除去して、残ったデータの平均値を計算するというものである。当該ループに並列化に改良をすれば、ＣＰＵで直列実行する方法を用いて、１つの新たな配列を生成し、その後、次元削減（Reduction）により合計を取得する（以下、次元削減合計と称する）カーネル関数を呼び出して、当該新たな配列におけるデータの合計を計算することができる。
【００６０】
３つ目のループにより実現される機能は、１つ目のループにより生じた結果セットｍ＿ｎｏｉｓｅに対応するデータセットがノイズであるか否かを判定するというものである。その具体的なプロセスは、結果セットｍ＿ｎｏｉｓｅから１つの値を読み取るごとに、当該値を上記経験閾値と比較することで、当該値に対応するデータがノイズであるか否かを判定するというものである。このような事情に対しては、当該ループに並列化にすれば、ｌｅｎｇｔｈ個のスレッドを起動して、各々のスレッドを結果セットｍ＿ｎｏｉｓｅのうち１つの値のみに対応させることで、各々のスレッドがそのスレッドＩＤナンバーによりｍ＿ｎｏｉｓｅから１つの相応の値を読み取るようにすることができる。その後、スレッドＩＤナンバーに基づいて読み取った値と設定閾値を比較して、当該スレッドＩＤナンバーに応じて比較結果を配列ｎｏｉｓｅｌｉｓｔに書き込む。
【００６１】
４つ目のループは、３つ目のループで生じたノイズシーケンスについてクロスチェックをするものである。当該ループで依拠する判断基準は、「１つのサブデータセットの前後の２つのデータセットがいずれもノイズと判定された場合は、当該セグメントのデータセットもノイズである」というものである。機能の実現過程では、配列ｎｏｉｓｅｌｉｓｔから１つのデータ値を読み取るごとに、当該データ値と隣接する前後の２つのデータ値を読み取り、その後、上記判断基準に基づいて当該データ値を修正する。当該ループに並列化する改良をすれば、ｌｅｎｇｔｈ個のスレッドを起動して、各々のスレッドのＩＤナンバーを配列ｎｏｉｓｅｌｉｓｔのうち１つの値のみに対応させられて、そのようにすれば、スレッドがそのＩＤナンバーに従って配列ｎｏｉｓｅｌｉｓｔからそれに対応する値及び当該値の前後に隣接する値を読み取って、その後、読み取った値に基づいて相応の演算をすることができるようになる。
【００６２】
改良後の４つ目のループは並列実行するものであるので、読み取った前後の隣接する値がダーティーリード（Dirty Read）であるか否かを考慮する必要がある。
【００６３】
解析しやすくするため、スレッドのＩＤナンバーに対応する値をａ、ａに隣接する前後の値をそれぞれｆｏｎｔ及びｂａｃｋ、ｆｏｎｔに隣接する前の１つの値をｂ、ｂａｃｋに隣接する後の１つの値をｃと記してもよい。上記の「１つのサブデータセットの前後２つのデータセットがいずれもノイズと判定された場合は、当該セグメントのデータセットもノイズである」という４つ目のループで実行される基準から、書き込む操作が生じるには２つの必須条件がなければならないことを知ることができる。第１に、値が０であるデータのみが対象となること、第２に、当該値の前後に隣接する値が必ず１であることである。仮にｆｏｎｔ又はｂａｃｋの値がその対応するスレッドに読み取られた後、そのうち１つの値が変更されたとすれば、これら２つの条件により、ｆｏｎｔ又はｂａｃｋの値は０であるとともに、ｂ及びａの値は１、又はａ及びｃの値は１でなければならない。言い換えれば、ｆｏｎｔ又はｂａｃｋの値のうちいずれの１つがダーティーリードであるかにかかわりなく、ａの値は必ず１でなければならず、このことがスレッドによるａの処理に影響しないので、ダーティーリードを読み取ってしまっても、ａの値の最終結果に誤りが生じることはない。
【００６４】
従って、４つ目のループでは、並列実行中にダーティーリードを読み取ってしまうことはない。
【００６５】
図４は、本発明の実施例における長インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。図４に示すように、前記長インターバルアーチファクト除去は、複数の前記スレッドによって並列実行され、次のことを含む。
【００６６】
Ｓ４０１：前記GＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記心電信号をホスト端末から前記GＰＵ装置端末のグローバルメモリにコピーする。
【００６７】
Ｓ４０２：長インターバルアーチファクト除去のインターバルに応じて前記心電信号をセグメント化し、各々の前記スレッドで前記GＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて前記グローバルメモリから前記スレッドに対応する１セグメントの心電信号を読み取り、当該セグメントの心電信号の標準偏差を計算して、前記ＩＤナンバーに基づいて前記標準偏差を前記グローバルメモリ中の第１の標準偏差シーケンスに格納する。
【００６８】
Ｓ４０３：標準偏差が設定閾値範囲内にない前記セグメントの心電信号を除去する。
【００６９】
Ｓ４０４：前記スレッドで前記GＰＵ装置端末の次元削減合計カーネル関数を呼び出して、除去がされた後に残ったすべての当該セグメントの心電信号の標準偏差の合計値を計算する。
【００７０】
Ｓ４０５：前記合計値から平均値を求めた上で、前記平均値により第１の閾値範囲を生成する。
【００７１】
Ｓ４０６：各々の前記スレッドで前記カーネル関数を新たに呼び出して、前記ＩＤナンバーに基づいて、除去がされた後に残った前記セグメントの心電信号の標準偏差が前記第１の閾値範囲内にあるか否かを読み取って判定し、前記ＩＤナンバーに基づいて判定結果を前記グローバルメモリ中の第１のノイズシーケンスに格納する。
【００７２】
Ｓ４０７：各々の前記スレッドが前記ＩＤナンバーに基づいて前記第１のノイズシーケンスから前記判定結果及びそれに隣接する前の１つの判定結果と後の１つの判定結果を順次読み取って、前記前の１つの判定結果と前記後の１つの判定結果のいずれの標準偏差も前記第１の閾値範囲内になければ、ノイズであることを示す第１のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、逆の場合であれば、ノイズでないことを示す第２のフラグを前記ＩＤナンバーに基づいて前記第１のノイズシーケンスに格納し、長インターバルアーチファクト除去の結果を生成する。
【００７３】
Ｓ４０８：前記長インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーする。
【００７４】
上記ステップＳ４０１において、スレッドの数は
【数２２】
0006389907.tif 000023
としてよく、各々の前記スレッドの処理する心電信号に対応するサンプリング点の個数はｆ＊Ｔであるが、そのうち、Ｌはホスト端末からコピーされる心電信号のサンプリング点のシーケンス長、ｆは心電信号のサンプリング周波数、Ｔは長インターバルアーチファクト除去のインターバルである。
【００７５】
上記ステップＳ４０２において、標準偏差は、ステップＳ３０３における標準偏差の計算式を用いて計算してもよく、標準偏差
【数２３】
0006389907.tif 000024
【数２４】
0006389907.tif 000025
である。ここで、ｐｊは前記セグメントの心電信号のうちｊつ目のサンプリング点の心電信号、ｊは整数、ｊ≧０で、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルである。
【００７６】
上記ステップＳ４０３において、当該設定閾値の範囲は［０．５、３］としてよい。上記ステップＳ４０５において、第１の閾値範囲の上限と第１の閾値範囲の下限は、それぞれ当該ステップで得られる平均値の３倍と１／３．５倍である。
【００７７】
上記ステップＳ４０７において、長インターバルアーチファクト除去の結果には、心電信号データ、ノイズ／非ノイズフラグ、標準偏差データを含めてもよい。
【００７８】
図５は、本発明の一実施例における長インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。図５に示すように、長インターバルアーチファクト除去の並列実行アルゴリズムには、次のステップが含まれる。
【００７９】
Ｓ５０１：装置端末の変数を宣言して、これに相応のグラフィックメモリを分配した後で、カーネル関数を演算する上で必要な心電信号データをホスト端末から装置端末にコピーする。
【００８０】
Ｓ５０２：最初の心電信号データの長さをＬとして、
【数２５】
0006389907.tif 000026
個のスレッドを起動し、各々のスレッドで、ｆ＊Ｔ個の心電信号データを含む１つのデータセットを処理する。
【００８１】
Ｓ５０３：各々のスレッドでカーネル関数を呼び出して、まず、グローバルメモリから当該セグメントに属する心電信号データを読み取って、当該セグメントの心電信号データの標準偏差Ｍを計算した後に、スレッドのＩＤナンバーｇｉｄに基づいて計算結果をグローバルメモリに書き込み、
【数２６】
0006389907.tif 000027
とする。
【００８２】
Ｓ５０４：すべてのスレッドでステップＳ５０３の演算が完了するまでスレッドを同期する。
【００８３】
Ｓ５０５：経験閾値の範囲［０．５、３０］に基づいて、各セグメントの心電信号データセットの標準偏差が上記経験閾値の範囲内にあるか否かを判定することで、明らかにノイズのある心電信号データのセグメントを除去する。
【００８４】
Ｓ５０６：次元削減合計カーネル関数を呼び出して、残ったデータの合計値を計算する。
【００８５】
Ｓ５０７：ステップＳ５０６で得られた合計値から平均値ｔｅｍｐ＿Ｍを求めた後で、平均値ｔｅｍｐ＿Ｍにより新たな閾値上限と閾値下限を算出する。
【００８６】
Ｓ５０８：各々のスレッドで新たなカーネル関数を呼び出して、まず、それぞれのＩＤナンバーｇｉｄに従ってグローバルメモリから相応の標準偏差を読み取った上で、ステップＳ５０７で生じた閾値上限及び閾値下限に基づいて、当該標準偏差に対応するデータセグメントがノイズセグメントであるか否かを決定する。結果をグローバルメモリｎｏｉｓｅｌｉｓｔ［ｇｉｄ］に書き込んだ後は、スレッドの操作を同期する。
【００８７】
Ｓ５０９：各々のスレッドでまたグローバルメモリからｎｏｉｓｅｌｉｓｔ［ｇｉｄ−１］とｎｏｉｓｅｌｉｓｔ［ｇｉｄ＋１］を読み取って、「あるセグメントの心電信号データの前と後の二つのセグメントの心電信号データがいずれもノイズセグメントである場合、当該セグメントの心電信号データもノイズセグメントと判定する」という判定を実行し、結果をｎｏｉｓｅｌｉｓｔ［ｇｉｄ］書き込む。
【００８８】
Ｓ５１０：カーネル関数から返信した関連するデータを装置端末からホスト端末にコピーして、無用な装置端末の変数を解放し、装置端末のグラフィックメモリとホスト端末のメモリを回収する。
【００８９】
本発明の実施例では、長インターバルアーチファクト除去アルゴリズムがＧＰＵ装置端末で並列に実行されることで、フィルタリング処理の段階でかかる時間を著しく減少させることができる。
【００９０】
実施例の一つにおいて、短インターバルアーチファクト除去アルゴリズムには直列アルゴリズムを用いてもよい。長インターバルアーチファクト除去とコムフィルタによるフィルタリングがされた後で、短インターバルアーチファクト除去によって、心電信号にアーチファクト除去の処理をすることができる。主に、長インターバルアーチファクト除去によって生じたノイズフラグ配列ｎｏｉｓｅｌｉｓｔに基づいて、心電信号データのうちノイズであるとフラグがされていないデータセグメントからより小さいインターバルＴ１のノイズを除去するが、インターバルＴ１の選択は長インターバルアーチファクト除去のインターバルＴに依存するもので、ＴはＴ１の倍数であってもよく、例えば、長インターバルアーチファクト除去のインターバルＴの値を５として、短インターバルアーチファクト除去のインターバルＴ１の値を１として、すなわち、それぞれ５秒のインターバルと１秒のインターバルのアーチファクトを表すようにしてもよい。短インターバルアーチファクト除去の処理中に生じるノイズ配列はｎｏｉｓｅ［ｌｅｎｇｔｈ］と記され、配列の長さは
【数２７】
0006389907.tif 000028
である。
【００９１】
図６は、本発明の実施例における短インターバルアーチファクト除去の直列実行アルゴリズムについてのフローチャートである。図６に示すように、短インターバルアーチファクト除去の直列実行アルゴリズムには、次のステップが含まれる。
【００９２】
Ｓ６０１：環境変数を初期設定する。
【００９３】
Ｓ６０２：長インターバルアーチファクト除去の結果におけるノイズ配列ｎｏｉｓｅｌｉｓｔからデータｎｏｉｓｅｌｉｓｔ［ｉ］を順次読み取る。
【００９４】
Ｓ６０３：データｎｏｉｓｅｌｉｓｔ［ｉ］＝１であれば、ｅｃｇｌｉｓｔ［ｉ＊Ｔ＊ｆ］〜ｅｃｇｌｉｓｔ［（ｉ＋１）＊Ｔ＊ｆ−１］である最初の心電信号データがノイズセグメントであると既にフラグがされていることが示されているため、配列ｔｅｍｐ＿ｎｏｉｓｅにＴ／Ｔ１個の０を順次書き込み、当該ノイズセグメントに対応する心電信号データについて短インターバルアーチファクト除去の処理をしないようにする。
【００９５】
Ｓ６０４：データｎｏｉｓｅｌｉｓｔ［ｉ］＝０である場合、データがｎｏｉｓｅｌｉｓｔ［ｉ］の配列ｅｃｇｌｉｓｔにおいて対応するサフィックスｉ＊Ｔ＊ｆから順次データを読み取り始めて、式Ｓｉ，ｊの値を計算し、Ｓｉ，ｊの値をｔｅｍｐ＿ｎｏｉｓｅ［ｉ＊Ｔ／Ｔ１＋ｊ］に書き込む。
【００９６】
【数２８】
0006389907.tif 000029
【００９７】
ここで、
【数２９】
0006389907.tif 000030
ＴはＴ１の整数倍で、ｐｎはｎつ目の心電信号データの値である。
【００９８】
Ｓ６０５：ノイズ配列ｎｏｉｓｅｌｉｓｔ中のデータをすべて読み終わるまで、Ｓ６０２、Ｓ６０３、Ｓ６０４のステップを繰り返す。
【００９９】
Ｓ６０６：新たに得られたノイズ配列ｔｅｍｐ＿ｎｏｉｓｅについて、そのうちすべての０より大きい値の平均値ｔｅｍｐ＿Ｓを求め、これによって新たな閾値範囲（０、５＊ｔｅｍｐ＿Ｓ］を導き出す。
【０１００】
Ｓ６０７：ステップＳ６０６で導き出された新たな閾値範囲に基づいて判定をし、すなわち、データｔｅｍｐ＿ｎｏｉｓｅ［ｉ］が当該新たな閾値範囲内にある場合、データｔｅｍｐ＿ｎｏｉｓｅ［ｉ］に対応する心電信号データはノイズでなく、ｎｏｉｓｅ［ｉ］＝０で、逆の場合であれば、当該心電信号データはノイズで、ｎｏｉｓｅ［ｉ］＝１と判定して、新たなノイズ配列ｎｏｉｓｅに戻る。配列ｔｅｍｐ＿ｎｏｉｓｅ中のすべてのデータを読み終わるまで当該ステップを繰り返す。
【０１０１】
Ｓ６０８：短インターバルアーチファクト除去アルゴリズムを終了する。
【０１０２】
短インターバルアーチファクト除去の直列アルゴリズムについて解析することで、発明者は、短インターバルアーチファクト除去アルゴリズムには３つの大ループがあることを発見した。
【０１０３】
１つ目のループの機能は、長インターバルアーチファクト除去の結果における非ノイズセグメントのデータに、より短インターバルのアーチファクト除去をすることである。具体的には２つの部分に分けられ、第１には、長インターバルアーチファクト除去がされたノイズ配列から非ノイズセグメントのデータを選別すること、第２には、非ノイズセグメントのデータをより小さいインターバルＴ１でセグメント化して計算することである。ただし、上記の１つ目のループを並列に実行するように改良する場合、上記の２つの部分の直列順序によらず実行してもよい。まず、すべての最初の心電信号データをインターバルＴ１でセグメント化して計算し、相応の数のスレッドリソースを起動して、各々のスレッドの処理するデータセットのサイズをｆ＊Ｔ１として、計算した結果をスレッドのＩＤナンバーに従ってグラフィックメモリに書き込むようにしてもよい。その後、スレッドリソースを起動して、スレッドの数が長インターバルアーチファクト除去の結果におけるノイズ配列の長さに等しいようにして、各々のスレッドがそのＩＤナンバーに従って、長インターバルアーチファクト除去により得られるノイズ配列におけるデータと一対一対応するようにする。さらに、ノイズ配列におけるデータに基づいて、前に計算した結果を補正する。
【０１０４】
２つ目のループの機能は、１つ目のループにより算出された結果配列のうちすべての０より大きいデータの平均値を計算することである。並列化にする場合、まず、０より大きいデータを逐次選別した上で、０より大きいデータを新たな仮配列に書き込み、その後、次元削減合計カーネル関数を呼び出して、当該仮配列におけるデータの合計を計算することで、すべての０より大きいデータの平均値を導き出す。
【０１０５】
３つ目のループの機能は、前の２つのループにおける計算結果に基づいて新たなノイズ配列を得ることであるが、それを並列化にすることは、相応の数のスレッドリソースを起動して、各々のスレッドがそのＩＤナンバーに従って、当該ＩＤナンバーに対応するデータがノイズであるか否かを判定し、結果をグローバルグラフィックメモリに書き込むことになる。
【０１０６】
図７は、本発明の実施例における短インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。図７に示すように、短インターバルアーチファクト除去の並列実行アルゴリズムには、次のステップが含まれる。
【０１０７】
Ｓ７０１：前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、前記長インターバルアーチファクト除去がされた心電信号をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーする。
【０１０８】
Ｓ７０２：短インターバルアーチファクト除去のインターバルＴ１に応じて前記心電信号をセグメント化し、各々の前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出して、前記ＩＤナンバーに基づいて１セグメントの心電信号を読み取り、式Ｓの値を計算して、前記ＩＤナンバーに基づいて前記式の値を前記グローバルメモリ中の第２のノイズ配列に格納するが、そのうち、式Ｓは
【数３０】
0006389907.tif 000031
で、ここで、ｓｕｍは前記セグメントの心電信号中のすべての心電信号の二乗和である。
【０１０９】
Ｓ７０３：前記スレッドの数及びその処理する心電信号に対応するサンプリング点の個数を修正して、各々の修正後のスレッドでカーネル関数を呼び出し直し、前記修正後のスレッドのＩＤナンバーに基づいて、その唯一対応する前記長インターバルアーチファクト除去の結果における第１のノイズ配列中の１つのフラグ値を読み取り、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を第３のフラグによって表示する。
【０１１０】
Ｓ７０４：前記第３のフラグに基づいて、ノイズであることを示す前記フラグ値に対応するセグメントの心電信号を逐次除外する。
【０１１１】
Ｓ７０５：前記修正後のスレッドで前記ＧＰＵ装置端末における次元削減合計カーネル関数を呼び出し、除外がされた後に残ったすべての心電信号の合計値を計算する。
【０１１２】
Ｓ７０６：前記合計値から平均値を求め、前記平均値により第２の閾値範囲を生成する。
【０１１３】
Ｓ７０７：前記スレッドの数及びその処理する心電信号に対応する数を再度修正して、再修正後の前記スレッドでカーネル関数を再度呼び出し直し、再修正後の前記スレッドのＩＤナンバーに基づいて、前記第２の閾値範囲内にない各々の前記式の値を前記第２のノイズ配列から読み取って除去し、短インターバルアーチファクト除去の結果を生成する。
【０１１４】
Ｓ７０８：前記短インターバルアーチファクト除去の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーする。
【０１１５】
上記ステップＳ７０２においては、まず、短インターバルアーチファクト除去のインターバルに応じて心電信号をセグメント化してから、心電信号に並列的に短インターバルアーチファクト除去をすることで、並列処理の複雑さを簡素化して、プログラミングを実現する作業量を減少することができる。
【０１１６】
上記ステップＳ７０２において、各々の前記スレッドで処理する心電信号のサンプリング点の個数はｆ＊Ｔ１、前記スレッドの数
【数３１】
0006389907.tif 000032
としてよいが、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点の配列の長さ、ｆは心電信号のサンプリング点の周波数である。１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ個の前記スレッドを設定することができるが、各々の前記スレッドブロックに対応する心電信号のサンプリング点の個数は上記式（１）によって導き出され、すなわち、
【数３２】
0006389907.tif 000033
としてよく、スレッドブロックの数は上記式（２）によって導き出され、すなわち、
【数３３】
0006389907.tif 000034
としてよい。
【０１１７】
上記ステップＳ７０３において、修正後のスレッドの数
【数３４】
0006389907.tif 000035
としてよいが、ここで、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点の配列長配列の長さ、ｆは心電信号のサンプリング周波数、Ｔは前記長インターバルアーチファクト除去のインターバルである。１つのスレッドブロックに対して
【数３５】
0006389907.tif 000036
個の修正後のスレッドが対応してもよく、スレッドブロックの数は上記式（２）に基づいて算出することができ、
【数３６】
0006389907.tif 000037
としてよい。ここで、Ｌ１はすべての前記長インターバルアーチファクト除去の結果における第１のノイズ配列の長さである。
【０１１８】
上記ステップＳ７０７において、再修正後のスレッドの数
【数３７】
0006389907.tif 000038
としてよく、各々の再修正後のスレッドは１つの前記式の値に対応して処理することができ、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ２個の前記再修正後のスレッドが対応してもよく、前記スレッドブロックの数は上記式（２）に基づいて算出することができ、
【数３８】
0006389907.tif 000039
としてよく、Ｌは前記ホスト端末からコピーされる心電信号のサンプリング点の配列の長さである。短インターバルアーチファクト除去の結果には、心電データ、ノイズ／非ノイズフラグ、Ｓの値を含めてもよい。
【０１１９】
本発明の実施例では、短インターバルアーチファクト除去アルゴリズムに並列実行アルゴリズムを用いることで、フィルタリングの段階でかかる時間を減らして、心電信号を解析するスピードを高めることができる。
【０１２０】
本発明の実施例において、Ｒ波位置抽出に用いるアルゴリズムは、数理形態学変換（Mathematical Morphology、ＭＭ）アルゴリズムであってもよく、具体的には、数理形態学変換アルゴリズムにおける侵食演算と膨張演算、すなわち、まず、データを侵食演算してから、その後で侵食演算がされたデータを膨張演算するというものである。本発明の実施例では、直列アルゴリズムを利用して侵食演算をしても良い。侵食演算において、侵食ウィンドウの大きさを５として、スライディングレートを１とする。心電信号データｅｃｇｌｉｓｔから１つのデータ、及び当該データに隣接するその後の４つのデータを読み取るごとに、その後で、読み取った５つのデータをそれぞれ異なる程度で侵食演算して、そのうちの最小値を導き出し、当該最小値を仮配列ｆ０に書き込む。膨張演算は、侵食演算がされて得られた仮配列ｆ０を基礎として行うことができる。膨張演算において、同じように膨張ウィンドウの大きさを５として、スライディングレートを１としてよい。配列ｆ０から１つのデータ、及びそれに隣接するその後の４つのデータを読み取るごとに、読み取った５つのデータをそれぞれ異なる程度で膨張演算して、そのうちの最大値を導き出し、当該最大値を仮配列ｆ１に書き込む。
【０１２１】
図８は、本発明の一実施例における短インターバルアーチファクト除去の並列実行アルゴリズムについてのフローチャートである。図８に示すように、短インターバルアーチファクト除去の並列実行アルゴリズムには、次のステップが含まれる。
【０１２２】
Ｓ８０１：装置端末に必要な変数を宣言して、これに相応のグラフィックメモリを分配した後で、カーネル関数に必要な関連データをホスト端末から装置端末にコピーする。
【０１２３】
Ｓ８０２：スレッドブロックにおけるスレッドの数ＴｈｒｅａｄｓＰｅｒＢｌｏｃｋと各々のスレッドが処理するデータ量ＤａｔａＰｅｒＴｈｒｅａｄ＝ｆ＊Ｔ１を定義した後で、上記の式（１）及び式（２）に基づいて、起動することが必要なスレッドブロックの数を算出して、ｋｅｒｎｅｌ＿１関数を起動し、各々のスレッドでそのＩＤナンバーｇｉｄに従って心電データからサフィックスがｇｉｄ＊ｆ＊Ｔ１から（ｇｉｄ＋１）＊ｆ＊Ｔ１−１の間であるデータを読み取った上で、式
【数３９】
0006389907.tif 000040
に基づいて、計算した結果を仮配列ｎｏｉｓｅでスレッドＩＤナンバーｇｉｄに対応するサフィックスの位置に書き込むが、ここで、ｓｕｍは当該スレッドに対応するデータセット中のデータの二乗和である。
【０１２４】
Ｓ８０３：スレッドブロックにおけるスレッドの数ＴｈｒｅａｄｓＰｅｒＢｌｏｃｋと、各々のスレッドが処理するデータ量ＤａｔａＰｅｒＴｈｒｅａｄと、データ量
【数４０】
0006389907.tif 000041
（関連変数は、長インターバルアーチファクト除去において既に定義されており、ここでいうｎは、長インターバルアーチファクト除去により得られたノイズ配列の長さである）を修正して、上記の式（１）、（２）に基づいてスレッドブロックの数を算出し、ｋｅｒｎｅｌ＿２関数を起動する。スレッドの数は長インターバルアーチファクト除去により得られたノイズ配列ｎｏｉｓｅｌｉｓｔの長さに等しく、すなわち、ｋｅｒｎｅｌ＿２では、各々のスレッドがスレッドＩＤナンバーに従ってｎｏｉｓｅｌｉｓｔ中の１つのデータに唯一対応することができるので、ｋｅｒｎｅｌ＿２では、各々のスレッドがスレッドＩＤナンバーに従ってｎｏｉｓｅｌｉｓｔから相応のデータを読み取り、ｎｏｉｓｅｌｉｓｔ［ｇｉｄ］＝１の場合、配列ｎｏｉｓｅ中のサフィックスがｇｉｄ＊Ｔから（ｇｉｄ＋１）＊Ｔ−１までの値を０にする。
【０１２５】
Ｓ８０４：配列ｎｏｉｓｅ中の０の値を直列に除外した上で、０の値のない１つの新しい仮配列ｔｅｍｐ＿ｎｏｉｓｅを生成させ、次元削減合計カーネル関数を呼び出して仮配列の平均値を計算する。
【０１２６】
Ｓ８０５：仮配列の平均値から新たな閾値範囲を導き出す。
【０１２７】
Ｓ８０６：各々のスレッドブロックにおけるスレッドの数ＴｈｒｅａｄｓＰｅｒＢｌｏｃｋを修正して、配列ｎｏｉｓｅの長さ
【数４１】
0006389907.tif 000042
に基づいて、起動することが必要なスレッドブロックの数ＢｌｏｃｋＮｕｍを算出して、ｋｅｒｎｅｌ＿３関数を呼び出して、各々のスレッドがグローバルメモリからｎｏｉｓｅ［ｇｉｄ］を読み取った上で、ステップＳ８０５で生成した閾値範囲と比較して、ノイズであるか否かを判定し、最後に短インターバルアーチファクト配列ｎｏｉｓｅｌｉｓｔ＿２を生成する。
【０１２８】
Ｓ８０７：関連データを装置端末からホスト端末にコピーして、無用な装置端末の変数を解放し、装置端末のグラフィックメモリとホスト端末のメモリを回収する。
【０１２９】
一つの実施例において、Ｒ波位置抽出のアルゴリズムには直列アルゴリズムを用いる。図９は、本発明の実施例におけるＲ波位置抽出の直列実行アルゴリズムについてのフローチャートである。図９に示すように、Ｒ波位置抽出の直列実行アルゴリズムには、次のステップが含まれる。
【０１３０】
Ｓ９０１：膨張演算と侵食演算のウィンドウサイズｗ＝５と勾配ｋ［ｗ］＝｛０、５０、１００、５０、０｝を定義する。
【０１３１】
Ｓ９０２：心電信号データｅｃｇｌｉｓｔから１つの心電信号データｅｃｇｌｉｓｔ［ｉ］、及びその直後の４つの心電信号データｅｃｇｌｉｓｔ［ｉ＋１］、ｅｃｇｌｉｓｔ［ｉ＋２］、ｅｃｇｌｉｓｔ［ｉ＋３］、ｅｃｇｌｉｓｔ［ｉ＋４］を順次読み取って、それぞれＳ９０１において対応する勾配とそれぞれ異なる程度の侵食演算をして最小値を導き出し、配列ｆ０［ｉ］に書き込む。
【０１３２】
Ｓ９０３：配列ｅｃｇｌｉｓｔに４つのデータだけが残るまでステップＳ９０２を繰り返す。
【０１３３】
Ｓ９０４：心電信号データｅｃｇｌｉｓｔ中の最後の４つの心電信号データｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋１］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋２］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋３］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋４］を最大限侵食演算した上で、侵食演算の結果をｆ０［ｎｕｍ＿ｒｅａｄ−ｗ＋１］、ｆ０［ｎｕｍ＿ｒｅａｄ−ｗ＋２］、ｆ０［ｎｕｍ＿ｒｅａｄ−ｗ＋３］、ｆ０［ｎｕｍ＿ｒｅａｄ−ｗ＋４］に書き込む。
【０１３４】
Ｓ９０５：侵食演算を終了する。
【０１３５】
Ｓ９０６：侵食演算で得られた結果セット配列ｆ０を膨張演算して、配列ｆ０から１つのデータｆ０［ｉ］、及びその後のデータｆ０［ｉ＋１］、ｆ０［ｉ＋２］、ｆ０［ｉ＋３］、ｆ０［ｉ＋４］を順次読み取って、それぞれＳ９０１において対応する勾配と相応の程度で膨張演算をして最大値を導き出し、配列ｆ１［ｉ］に書き込む。
【０１３６】
Ｓ９０７：配列ｆ０に最後の４つのデータが残るまでステップＳ９０６を繰り返す。
【０１３７】
Ｓ９０８：ステップＳ９０７で残った最後の４つのデータをそれぞれ最大限膨張演算して、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋１］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋２］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋３］、ｅｃｇｌｉｓｔ［ｎｕｍ＿ｒｅａｄ−ｗ＋４］にそれぞれ１００を加えてからｆ１［ｎｕｍ＿ｒｅａｄ−ｗ＋１］、ｆ１［ｎｕｍ＿ｒｅａｄ−ｗ＋２］、ｆ１［ｎｕｍ＿ｒｅａｄ−ｗ＋３］、ｆ１［ｎｕｍ＿ｒｅａｄ−ｗ＋４］に書き込む。
【０１３８】
Ｓ９０９：膨張演算を終了する。
【０１３９】
最後に、データｅｃｇｌｉｓｔ［ｉ］とデータｆ１［ｉ］の間の差分値を計算した上で、すべての差分値の平均値を計算し、当該平均値をグローバルグラフィックメモリに書き込む。計算の結果に戻って数理形態学変換アルゴリズムを終了する。
【０１４０】
Ｒ波位置抽出の直列実行アルゴリズムについて分析することで、発明者は、上記の直列解析アルゴリズムで、すべての心電データに一括に数理形態学の膨張演算と侵食演算がされるのでなく、複数回に分けて行われることを発見した。フィルタリング処理がされた心電データから一定数（ｎｕｍ＿ｒｅａｄ）の心電データを読み取るごとに、その後で、読み取った当該一部の心電データに膨張演算と侵食演算をして、演算結果に基づいて相応の論理的判断をすることで、当該セグメントの心電データにおけるすべてのＲ波位置を抽出する。Ｒ波位置抽出のアルゴリズムに並列化する改良をする場合、「１対１」の方式を用いて行うことになる。
【０１４１】
カーネル関数を呼び出して膨張演算と侵食演算をするたびに、データ量と等量のスレッドリソースを起動することで、各々のスレッドがそのＩＤナンバーに従って唯一の心電データ点を見つけ出せるようにすることができる。その後、当該データ及びその後に隣接する４つのデータに膨張演算と侵食演算をした上で、計算結果をスレッドのＩＤナンバーに従ってグローバルグラフィックメモリに書き込む。この並列的なプロセスにおいて、発明者は、プロセスでカーネル関数が数回に渡って呼び出され、また、これが呼び出されるごとにそれまでにその回のカーネル関数に必要なデータがＣＰＵ端末のメモリからＧＰＵ端末のグラフィックメモリに書き込まれるので、ＣＰＵとＧＰＵの間で頻繁に繰り返されるデータ伝送がプロセスの実行効率に著しく影響することをさらに発見した。次の実施例で、発明者は、これをさらに改良した。
【０１４２】
図１０は、本発明の実施例におけるＲ波位置抽出の並列実行アルゴリズムについてのフローチャートである。図１０に示すように、Ｒ波位置抽出の並列実行アルゴリズムには、次のステップが含まれる。
【０１４３】
Ｓ１００１：前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、フィルタリング処理がされた前記心電信号をホスト端末のメモリから前記ＧＰＵ装置端末のグローバルメモリにコピーする。
【０１４４】
Ｓ１００２：各々の前記スレッドでカーネル関数を呼び出し、そのＩＤナンバーにより対応させて、フィルタリング処理がされた前記心電信号から１つの検波しようとする心電信号を読み取る。
【０１４５】
Ｓ１００３：前記スレッドが、設定されたウィンドウサイズｗと設定された勾配に応じて、読み取った前記の検波しようとする心電信号及びその直後のｗ−１個の検波しようとする心電信号をそれぞれ異なる程度で侵食演算して、侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値を、前記ＩＤナンバーに基づいて前記グローバルメモリ中の第１の仮シーケンスに格納するが、Ｗは整数、ｗ≧２である。
【０１４６】
Ｓ１００４：各々の前記スレッドで前記ＩＤナンバーに基づいて前記第１の仮シーケンスから１つの前記最小値を読み取る。
【０１４７】
Ｓ１００５：前記の設定されたウィンドウサイズと前記の設定された勾配に応じて、読み取った前記最小値及びその直後のｗ−１個の前記最小値をそれぞれ異なる程度で膨張演算して、前記ＩＤナンバーに基づいて、膨張演算がされた後の読み取った前記最小値及びその後にすぐ隣接するｗ−１個の前記最小値のうちの最大値を、前記グローバルメモリ中の第２の仮シーケンスに格納する。
【０１４８】
Ｓ１００６：前記ＩＤナンバーに基づいて前記の検波しようとする心電信号を読み取って前記最大値との差分値を計算し、前記差分値を前記グローバルメモリ中の第３の仮シーケンスに格納する。
【０１４９】
Ｓ１００７：前記スレッドで次元削減合計カーネル関数を呼び出して前記第３の仮シーケンス中のすべての前記差分値の合計値を計算する。
【０１５０】
Ｓ１００８：前記合計値から平均値を求める。
【０１５１】
Ｓ１００９：前記平均値を前記ＧＰＵ装置端末から前記ホスト端末にコピーする。
【０１５２】
本発明の実施例では、Ｒ波位置抽出の並列実行アルゴリズムにおいて、フィルタリング処理がされた心電データのすべてがＧＰＵのグラフィックメモリに書き込まれ、フラグビットが設けられて、読み込む位置のフラグが立てる。カーネル関数は、実行される時に、フラグビットに基づいてグラフィックメモリからその回で必要な心電データが読み取ると同時にフラグビットを更新する。当該方法では、データの準備がＣＰＵ端末からＧＰＵに移転されることで、この過程でＣＰＵのメモリからＧＰＵのグラフフィックメモリにデータを書き込むことが１回だけ発生するようにされ、データ伝送にかかる時間が大幅に減らされている。
【０１５３】
本発明の実施例では、ステップＳ１００８により平均値が得られた後、当該平均値に基づいてホスト端末で引き続きＲ波の位置を算出しても良い。
【０１５４】
上記ステップＳ１００３においては、さらに、侵食演算がされた後の読み取った前記の検波しようとする心電信号及び前記のｗ−１個の検波しようとする心電信号のうちの最小値をレジスターに格納してもよい。上記ステップＳ１００４においては、当該レジスターから１つの最小値を読み取ってから、グローバルメモリから当該最小値に隣接するｗ−１個の最小値を読み取る。
【０１５５】
このようにすれば、グローバルメモリとレジスターから同時にデータを読み取ることで、Ｒ波位置抽出のスピードをさらに高めることができる。
【０１５６】
上記ステップＳ１００３において、設定されたウィンドウサイズと設定された勾配は複数の異なる設定値としてもよい。例えば、当該設定されたウィンドウサイズｗ＝５、当該設定された勾配はｋ［ｗ］＝｛０、５０、１００、５０、０｝とする。
【０１５７】
上記ステップＳ１００２において、当該スレッドの数は、ホスト端末からコピーされる心電信号のサンプリング点のシーケンス長Ｌ３と等しくしてもよく、１つのスレッドブロックに対してＴｈｒｅａｄｓＰｅｒＢｌｏｃｋ３個の当該スレッドを設定してもよく、当該スレッドブロックの数を
【数４２】
0006389907.tif 000043
としてよい。このようにして、並列アルゴリズムの複雑さを低減することができる。
【０１５８】
図１１は、本発明の一実施例におけるＲ波位置抽出の並列実行アルゴリズムについてのフローチャートである。図１１に示すように、Ｒ波位置抽出の並列実行アルゴリズムには、次のステップが含まれる。
【０１５９】
Ｓ１１０１：データの規模とＧＰＵ自体のパラメータによる制限により、起動することが必要なスレッドブロックの数ＢｌｏｃｋＮｕｍと各々のスレッドブロックにおけるスレッドの数ｔｈｒｅａｄＰｅｒＢｌｏｃｋを決定して、全体のスレッドの数をデータ量と等しくする。
【０１６０】
Ｓ１１０２：ｋｅｒｎｅｌ＿１関数を呼び出して、当該カーネル関数で、各々のスレッドでそのＩＤナンバーｇｉｄに基づいてグローバルグラフィックメモリから相応の心電データ及びその後の４つのデータを読み取り、その後、これら５つのデータをそれぞれ異なる程度で侵食演算して、導き出された最小値を再度スレッドのＩＤナンバーに基づいて仮のｄ＿ｆ０［ｇｉｄ］とレジスターに書き込む。
【０１６１】
Ｓ１１０３：スレッドを同期して、すべてのスレッドでステップＳ１１０２における侵食演算が完了するようにする。
【０１６２】
Ｓ１１０４：侵食演算を完了し、侵食演算により得られた結果に基づいて膨張演算をする。
【０１６３】
Ｓ１１０５：当該カーネル関数で、スレッドでまずレジスターからデータｄ＿ｆ０［ｇｉｄ］を読み取ってから、スレッドのＩＤナンバーに基づいてグラフィックメモリから４つの隣接するデータｄ＿ｆ０［ｇｉｄ＋１］、ｄ＿ｆ０［ｇｉｄ＋２］、ｄ＿ｆ０［ｇｉｄ＋３］、ｄ＿ｆ０［ｇｉｄ＋４］を順次読み取り、その後、これら５つのデータをそれぞれ異なる程度で膨張演算した上で、導き出された最大値をスレッドのＩＤナンバーに基づいてグローバルメモリ中の仮のｄ＿ｆ１［ｇｉｄ］に書き込む。
【０１６４】
Ｓ１１０６：膨張演算を完了し、他の演算をする。
【０１６５】
Ｓ１１０７：ｋｅｒｎｅｌ＿２関数を呼び出し、当該カーネル関数で、配列中のｄ＿ｅｃｇｌｉｓｔ［ｇｉｄ］と侵食演算と膨張演算により得られた結果ｄ＿ｆ１［ｇｉｄ］の間の差分値を計算して、ｄ＿ｓ１［ｇｉｄ］に書き込む。
【０１６６】
Ｓ１１０８：次元削減合計カーネル関数を呼び出して、配列ｄ＿ｓ１中のデータを次元削減合計した上で、最終的な結果を配列ｄ＿ｓｕｍ＿ｓ１に書き込む。
【０１６７】
Ｓ１１０９：配列ｓ１中のデータセットの平均値ｄ＿ｍｅａｎを計算する。
【０１６８】
Ｓ１１１０：計算結果を装置端末からホスト端末にコピーして、無用な変数を解放し、メモリを回収する。
【０１６９】
本発明の実施例では、ＱＲＳ波群の開始・停止位置の抽出に、ピーク値群を特定する方法を採用しても良い。Ｒ波付近の山と谷を探し出した上で、設定閾値に基づいてＱＲＳ波群のエッジ位置を特定する。ＱＲＳ波群の開始位置の抽出に必要な特徴パラメータは、Ｒ波位置の抽出に依存する。ＱＲＳ波群幅の計算は、主に配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔと配列ＱＲＳ＿ｅｎｄｌｉｓｔの２つの配列に依拠する。配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔにはＱＲＳ波群の開始点が格納され、配列ＱＲＳ＿ｅｎｄｌｉｓｔにはＱＲＳ波群の停止点が格納されているので、両者の間の差分値がＱＲＳ波の幅となる。
【０１７０】
一実施例では、ＱＲＳ波群幅抽出に直列アルゴリズムを用いて実行する。図１２は、本発明の実施例におけるＱＲＳ波群幅抽出の直列実行アルゴリズムについてのフローチャートである。図１２に示すように、直列アルゴリズムを実行中に、ＱＲＳ波群の開始点の配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔとＱＲＳ波群の停止点の配列ＱＲＳ＿ｅｎｄｌｉｓｔからＱＲＳ波群の開始位置ＱＲＳ＿ｓｔａｒｔｌｉｓｔ［ｉ］と停止位置ＱＲＳ＿ｅｎｄｌｉｓｔ［ｉ］を順次読み取り、開始位置ＱＲＳ＿ｓｔａｒｔｌｉｓｔ［ｉ］と停止位置ＱＲＳ＿ｅｎｄｌｉｓｔ［ｉ］の差分値ＱＲＳｌｉｓｔを求めてから、設定閾値８０に基づいて、当該差分値ＱＲＳｌｉｓｔを記録するか否かを判断する。
【０１７１】
実施例のもう一つでは、ＱＲＳ波群幅抽出に並列アルゴリズムを用いて実行する。配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔと配列ＱＲＳ＿ｅｎｄｌｉｓｔの長さに応じて相応の数のスレッドリソースを起動し、その後、各々のスレッドでそのＩＤナンバーｇｉｄに基づいてそれぞれ配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔと配列ＱＲＳ＿ｅｎｄｌｉｓｔから相応のデータを読み取って両者の間の差分値を並列計算すると、相応のＱＲＳ波群の幅が得られ、最後に、またスレッドのＩＤナンバーに基づいてＱＲＳ波群の幅をグローバルグラフィックメモリに書き込む。
【０１７２】
図１３は、本発明の実施例におけるＱＲＳ波群幅抽出の並列実行アルゴリズムについてのフローチャートである。図１３に示すように、ＱＲＳ波群幅抽出の並列実行アルゴリズムには、次のステップが含まれる。
【０１７３】
Ｓ１３０１：前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、ＱＲＳ波群の開始・停止位置の抽出結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーする。
【０１７４】
Ｓ１３０２：前記スレッドで前記ＧＰＵ装置端末のカーネル関数を呼び出し、そのＩＤナンバーに基づいて、前記のＱＲＳ波群の開始・停止位置の抽出結果における開始位置と停止位置を読み取って、前記の開始位置と停止位置の差分値を計算し、前記ＩＤナンバーに基づいて前記差分値を前記グローバルメモリに格納し、ＱＲＳ波群幅抽出の結果を生成する。
【０１７５】
Ｓ１３０３：前記のＱＲＳ波群幅抽出の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーする。
【０１７６】
本発明の実施例では、ホスト端末でピーク値群決定法によってＱＲＳ波群の前記開始位置と前記停止位置を得ることができる。並列実行しにくいステップはホスト端末で直列実行すれば、ＣＰＵとＧＰＵの間でデータをコピーすることにかかる時間を減らせる。
【０１７７】
上記ステップＳ１３０２においては、データの規模とＧＰＵ自体のパラメータによる制限により、起動することが必要なスレッドブロックの数ｂｌｏｃｋｎｕｍと各々のスレッドブロックにおけるスレッドの数ｔｈｒｅａｄｓＰｅｒＢｌｏｃｋを決定してもよい。起動するスレッドの総数はｂｌｏｃｋｎｕｍ＊ｔｈｒｅａｄＰｅｒＢｌｏｃｋとしてよい。スレッドでそのＩＤナンバーｇｉｄに基づいてそれぞれグローバルメモリ中のＱＲＳ波群の開始位置の配列ＱＲＳ＿ｓｔａｒｔｌｉｓｔとＱＲＳ波群の停止位置の配列ＱＲＳ＿ｅｎｄｌｉｓｔから相応の開始位置データＱＲＳ＿ｓｔａｒｔｌｉｓｔ［ｇｉｄ］と停止位置データＱＲＳ＿ｅｎｄｌｉｓｔ［ｇｉｄ］を読み取って、ＱＲＳ波群幅を算出した上で、再度スレッドのＩＤナンバーに基づいて計算結果をＱＲＳｌｉｓｔ［ｇｉｄ］に書き込む。
【０１７８】
本発明の実施例において、用いられるＱＲＳ波群の開始位置と停止位置は、ホスト端末で算出することができる。
【０１７９】
本発明の実施例において、異常波形分類の直列アルゴリズムは４段階に分けられる。
【０１８０】
第１段階で、１３種類又は複数種類の心拍を個別に判定する。
【０１８１】
第２段階で、ノイズに著しく影響されたデータセグメント、振幅の小さすぎる心拍及び心房性早期収縮、心室性早期収縮を判定する。
【０１８２】
第３段階で、心拍漏れ及び心拍停止を判定する。
【０１８３】
第４段階で、すべての異常波に対してテンプレート照合法を使用する。
【０１８４】
上記異常波形分類の４つのステップのアルゴリズムについて解析することで、発明者は、第４段階のテンプレート照合にかかる時間でアルゴリズム全体の９５％以上を占めているので、最も多く時間のかかる部分を並列して加速することが可能であることを発見した。テンプレート照合法は、各々の異常心拍付近にＱＲＳテンプレートを構築するものである。テンプレート照合法の核心部分にかかる時間は最も多く、当該核心部分では識別シーケンスを生成する。識別シーケンスは、ＲＲインターバルＲＲｌｉｓｔに基づいて生成する。そのうち、識別子には−１、０、１の３つの値が含まれる。
【０１８５】
図１４は、本発明の実施例におけるテンプレート作成の並列実行アルゴリズムについてのフローチャートである。図１４に示すように、テンプレート作成の並列実行アルゴリズムには、次のステップが含まれる。
【０１８６】
Ｓ１４０１：前記ＧＰＵ装置端末の変数を宣言して、それに相応のグラフィックメモリを分配し、Ｒ波位置抽出の結果をホスト端末から前記ＧＰＵ装置端末のグローバルメモリにコピーする。
【０１８７】
Ｓ１４０２：前記スレッドでカーネル関数を呼び出して、そのＩＤナンバーに基づいて、前記のＲ波位置抽出の結果におけるＲＲインターバルを読み取り、設定基準に基づいて各々の前記ＲＲインターバルの識別子を取得した上で、前記ＩＤナンバーに基づいて前記識別子を前記グローバルメモリに格納して、テンプレート作成の結果を生成する。
【０１８８】
Ｓ１４０３：前記のテンプレート作成の結果を前記ＧＰＵ装置端末から前記ホスト端末にコピーする。
【０１８９】
本発明の実施例において、ＲＲインターバルは、ホスト端末でＲ波位置抽出の結果から算出してもよい。
【０１９０】
上記ステップＳ１４０２において、当該設定基準には、次のようにすることが含まれてもよい。
【０１９１】
（１）ｉつ目のＲＲインターバルＲＲｌｉｓｔ［ｉ］に隣接するｉ＋１つ目のＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にない場合、前記ＲＲインターバルのデータであるＲＲｌｉｓｔ［ｉ］の識別子は−１となるが、そのうち、ｉは整数、ｉ≧０である。
【０１９２】
（２）前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にない場合、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］の識別子は０となるが、そのうち、ＲＲｍｅａｎはすべての前記ＲＲインターバルの平均値である。
【０１９３】
（３）前記ＲＲインターバルＲＲｌｉｓｔ［ｉ＋１］が区間（０．６＊ＲＲｌｉｓｔ［ｉ］、１．５＊ＲＲｌｉｓｔ［ｉ］）にあって、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］が区間（０．８＊ＲＲｍｅａｎ、１．３＊ＲＲｍｅａｎ）にある場合、前記ＲＲインターバルＲＲｌｉｓｔ［ｉ］の識別子は１となる。
【０１９４】
上記ステップＳ１４０２においては、データの規模とＧＰＵ自体のパラメータによる制限により、起動することが必要なスレッドブロックの数ｂｌｏｃｋｎｕｍと各々のスレッドブロックにおけるスレッドの数ｔｈｒｅａｄＰｅｒＢｌｏｃｋを決定してもよい。起動するスレッドの個数はｂｌｏｃｋｎｕｍ＊ｔｈｒｅａｄＰｅｒＢｌｏｃｋとしてよい。各々のスレッドでそのＩＤナンバーに従ってグローバルグラフィックメモリから相応のＲＲインターバルのデータを読み取った上で、上記の３つの基準に基づいて相応の識別子を得て、スレッドＩＤナンバーに従って結果をｄ＿ＦＬＡＧＲｌｉｓｔ［ｇｉｄ］に書き込む。
【０１９５】
テンプレートは異常心拍付近に作成されるが、異常心拍が発見された場合には、テンプレート作成関数を呼び出してテンプレートを作成しなければならないので、異常波形が非常に多い場合には、この段階で大量の時間がかかってしまう。本発明の実施例では、テンプレート作成のたびに識別シーケンスを生成し直さなくてもよいので、本発明の実施例は、識別シーケンスの生成とテンプレートの作成を最適化することで、異常波形分類にかかる時間を著しく減らすことができている。
【０１９６】
本発明の実施例における心電信号の並列解析方法は、心電信号の直列解析方法と常に同じ正確度が保たれている。２４時間の長時間心電信号データを使用して直列アルゴリズムと並列アルゴリズムを数回試験し、その後、その平均値を求めて心電信号解析の各段階における速度向上比を導き出すと、表１に示す通りとなった。
【０１９７】
表１は、直列実行時間及び並列実行時間並びにそれぞれに対応する速度向上比である。
【０１９８】
【表１】
0006389907.tif 000044
【０１９９】
表１中のデータを比較すると、次のことを分かった。心電信号解析のフィルタリング段階で、長インターバルアーチファクト除去アルゴリズムの直列実行にかかる時間は平均３９２ミリ秒、並列化の設計と最適化がされた後の平均実行時間は５４ミリ秒、得られた速度向上比は７．３である。短インターバルアーチファクト除去アルゴリズムの直列実行時間は平均２６１ミリ秒、並列化の設計と最適化がされた後の平均実行時間は４４ミリ秒、得られた速度向上比は５．９である。心電信号のＱＲＳ波検出をする段階で、数理形態学的な膨張演算と侵食演算の直列実行速度は１６８５ミリ秒であるが、並列化の設計と最適化がされた後の平均実行時間は１６０ミリ秒、速度向上比は１０．５である。ＱＲＳ波群幅を計算する直列実行時間は７ミリ秒、並列に実行して加速された後の平均実行時間は６．８ミリ秒で、速度向上比は１に近くなる。心率異常波形分類アルゴリズムの直列実行時間の平均値は１５６２ミリ秒、並列に実行して加速された後の実行時間は３０．２ミリ秒、得られた速度向上比は４８．５である。
【０２００】
各アルゴリズムを並列して加速される前後の実行時間を比較する過程で、アルゴリズムの直列実行時間が長いときには、並列して加速することで得られる速度向上比が大きくなり、アルゴリズムの直列実行時間が短いときには、速度向上比が小さいことがわかる。
【０２０１】
それぞれ異なる時間長の心電信号サンプルセットを使用して、本発明の実施例における並列アルゴリズムを数回に渡って分析試験し、平均解析時間を導き出すと、表２に示す通りとなった。表２からわかるように、異常波形が多いほど解析時間も長くなるが、本発明の実施例における心電信号の並列解析方法は、それぞれ異なる時間長の心電信号データファイルによく適応することができる。解析時間はいずれも２秒以内に保つことができ、時間長が２４時間である心電信号データの平均解析時間は１．９秒である。仮に、家庭向けのヘルス・クラウド・プラットフォームにアップロードされる心電信号データが毎日の各時間帯に均等に分布するとすれば、「ＣＰＵ＋ＧＰＵ」サーバー１台で１日に２４時間リアルタイム解析できる長時間心電信号データの量は４４９２０となる。それで、家庭向けのヘルス・クラウド・プラットフォームに７台の「ＣＰＵ＋ＧＰＵ」サーバーを配備して構成されるアルゴリズムサーバークラスターさえあれば、毎日３０万本もの２４時間の長時間心電信号データを迅速に解析するというニーズを満足することができる。
【０２０２】
以下の表２はそれぞれ異なる時間長の心電データの解析時間である。
【０２０３】
【表２】
0006389907.tif 000045
【０２０４】
本発明では、「ＧＰＵ＋ＣＰＵ」異種並列システムを使用することで長時間心電データの解析過程が速められ、まず、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、画像処理装置）加速技術を使用することで、心電直列アルゴリズムにおいて並列化可能で多くの時間のかかる部分を並列化し、命令レベルから心電の解析過程を速め、その後、心電解析並列アルゴリズムを搭載したＧＰＵサーバーを家庭向けのヘルス・クラウド・プラットフォームに配備することで、現在の家庭向けのヘルス・クラウド・サービスプラットフォームにおけるニーズを満足している。
【０２０５】
本発明の実施例におけるＧＰＵによる並列心電データの解析方法は、心電信号の解析過程における１つ又は複数のステップをＧＰＵで並列実行することで、心電信号の解析速度を著しく高めることができるものである。
【０２０６】
当業者には理解すべきこととして、本発明の実施例は、方法、システム又はコンピュータプログラム製品として提供することができる。従って、本発明では、完全なハードウェアの実施例、完全なソフトウェアの実施例又はソフトウェアとハードウェアを組み合わせた場合の実施例の形態を採用することができる。また、本発明では、コンピュータで利用可能なプログラムコードをその中に含む、コンピュータで利用可能な１つ又は複数の記憶媒体（磁気ディスクメモリ、ＣＤ−ＲＯＭ、光学的メモリなどが含まれるが、これらに限られない）で実施されるコンピュータプログラム製品の形態を採用してもよい。
【０２０７】
本発明は、本発明の実施例に基づく方法、装置（システム）及びコンピュータプログラム製品のフロー図及び／又はブロック図を参照して説明されたものである。コンピュータプログラムでフローチャート及び／又はブロック図の中の各々のフロー及び／又はブロック、並びにフロー図及び／又はブロック図の中のフロー及び／又はブロックの組合せの実現を命令することができると解すべきものである。これらのコンピュータプログラムが汎用コンピュータ、専用コンピュータ、組込みプロセッサ又はその他のプログラミング可能なデータ処理装置に命令をするプロセッサを提供することで１つの機器を生成させて、コンピュータ又はその他のプログラミング可能なデータ処理装置のプロセッサで実行される命令によって、フローチャートの１つのフロー又は複数のフロー及び／又はブロック図の１つのブロック又は複数のブロックにおいて指定された機能を実現するための装置を生成させることができる。
【０２０８】
これらのコンピュータプログラムの命令を、コンピュータ又はその他のプログラミング可能なデータ処理装置が特定の方法で動作するよう導くことができるコンピュータ読取可能なメモリに格納して、当該コンピュータ読取可能なメモリに格納された命令によって、命令装置を含む製品を生じさせて、当該命令装置でフロー図の１つのフロー又は複数のフロー及び／又はブロック図の１つのブロック又は複数のブロックにおいて指定された機能を実現するようにしてもよい。
【０２０９】
これらのコンピュータプログラムの命令をコンピュータ又はその他のプログラミング可能なデータ処理装置に搭載し、コンピュータ又はその他のプログラミング可能な装置で一連の操作ステップを実行して、コンピュータにより実現される処理を生じさせることで、コンピュータ又はその他のプログラミング可能な装置で実行される命令によって、フローチャートの１つのフロー又は複数のフロー及び／又はブロック図の１つのブロック又は複数のブロックにおいて指定された機能を実現するためのステップを提供するようにしてもよい。
【０２１０】
以上に述べた具体的な実施例は、本発明の目的、技術的思想及び有益な効果についてさらに詳細に説明をするものである。理解すべきこととして、以上に述べたことは、本発明の具体的な実施例であるのにすぎず、本発明の保護範囲を限定するためのものではないので、本発明の趣旨と原則の中で行ういかなる修正、均等な置換、改良などもすべて本発明の保護範囲内に含まれるべきものである。
【図１】
0006389907.tif 000059
【図２】
0006389907.tif 000060
【図３】
0006389907.tif 000061
【図４】
0006389907.tif 000062
【図５】
0006389907.tif 000063
【図６】
0006389907.tif 000064
【図７】
0006389907.tif 000065
【図８】
0006389907.tif 000066
【図９】
0006389907.tif 000067
【図１０】
0006389907.tif 000068
【図１１】
0006389907.tif 000069
【図１２】
0006389907.tif 000070
【図１３】
0006389907.tif 000071
【図１４】
0006389907.tif 000072