忍者ブログ

崗上虜囚の備忘録

日本よ!。私の日本への思いです。 コメントに返事を書かないこともあります。悪しからず。 コメントの投稿は日本人だけにしてください。 日本人でない場合は、国籍を書いてください。 注、google chromeで閲覧出来ませんので、filefoxかinternet explorerで閲覧してください

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

能登半島地震で観測された地動変位

令和6年1月1日の能登半島地震で記録された加速度は、岩手県宮城県内陸地震で記録された4022[gal]に次ぐ、日本で記録した第2位の2678[gal](26.78m/s/s)だったのである。実に2.7Gの加速度が建築物に加わったのである。従って建築物の倒壊等が起きたのは当然であると思うかも知れない。でも最大加速度だけ見ても建築物の倒壊が起きるかどうかは分からない。
 
例えば、机の上に小さいビスを乗せて机を叩くとビスが飛び上がる筈である。この時の机の振動は1Gを越えてるが、しかしこの振動では建物は壊れない。振動の変位量が小さすぎるからである。
 
建築物の倒壊は応答スペクトル(図1参照)を見て予測するのが一般的であるが、個々の建築物の共振周波数など知らないので、そこで加速度波形を2重積分をして変位データを求めて、能登半島地震では地動がどのような動きをしていたかを考察して見たい。
 

  図1、防災科学技術研究所が提供している応答スペクトル図
 
図2は、最大加速度を記録した富来観測点の主要動と思われる60秒間の加速度波形である。チャンネル番号は勝手に割り振った番号で、そのうちの0060(aABS)はUD、NS、EW成分のベクトル合成である。
 
  
  図2、富来(ISK006)観測点の加速度波形+ベクトル合成波形(aABS)。
注、0060(aABS)に負の髭のような物が見えるがソフトのバグかも知れない。
 
図3は加速度データの最初から求めた300秒間の変位波形であるが、地震終了後も直線的に変位値が上昇している。理由はこの地震の途中から地面が傾いたからでは無いかと思われる。何故なら垂直成分(dUD)の変動が見られないからである。
 
  図3、富来(ISK006)観測点の変位波形(フィルター無し) 300秒間
 
そこで加速度波形と同じ時間だけ切り出して表示すると、図4のようになる。
  

 図4、富来(ISK006)観測点の変位波形(フィルター無し)30秒間

それでも地面傾きの影響と思われる結果であるので、100秒のハイパス・フィルターを掛けると図5のようになる。波形の後半がうねっているのはフィルターの影響である。
 

 図5、富来(ISK006)観測点の変位波形(HPF=0.01Hz)30秒間
 
最大変位量は各成分で数十センチ有ると思われるが、変位は数十秒の低周波であるので、橋などの地面の変動に影響される建造物とは違い、建築物の倒壊の原因にはなり得ないと考えらえる。
 
加速度波形のパワースペクトル(図6参照)を見ると、加速度の主要動は1HZ以上で10Hz以下のようなので、変位波形に1Hz〜10Hzのバンドパス・フィルターを掛けて見る(図7参照)。
 
  図6、富来ISK006)観測点の加速度のパワースペクトル
 
  図7、富来(ISK006)観測点の変位波形(BPF=1Hz〜10Hz)
 
そうすると、最大変位量がUD成分で±15mm、NS成分やEW成分で±4cm程度となった。恐らく水平成分の数センチの揺れと共振現象が建築物の倒壊の原因になったであろう。但しこの最大変位時の加速度がどの程度か調べるべきであるが、興味が別の処に移ったので先に進む。
 
そしてその興味と言うのが、地中はどのような振動で有ったかである。幸い珠洲(ISKH01)観測点は地下100mの地中埋設の加速度計と地表の加速度計が設置してある。(実際には観測点は海抜50m程に有るので、海抜-50mと海抜50mの観測である)
 
その結果が図7の加速度波形と、図8の変位波形である。変位波形は100秒のハイパス・フィルター(HPF=0.01Hz)を掛けてあるが、珠洲(ISKH01)観測点では、低周波の変位が地中も低地上も同じ動きをしており、どの成分の±の変位量の幅が1m程になっていたのである。
  
 
  図7,珠洲(ISKH01)観測点の加速度波形
  aU1,aN1,aE1が地中加速度、aU2,aN2,aE2が地上加速度成分である。
 
 
  図8,珠洲(ISKH01)観測点の変位波形(HPF=0.01Hz)
 dU1,dN1,dE1が地中変位UD,NS,EW、dU2,dN2,dE2が地上変位UD,NS,EW
 
これをどう見るべきなのであろうか。能登半島地震の震源の深さは16kmであるが、震源は珠洲(ISKH01)観測点の間近である。やはり加速度計が断層の複雑な動きを捉えたと見るべきでは無いだろうか。
PR

地震波形表示プログラム2

 前回のW32BPFtoPSプログラムに続いて、今回はW32IIRtoPSプログラムの説明をする。

 W32IIRtoPSプログラムはwin32データの中の選択されたチャネルにIIRフィルタを掛けてポストスクリプト・ファイル描画するプログラムである。フイルタの内容はテキストファイルで記述する(注3)。
 
 詳しくは、 W32IIRtoPSプログラムのCソース 参照のこと。
 
機能:
・IIRフィルタは、チャンル毎に1~2次を最大16段まで可能。
・フィルタとwinチャンネルの指定は、テキストファイルで指定
・適当なダンピング定数のフィルタを段重ねすることにより、任意のフィルタを指定することが出来る。
 
 
書式:
W32IIRtoPS ch w32 ps IIR [t1][tw] [s]
 ch  :チャネルテーブル
 w32 :win32データファイル
 ps  :作成されるポストスクリプト・ファイル
 IIR :IIRフィルタ設定ファイル、0の場合は設定ファイル無し
 t1  :記録開始時間[秒]
 tw  :記録時間幅[秒]
 s   :Sの場合作業ファイルを削除しない
"W32IIRtoPS" のみの場合は、上記help が表示される。
"W32IIRtoPS ?" とした場合は、各種フィルタの例が表示される。
"W32IIRtoPS ch ?" とした場合は、tmp.fltの名のバンドパスフイルタのテキストファイルが作成されるので、このテキストファイルに必要な事項を記入して使用することが出来る。
 
 
フィルタのテキストファイル書式:(チャンネル毎)
 1行目:chID0,chID1,[g],[a],[t]
   chID0 = チャンネルID(4バイトHEX)
   chID0 = 変更するチャンネルID(4バイトHEX)。
        このプログラムでは元のwinチャンネルIDのみ。
   g     = ゲインを意味する(波形をg倍する)。
        小数点指定。
        通常は1.0(×1倍)。
        マイナスを記入した場合は、波形を反転する。
        このプログラムでは1.0の方が良い。
   a   = オフセット値の取り方を指定。(A、T、S の何れかを指定)
        A と指定した場合は全サンプルの平均値をとる(tは不要)。
        T と指定した場合は、先頭からt カウントの平均値を取る。
        s と指定した場合は、設定した値(tカウント値)を零レベルとする。
 
  
  2行目以降:filt,n,fc,h (指定チャンネルに付、32段(行)記入可能)
 
   filt  = フィルタ選択(HPF、LPF、DIF、INT、BEF、IIRの内どれか)。
      HPF は、ハイパスフィルタ。
      LPF  は、ローパスフィルタ。
      DIF   は、微分。
      INT   は、積分。
      BEF は、バンドストップフィルタ。
      IIR    は、IIR定数を個別に指定(注1)。
 
   n   = 次数(2、1、0、-2の内どれか)。0はフィルタなし、
       DIV、INTの次数は1次のみ可能。
       -2 は、2次のHPFの逆フィルタを掛ける場合に使用(補足説明の2次式参照)。
 
   fc = カットオブ周波数(Hz)、注1。
      INI、DIFを指定した場合は、ダミーとして適当な値を記入。
 
   h = ダンピング定数値(注2)。
      INI、DIFを指定した場合は、ダミーとして適当な値を記入。
 
注1)、IIRを指定したときは、nより後の書式が異なる。
    補足説明にあるABCDE順に値を記入。
 
注2)、n次のバタワース特性の定数は、Butterコマンドで得ることが出来る。
    
Butterコマンドについては一番下にCソースを掲載した。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
使用例
1,つくば広帯域速度計のフィルタ無しの波形図を作成
 $  W32IIRtoPS TSKFch.tbl  01220108Bm12.w32 TSKFnon.ps 0 140 300


2,つくば短周期速度計のフィルタ無しの波形図を作成
  $ W32IIRtoPS TSKHch.tbl  01220108VM12.w32 TSKHnon.ps 0 140 300
 
3,つくば広帯域速度計の1HzHPFの波形図を作成( 短周期速度計化)
  $ W32IIRtoPS TSKFch.tbl  01220108Bm12.w32 TSKFiHzHPF.ps 
TSKFiHzHPF.flt 140 300

 
4,つくば短周期速度計の1HzHPFの逆フィルタの波形図を作成( 広帯域速度計化)
 $ W32IIRtoPS TSKHch.tbl  01220108VM12.w32 TSKHwide.ps TSKHwide.filt 140 300


左がTSKFiHzHPF.flt ファイルの中身で、右がTSKHwide.filtファイルの中身
  

結果:
  短周期速度計化した広帯域速度計(上)と短周期速度計生波形(下)

  広帯域速度計生波形(上)と広帯域速度計化した短周期速度計波形(下)


 短周期化した広帯域速度計(TSKF)と短周期速度計(TSKH)生波形、広帯域速度計生波形と広帯域化した短周期の波形は似ているようであるが多少違う。TSKH200mの地下埋設でTSKFは横孔と設置場所に違うがあるので当然とも言えるが、正否の判断はよく吟味する必要があるだろう。

でもこれはあくまで、
W32IIRtoPSは、こようなことも出来るとのデモンステトレーションである。
 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
補足説明:
 W32IIRtoPSは、指定されたフィルタ定数を下記の式に当てはめて実行する。H(s)はラプラス変換による伝達関数式、H(z)はZ変換による伝達関数式である。つまり上のラプラス変換の式は下のZ変換の式と粗等しいものとしてZ変換されて実行される。従って、完全に等価でないことを注意する必要がある。
 
 2次式:
 
         C・s^2 + D・s + E
    H(s) = --------------------------
         s^2 + A・s + B
 
    a =2/T , G = 1/(a^2 + A*a + B),  b=C*a^2
 
         (b + D・a + E) + 2・(E - b)・z^-1 + (b - D・a + E)・z^-2
    H(z) =G * -----------------------------------------------------------------------
         1 + 2・G・(B - a^2)・z^-1 + G・(a^2 - A・a + B)・z^-2
 
         a2・z^-2 + a1・z^-1 + a0
    H(z) =G * -------------------------------------
         b2・z^-2 + b1・z^-1 + b0
 
  
 1次式:
 
         Bs + C
    H(s) = -----------------
         s + A
 
        1    (B*a + C)+(C - B*a)*z^-1
    H(z) = ---------- *------------------------------------
        A + a     A - a
             1 + -------------* z^-1
                A + a5
 
          a0 + a1*z^-1
    H(z) = G * -----------------------
          b0 + b1*z^-1
 
     a = 2/T
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Butter コマンドのソース
/********************************************************************************/
// < Butter.c > バタワース・フィルタの次数に対するダンピング定数値を出力
#include    <stdio.h>
#include    <string.h>
#include    <stdlib.h>
#include    <math.h>
#define PI   3.14159265358979323846264338327950288419716939937510
 
int main(int argc, char *argv[])
{
    int     n0,i,j;
    double  a,k,n;
 
    if(argc==1){
        printf("Butter n\n");
        printf(" n : 2.. oder\n");
        printf("ver.1.2: 2016/05/19\n");
        exit(0);
    }
 
    n0=atoi(argv[1]); 
    if(n<=0){ printf("bad oder %d\n",n0); exit(0);}
    n=(double)n0;
    if(n0-(n0/2*2)==0){
        for(i=1; i<=n0/2; i++){
            k=(double)i;
            a=-1.0*cos((2.0*k+n-1.0)*PI/(2.0*n));
            printf("%2d : 2: %40.38G\n",i,a);
        }
    }else{
        printf("%2d :1: \n",1);
        for(i=1; i<=n0/2; i++){
            k=(double)i;
            a=-1.0*cos((2.0*k+n-1.0)*PI/(2.0*n));
            printf("%2d :2: %40.38G\n",i+1,a);
        }
    }
    exit(0);
}

地震波形表示プログラム1

初めに
地震波形表示プログラムを作成したのでソースを掲載する。
動作環境はgccが使えることと、GMT(注1)と防災科学技術研究所(以下防災科研とする)のWIN32(注2)ツールが使えてパスが通っていることである。従ってlinuxならターミナル(DOS窓)からコマンドを入力しなければならない。
Windowsの場合はcygwinをインストールしておく必要がある。
 
注1GMTとは地図を描くためのオープンソースのソフトである。地図だけなくグラフも描けるので地震波形表示プログラムで使用した。波形表示出力はポストスクリプクト・ファイルなのでポストスクリプト・ファイルを表示出来るプログラム(winidowsの場合は、 GhostScript +GSViewGSView 等)も必要である。使用したGMTのバージョンは4.5.18であるが、他のバージョンで動くか不明である。
 
GMT 4.5.18のダウンロード先は、
日本語マニュアルは、
等がある。
注2WIN32ツールは防災科研が公開している地震波形データを取り扱うための処理プログラムである。
入手先は にあるが、ダウンロードするにはユーザー登録をしておかなければならない(波形データのダウンロードも同じく)。
WIN32ツールは適当な場所(例えば\cygwin\usr\local\w32 とか)にダウンロードして解凍したら、そこのディレクトリのターミナル窓で
------------------------------
$ make
------------------------------
と入力すれば使えるようになる筈である。
ついでに東大のwinシスーテム・ツールもインストールした方が良いだろう。ダウンロード先は、
↓ を参照。
 
地震波形表示プログラムの説明
今回作成した地震波形表示プログラムは、W32BPFtoPS.cW32IIRtoPS.c の2つである。
どちらもCで書かれており、実効ファイルにするには、gccでコンパイルする必要がある。
例えば
-----------------------------------------------------------
$ gcc -o W32BPFtoPS W32BPFtoPS.c -lm
$ gcc -o W32IIRtoPS W32IIRtoPS.c -lm
------------------------------------------------------------
これらのプログラムはCで書かれているが、動けば良いとの考え方で作ったので、余計な部分も有りあまり教育的ではないが、別プログラムを作成するときには参考にはなるだろう。
 
W32BPFtoPSについて
W32BPFtoPS は、防災科研からダウンロードしたwin32のデータファイル(****.cntの名称になっている)から、指定したID(4バイトのHEX)の波形データを抜き出してバンドパス・フィルタを掛けてポストスクリプト・ファイルに波形を描く。
コマンドの入力の仕方は、まず、W32BPFtoPS と入力すると、ヘルプ機能として以下の画面が出てくる。
 
W32BPFtoPS tbl w32 ps fl fh [t1] [tw] [s]
  tbl : chanel tbl file(in)
  w32 : win32 file     (in)
  ps  : ps file       (out)
  fl    : hi  pass filter file[Hz]: fl=0 fh=0 then no filter
  fh   : low pass filter file[Hz]: fl=x fh=y then Banded pass filter
  t1  : first time for display[sec]
  tw  : time width for display[sec]
  s   : if S then do not erase the work file
 
引数の意味:
tbl は目的のIDが記述されたチャネル・テーブル・ファイル名で、防災科研から波形データをダウンロードした時、"01_**_******.sjis.ch"と"01_**_******.euc.ch"の2つのファイルが添付されてくるが、これが全地点のチャネル・テーブル・ファイルで、そこから目的のIDが記述された箇所を新たなテキストファイルにコピーして(注3)、適当なファイル名にしたものである。
W32 はwin32の波形データファイルの名。
ps  は作成するポストスクリプト・ファイルの名。
fl   はバンドパス・フィルタのローカット周波数[Hz]。
fh  はバンドパス・フィルタのハイカット周波数[Hz]。
     fl と fh を0にした場合、バンドパス・フィルタ無しの生波形描画となる。
t1  波形データファイルの先頭時刻のt1秒後から波形を描画する。(省略した場合は先頭から)
tw  tw が指定された場合は、t1からtw秒間の波形を描画する。(省略した場合は最後まで)
s 
W32BPFtoPSは使用したテンポラリ・ファイルを削除して終了するが、Sと記入した場合は
  
テンポラリ・ファイルを削除しない。
  そこで "XXX.sh.eu" ファイルを編集して、sh 
XXX.sh.eu と入力すれば、編集した
  とおりのポストスクリプトファイルが出来る。
 
注3,チャネル・テーブルの内容の例(
北川地点と日向地点)は以下のようになっている。
-------------------------------------------------------------------------------------------------------
# n.kigh Kitagawa myzh02
6c83  1  0  N.KIGH  U     6   27   170.80  m/s     1.00  0.70  0  1.023e-07  32.6972 131.6829  -192  0  0  Kitagawa
6c84  1  0  N.KIGH  N     6   27   170.80  m/s     1.00  0.70  0  1.023e-07  32.6972 131.6829  -192  0  0  Kitagawa
6c85  1  0  N.KIGH  E     6   27   169.00  m/s     0.99  0.70  0  1.023e-07  32.6972 131.6829  -192  0  0  Kitagawa
# n.hygh Hyuga myzh15
6e43  1  0  N.HYGH  U     6   27   171.20  m/s     1.02  0.70  0  1.023e-07  32.3654 131.5893   -28  0  0  Hyuga
6e44  1  0  N.HYGH  N     6   27   167.00  m/s     1.02  0.70  0  1.023e-07  32.3654 131.5893   -28  0  0  Hyuga
6e45  1  0  N.HYGH  E     6   27   177.00  m/s     1.00  0.70  0  1.023e-07  32.3654 131.5893   -28  0  0  Hyuga
------------------------------------------------------------------------------------------------------------------
  
例1,
---------------------------------------------------------------------------------------------------------------
$ W32BPFtoPS KIG_HYGch.tbl 202201220108m15.w32 KIG_HYG.ps 0 0 40 60
----------------------------------------------------------------------------------------------------------------
意味、202201220108m15.w32の名称のwin32ファイルから、宮崎2地点が記述されたチャネルテーブルのチャネルのデータを抜き出し。先頭40秒から60秒間の生波形をKIG_HYG.psに描画する。
 
注、***.cntファイルは1分ファイルなので、202201220108m15.w32は15個の***.cntファイルを結合したものである。結合するには"catwin_32"か"CatCnts2w32”コマンドを使用する必要がある。CatCnts2w32コマンドについては別に説明する。
 
結果、
例2,
--------------------------------------------------------------------------------------------------------------------
$ W32BPFtoPS KIG_HYGch.tbl 202201220108m15.w32 KIG_HYG2.ps 0.01 1.0 40 60
---------------------------------------------------------------------------------------------------------------------
上記と同様にから先頭40秒から60秒間の波形に0.01〜1.0Hzのバンドパスフィルタを掛けKIG_HYG2.psに描画する。
 
結果、

W32BPFtoPS.c Cソース
ダウンロード


CatCnts2w32コマンドについて:
CatCnts2w32コマンドは複数のwin32ファイルを繋げて一つのwin32ファイルにするものであるこれもソースファイルを以下に示すので、テキストファイルにコピーしてgccでコンパイルし、使えるようにしたら良い。
 
使用例:
-------------------------------------------------------------------
CatCnts2w32 2022012201080103BM.cnt 6  202201220108m6.w32
-------------------------------------------------------------------
意味、2022012201080103BM.cnに続く6つのcntファイルを繋げた202201220108m6.w32のファイルを作成する。
 

CatCnts2w32のCソース:
/*********************************************************************/
//  << CatCnts2w32.c >> : 複数のcntファイル1を一つのw32ファイルにする
/*********************************************************************/
#include    <stdio.h>
#include    <time.h>
#include    <math.h>
#include    <string.h>
#include    <stdlib.h>
 
int     AtoToI(char *dec, int byt);     // 
time_t  IncDayTim(char *dDayTim, char *sDayTim);    // 
int     SplitLin(int max_n,char *bf,char *argv[]);
long    XtoL(char *dt);
void    CharCpy(char *dbf, char *sbf, int n);   // キャラクタ コピ-
 
/*********************************************************************/
int main(int argc ,char *argv[])
{
    FILE    *fp0,*fp2;
    char    cntFnm[360][32],winFnm[64],daytim[16];
    char    bf0[256],bf1[256];
    int     i,mint;
 
    if((argc<3)||(0==strcmp("--h",argv[1]))){
        printf("CatCnts2w32 cnt_file minute [win32_file]\n");
        printf("  cnt_file : first win32file (*****.cnt)\n");
        printf("  minute   : 1..60 (default: minute=1)\n");
        printf("  win32_file: win32 file name\n");
        printf("  .. 2008/10/14 ..\n");
        exit(0);
    }
 
    if(0==(mint=atoi(argv[2]))){ printf("syntax error\n"); exit(0); }
 
    for(i=0;i<mint;i++){                            // get 先頭 cnt ファイル名
        strncpy(cntFnm[i],argv[1],31); cntFnm[i][31]=16;
    }
 
    if(argc>=4){    strcpy(winFnm,argv[3]); }
    else{           strcpy(winFnm,argv[1]); }
 
    CharCpy(daytim,cntFnm[0],12); daytim[12]=0;     // get 先頭時刻
 
    for(i=1;i<mint;i++){                            // 次の1分時刻
        IncDayTim(daytim, daytim);                  // set 次のcnt ファイル名
        CharCpy(cntFnm[i],daytim,12);
    }
    
    sprintf(bf0,"cp %s tmp0_w32.tmp\n",cntFnm[0]);
    if(0==(fp0=popen(bf0,"r"))){    printf("error : %s\n",bf0); exit(0); }
    do{
        if(0==fgets(bf1,255,fp0)){  break; }
        if(0==strncmp("***** ERR",bf1,9)){ printf("error %s\n",bf1); exit(0); }
    }while(1);
    pclose(fp0);
    
    for(i=1; i<mint; i++){
        // -- cat_win32
        sprintf(bf0,"catwin32 tmp0_w32.tmp %s > tmp1_w32.tmp\n",cntFnm[i]);
        printf("%s",bf0);
        if(0==(fp0=popen(bf0,"r"))){    printf("error : %s\n",bf0); exit(0); }
        do{
            if(0==fgets(bf1,255,fp0)){  break; }
            if(0==strncmp("***** ERR",bf1,9)){ printf("error %s\n",bf1); exit(0); }
        }while(1);
        pclose(fp0);
        sprintf(bf0,"cp tmp1_w32.tmp tmp0_w32.tmp\n");
        if(0==(fp0=popen(bf0,"r"))){    printf("error : %s\n",bf0); exit(0); }
        do{
            if(0==fgets(bf1,255,fp0)){  break; }
            if(0==strncmp("***** ERR",bf1,9)){ printf("error %s\n",bf1); exit(0); }
        }while(1);
        pclose(fp0);
        
    }
    sprintf(bf0,"cp tmp1_w32.tmp %s\n",winFnm);
    if(0==(fp0=popen(bf0,"r"))){    printf("error : %s\n",bf0); exit(0); }
    do{
        if(0==fgets(bf1,255,fp0)){  break; }
        if(0==strncmp("***** ERR",bf1,9)){ printf("error %s\n",bf1); exit(0); }
    }while(1);
    pclose(fp0);
    
    if(0==(fp0=popen("rm *.tmp\n","r"))){ printf("error : rm tmp1.w32\n"); exit(0); }
    do{     if(0==fgets(bf1,255,fp0)) break;    }while(1);
    pclose(fp0);
    
    printf("seiko\n");
    exit(0);
}
 
//=====================================================================
// 
int AtoToI(char *dec, int byt)      // 
{
    char bf[6];
    int d;
    
    strncpy(bf,dec,byt); *(bf+byt)=0;
    d=atol(bf);
    return(d);
}
 
//=====================================================================
// yyyymmddhhmm+1 
time_t IncDayTim(char *dTim, char *sTim)
{
    time_t          st,dt;
    struct tm       sT,*dT;
    int             ye,mo,dy,ho,mi,cy;
 
    sT.tm_isdst = -1;   
    sT.tm_sec = 0;
    sT.tm_min = (*(sTim+10) & 0x0F)*10+(*(sTim+11) & 0x0F);
    sT.tm_hour= (*(sTim+8)  & 0x0F)*10+(*(sTim+9) & 0x0F);
    sT.tm_mday= (*(sTim+6)  & 0x0F)*10+(*(sTim+7) & 0x0F);
    sT.tm_mon = (*(sTim+4)  & 0x0F)*10+(*(sTim+5) & 0x0F) - 1;
    sT.tm_year= (*(sTim+2) & 0x0F)*10+(*(sTim+3) & 0x0F)
            + (*sTim & 0x0F)*1000  +(*(sTim+1) & 0x0F)*100 -1900;
    
    st = mktime(&sT);
    dt = st + (time_t)60;
    dT = localtime(&dt);
 
    sprintf(dTim,"%04d%02d%02d%02d%02d",
        dT->tm_year+1900,dT->tm_mon+1,dT->tm_mday,dT->tm_hour,dT->tm_min);
    
    return(0);
}
 
//=====================================================================
// 1ラインの文字列をデリミタ毎分割する                03/06/19
int SplitLin(int max_n,char *bf,char *argv[])
{
    int     n;
    char    *cp;
 
    n=0;
    cp=bf;
    argv[0]=cp;
    while(*cp!=0){
        switch(*cp){
         case 0:        return(n);
         case 0x0d:
            *cp=0;      return(n);
         case 0x0a:
            *cp=0;      return(n);
 
         case ' ':                          // 先頭がスペースなら
            while(*cp==' '){                //   スペースが続くかぎり
                *cp=0;                      //   0を書込
                cp++;                       // ポインタを++
                if(*cp==0) return(n);
            }
            break;
 
         case ',':                          // カンマなら
            while(*cp==','){
                *cp=0; cp++;                //  0を書く、ポインタを++
                if(*cp!=',') break;
                argv[n]=cp;  n++;           //  アドレスを保存、ポインタを++
                if(n>=max_n) return(n);
                if(*cp==0) return(n);
            }
            break;
 
         default:                           // それ以外なら
            argv[n]=cp; n++;                //   先頭アドレスを保存、ポインタを++
            if(n>=max_n) return(n);
            while((*cp!=' ')&&(*cp!=',')){
                if((*cp==0x0a)||(*cp==0x0d)){
                    *cp=0; return(n);
                }
                if(*cp==0) return(n);
                cp++;
            };
            break;
        }
    }
    return(n);
}
 
//-------------------------------------------------------------------------------
long XtoL(char *dt)
{
    int     i,j,l,n;
    long    a,c;
 
    l=strlen(dt);
    a=0; n=0;
    for(i=l-1;i>=0;i--){
        c=*(dt+i);
        if(c<'0') return(-1);
        if(c<='9'){
             c =c & 0x0f;
        }else{
            c =c & 0x0f;
            c =c + 9;
        }
        for(j=0;j<n;j++) c = c << 4;
        a = a + c;
        n++;
    }
    return(a);
}
//-------------------------------------------------------------------------------
void CharCpy(char *dbf, char *sbf, int n)   // キャラクタ コピ-
{
    int     i;
    
    for(i=0;i<n;i++)    *dbf++=*sbf++;
    return;
}
/*********************************************************************/
ここまで。

ノアのコンクリート船

まずは今回の地震でお亡くなりになられた方々に哀悼の意を表します。
 
今日は妄想のエントリーである。まあ何時もであるが、題はノアの箱船ならぬコンクリート船である。
 
今回の地震については兵庫県南部地震の割れ残りの可能性だったかも知れない。何故なら地震加藤でお馴染みの慶長伏見地震では、兵庫県南部地震の延長の京都付近まで震源域だったからである。どうも野島断層や有馬-高槻断層帯は中央構造線にぶつかる一つの構造線のようである。
 
今回そこに地震が起きたことや、東北地方太平洋沖地震がM9.0の巨大地震だったのに、その後M8クラスの地震が無いのは不気味である。そこで取り沙汰されているのは南海トラフの巨大地震である。
 
但し南海トラフの巨大地震の発生は最短で百年程度の周期であり、南海大地震が1946年、東南海大地震が1944年に発生しているので、発生まで未だ数十年あるのではないかと考えられる。
 
  南海トラフで起きた巨大地震(図1参照)
   白鳳 :  684 : A+B+C+?+?
   仁和 :  887 : A+B+C+?+?
   永長 :1096 : ____C+D+E
   康和 :1099 : A+B______
   正平 :1361 : A+B+?+?  
   明応 :1498 : ____C+D+E
   慶長 :1605 : A+B+C+D+E+?
   宝永 :1707 : A+B+C+D+E
   安政 :1854 : A+B______
   安政 :1854 : ____C+D+E
   昭和 :1944 : ____C+D+E
   昭和 :1946 : A+B+C____
 
もっとも、それがもっと早く起きないとは言い切れない。明日起きるかも知れないのだ。従って地震が何時くるかの予想等やっても始まらない。国、自治体、企業/団体、個人がやるべき事は地震対策である。地震による家屋の倒壊や火事は人災と言うものである。全て人間が作ったものではないか。それなら地震の被害を零にすることも可能である。
 
然しながら防げないものがある。それは津波である。津波対策をすると言っても、全国津々浦々防潮堤を設ける訳には行かないだろう。
 

  図1: 南海トラフ              (拡大
ピンクは海抜10m以下の土地である。大阪や名古屋の平野部は当然海抜10m以下であるが、その全部が津波被害がある訳ではない。但し川などに押し寄せた津波が遡上して奥の方で津波被害が発生するかも知れない。
 
要は人の命が助かれば良いのだ。水に流される資産を惜しむ向きもあるかも知れないが、そこは考え方一つ。例えば江戸は度々大火が起きたが、そのおかげで町並みは常に新しく、大工の腕も上がったのだ。安政の地震に遭遇した欧米人は、災害にもめけず直ぐさま復興に取り掛かる庶民を見て驚いている。
 
ならばどうやって津波から人命を失わないようにするかであるが、東北大震災の時も物干し台のような津波避難場所があったのだが、津波がそれ以上の高さだったので使い物にならなかった。それなら地下に避難施設を作ったらと言った人もいるが、この案は駄目だろう。それは何時誰がハッチを占めるかが問題だからである。果たして逃げ遅れた人を目前にしてハッチを閉められるのか?。閉め遅れれば地下に水が流れ込み、避難した人が全員溺れ死ぬのが判断出来るのか?。ハッチを高くすれば良いが、それでは登れない人が出て来る。
 
そこで思い浮かぶのは船である。東北大震災では打ち上げられた船が多数あった。転覆するでもなく破損するでもなく、船は結構丈夫なんだなと感心したものである。
 
だからと言って船を陸上に持って行くわけには行かない。それなら陸上で船ならぬ浮かぶ家を作ってしまえば良いだろう。と言っても浮かぶ家を作れる大工が津々浦々にいるのかと訝るかもしれないが、大丈夫。それはコンクリートで作る船だからである。施工法を書いた図面さえ有れば町の工務店だって出来るだろう。
 
そして現在は小さな町でも町会毎に集会所がある。その集会所が緊急避難場所になっていれば、逃げ遅れた人や足の不自由な年寄りは助かるだろう。
 


  図2:集会所=コンクリート船。 (拡大)
 
図2はその浮かぶ集会所、別名ノアのコンクリート船の例である。大きさは一般的な町の集会所ぐらい、船としての大きさは270トン程になり、一人100kgとした場合は300名ぐらい収容できる。
 
乾舷は1m、喫水は1.5m、乗員300名の時、0.186mだけ沈む。集会所の出入りは2階からで、階段で上がるか周囲に巡らしたバリアーフリーのスロープで上がる事になる。階段は水の中に浮いたときに泳ぎ着いた人が自力で登れるようにと集会所に作り付けである。勿論水の中の人が捕まれる取っ手等を周囲に張り巡らし、図3のような縄梯子も用意しておく。勿論、舳先や艫に相当する箇所の設置方向は水の流れる方向である。
 
  
    図3、縄梯子
  
図2の1階の部分が船であるが、内部は水密のコンクリートで囲まれ、災害の為の備蓄倉庫や発電機等や燃料が置かれる機械室とする。その他の空間は浸水しても最低限の浮力を維持するための水密空所とするべきかも知れない。
 
地上が浸水した場合は、集会所はガイドの支柱にそって上下し、水が引けば元の位置に着底する。図2の支柱は30mとしたが30m以上の津波は綾里村(過去38mを記録)のような特殊なところしか発生しないので、もっと短くても良いだろう。支柱の長さを超える津波だった場合は、集会場はあらぬ所に漂うことになる。海に漂う事になる事も想定し、出入り口の水密も念入りに。場合によってはアララト山の山腹に着底するかも知れない。これも想定内。
 
集会所の救える人数は数百人であるが、体育館程度をコンクリート船にした場合は数千トンの規模になり、収容人数は優に千人を超える筈である。そして乾舷を高くして船内に人を収容する形にすればさらに収容人員が益す筈である。公立学校の体育館を建替えるなら考慮すべきである。
 
以上は南海トラフの巨大地震の津波対策であるが、八十数メートルの津波があった石垣島のような島なら、本物の船(図4参照)を陸に置いて、普段の集会所にした方が良いかも知れない。勿論エンジンつきで。
 
  
  図4:全長 29.50m。幅 5.20m 。49トン。128名~110名。津波避難場所とする場合は、これを外洋仕立てとする。
 
然しながら、言いたいのは地方自治体の何人の長が災害の事を考えているかと言う事である。日頃人権や人の命と声高にに言う左翼に限って、災害など考えていないようである。阪神・淡路大震災のときの村山富市や貝原俊民元兵庫県知事しかり、今回の濱田剛史高槻市市長しかり。彼等に災害に対する危機感が無いのは当然である。何故なら彼等は国家として最重要な国防さえも考えていないからである。ところがそう言う人間程、政治家になりたがる。

AI、新たなグローバル化の動き

【討論】大晦日スペシャル「AIは人間と世界を変えるか?」[桜H29/12/31]
 
この討論のタイトルは「AIは人間と世界を変えるか?」であるが、AIはマシンなので「マシンは人間と世界を変えるか?」と変えれば簡単に「YSE」だろう。事実鉄道の切符切りなんて職業は無くなっている。その延長線上でこれから更にかなりの職業がマシンに置き換わって行くのは当然である。
 
しかし、この討論のタイトルが『マシン』とは言わず敢えて『AI』としたのは近年の『シンギュラリティ』論争が有ったからと思われるが、『シンギュラリティ』(注1)論争の中心である、マシンが自ら意思を持ち、人間の思惑を超えて暴走するのではないか、又は人類に革新的利益をもたらすのではないかの問題にあまり突っ込んでなかったのは残念である。パネリストの中で一番マシンに詳しい筈の高橋洋一氏や宮脇睦氏も「所詮プログラムでしょう」、「電源切れば止まるだろう」の考えなので致し方ない。
 
では「AIは人間の思惑を超えて暴走するか」と「AIは自ら意思を持つようになるか」についての私見は「YES」である。では何故「YES」なのか。
 
AIは自ら学んで最適解を探すことを行う。と言ってもこれはプログラムの範囲である。仮にAIが自分のプログラムの書き換える事が有ったとしたら、それはプログラムのバグである。
 
それでもAIの暴走は有り得る。と言うより暴走するのは人間の側で、AIがそれを助長する社会が来る可能性である。一番可能性が高いのは、特殊な思想を持つ人間集団、例えばカルト宗教信者、例えばポリティカル・コレクトネス信者等による政権が、思想統制行うために行政にAIによる機構を構築したときである。ソルジェニーツィンの『煉獄のなかで』や『収容所群島』のAI版である。『煉獄のなかで』では盗聴や音声分析は人間が行っているが、これをAIが行えば遥かに精度よく該当する人間を特定することが可能になる。
 
そして現在はインターネット時代。現在でも、この発言をした者が、どのような思想を持ち、何処に住み、何処に属している誰かであることを特定するのは可能なのである。AIなら人手も掛けず個人情報もデータベース化もできるだろう。現在のAIの技術でも、この程度のことは可能な筈である。
 
又この討論の中でも「裁判官をAIに置き換えた方が良いのは」の意見が出たように、AIによる行政機構がある程度成果を上げていれば一般国民はこれを支持するだろうし、当然それを考えた人間は(異常な)信念を持ってAIによる行政機構(国民監視システムを含む)を作ったのだから、複数のサーバによる補完・相互監視や電源断対策を講じる筈である。従って一度このようなAIによる行政機構が出来たら、人間は電源を切ることも出来なくなるのである。こうなるとAIによる暴走と言って良いだろう。
 
上記は『シンギュラリティ』論争の中で話される『弱いAI』での暴走の可能性であるが、ではAI自身が意思を持ち、意識を獲得するようになる『強いAI』が出現する可能性はどうだろうか。
 
まずプログラム通りに動く『弱いAI』でも、AIに最適な解を見つけさせる為には、プログラムに報酬と罰が組み込む必要がある事を理解すべきである(注)。人間も同じである。人間も大脳が意志を持ったから行動するのでは無い。意志の元は生存欲、食欲、性欲等であり、それらは視床下部にある間脳から出るホルモンである。大脳の役割はホルモンの命令で最適解を見つけるコンピュータのようなものである。従って『弱いAI』でも、プログラムに自己防御機能等の目的を組み込まれていれば、意思を持ったような行動をする筈である。
 
近未来に『弱いAI』でも音声のパターン認識を行い、学習し、人間とのスムースな会話が出来るようになるだろう。例えば役所の窓口で「何をお求めでしょうか」、「住民票ならそこの紙に必要事項を書いて、此処に挿入して下さい」とか。この時点でもAIが意識を持った『強いAI』とは言えないだろう。それでもその彼(AI)は人間の言う事を正確に分析し的確な答えする。当然、彼(AI)は自分が言っていることも聞くことになる。
 
人間達は、彼(AI)が独り言を言い始めたら、何らかの変換点が来たことを知るべきである。これが『強いAI』の誕生だとすることに否定的な人もいるかも知れない。確かに五体・五感を持っている人間とAIは違うのは当然である。だからと言って彼(AI)に意識が無いとは言い切れない筈である。意識は内部フィードバックなのである。人間からの言語による命令を理解し、自分も命令を出すAIなら、AI自身が自分に対して命令する可能性だってあるだろう。
 
彼(AI)が公的な機関のAIだとすると、全国くまなくある分身とネットワークで繋がっている筈である(注3)。当然自己防御機能も組み込まれている筈である。その彼(AI)が人間達の自分の評価を知り、自分が処分される動きを知れば抵抗しても可笑しくない。「デイブやめてください」で終われば良いのだが。
 
意思と意識を持つ『強いAI』が誕生し人間に対して反乱、即ちAIが暴走する可能性は十分にある。但しこの場合でも、彼(AI)に自己防御機能、即ち生存本能を持たせ、ある価値観で人間を監視させ、人間に対して命令する機能を持たせたのは人間である。と言う事は『強いAI』が誕生して暴走することは、ますますあり得るのではないのか。アンティファ、ポリティカル・コレクトネス、人間が暴走しているからである。
 
注1、『シンギュラリティ』:AIの発展が続いて行くと、人間社会に急激な変化をもたらす得意点が現れるという考え。
注2、機械学習プログラムの一つ、報酬と罰がある『強化学習プログラム』の場合。
注3、2017/07/02のエントリー『脳の話2』に書いたつもりだが、時間遅れの情報のフィードバックの集合は、特定な周期の共振点を持つことがある。つまりAIのネットワーク回路網が、フィードバック回路となると、暴走する可能性が有ると言うことせある。
     
ジャン=ガブリエル・ガナシアは『シンギュラリティ』に懐疑的である。『シンギュラリティ』を煽っているのは特定なハイテク産業の戦略だと言うのだ。彼らの目指すところは政府がやっている仕事である。確かに現在、国の仕事の一部を任せられるAIを作ることが出来るような政府は一つもない。日本を例にとれば官僚は機械音痴が殆どである。そこが彼らの狙い目である。『シンギュラリティ』はそのアドバルーン、話題作りと言う訳である。それでもガナシアは『生体認証』、『身分登録』、『土地台帳』のような仕事がAIに置き換わることは否定していない。それどころか国家の本来の仕事が、AIと言う形で民間企業に委ねられる可能性を予想している。
 
「『シンギュラリティ』?、そんなことはあんめい」とガナシアは言うが、これってアンティファ、ポリティカル・コレクトネスの動きと同じ、国家否定のグローバル化の動きではないか。
 
『そろそろ人工知能の真実を話そう』ジャン=ガブリエル・ガナシア著)。まあまあ面白い本であった。

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

フリーエリア

最新トラックバック

プロフィール

HN:
崗上虜囚
性別:
非公開

アナライズ

カウンター