忍者ブログ

崗上虜囚の備忘録

日本よ!。私の日本への思いです。 コメントに返事を書かないこともあります。悪しからず。 コメントの投稿は日本人だけにしてください。 日本人でない場合は、国籍を書いてください。 注、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

縄文・旧石器・地図

縄文海進と氷河期の日本地図

 左は縄文海進で10m海水位が上がった時、右が海水位(-120m)が最も下がった2万年前頃の地図。

日本神話と赤ホヤ噴火

天皇が何処から来たかを古事記・日本書紀と考古学から推測する説は色々ありますが、神代記から推測した説はあまり有りません。せいぜいこの時代に皆既日食が有ったので天岩戸神話はこれだろうとの推測ぐらいです。これは神代の話は只の創作と見て重きを置いて無かった為と考えられます。
 

 しかし単なる創作とは考えられない神代記の摩訶不思議な話について、この神話は何を意味するか、何故生まれたのかを推測することで、天皇の先祖について新たな発見が有るのではないでしょうか。そこで黄泉の国神話や天の岩戸神話等を注目して、仮説を立ててみました。
 

仮説を先に言うと
・天皇の先祖は上野原遺跡の地に居た。
・約束の地に戻ったのが天孫降臨。
・黄泉の国神話は高千穂峰の噴火の樣である。
・天の岩戸神話は喜界赤ホヤ噴火体験により生まれた。
・天皇の先祖は九州北部に居ついた。
・九州北の地で縄文人と長江人の邂逅が起きる。
・日本統一を成し遂げられたのは強烈な体験の基づく信仰と稲作。
・卑弥呼は天照大御神が憑依した巫女。つまり日の巫女。
・邪馬台国はヤマト国である。即ち後の日本。
・日本は縄文文明と長江文明が融合した国で、7000年前の宗教を頂く国である。
 
 但し、これらの仮説には、
1、喜界赤ホヤ噴火の降灰の最中に踊り祈る事など出来るであろうか。
2、上野原遺跡の地にいた縄文人は脱出出来るのであろうか。
3、7300年前の事を7世紀まで伝承できるだろうか。
等の難点があります。
 
 まず日本神話を読んで感じることは、火の神の多さです。そして火山の描写としか思えない箇所が有ることです。特にイザナミ尊が火の神カグチツを生んだことで身を焼かれて死に、イザナギ尊が死んだイザナミ尊に会いに黄泉の国に行った時、イザナミ尊は身体中雷に覆われて出てくる場面(注1)は、噴火そのものです(図1参照)。

注1:頭には大雷居り、胸には火雷居り、腹には黒雷居り、陰には拆雷居り、左の手には若雷居り、右の手には土雷居り、左の足には鳴雷居り、右の足には伏雷居り、并せて八はしらの雷神成り居りき。


        注1:噴火と雷(画像はインターネットから無断で拝借したものです)
 
 従って日本神話は天皇の先祖、即ち天孫族が火山噴火を体験した事で生まれたのではないかと推測出来ます。ではその体験した場所は何処かですが、キーワードは高千穂峰です。高千穂峰はニニギ尊が降臨した所ですが、天孫降臨の地が国譲りをした出雲では無く、高千穂峰なのは不思議ではないでしょうか。
 
 実は高千穂峰の場所は天孫族にとってゆかりの地、否そこは約束の地であり高千穂峰は当初から天孫族の信仰の対象だったかも知れません。
 
 そこで高千穂峰近くの遺跡を調べると有りました。上野原遺跡です。上野原遺跡は1986年(昭和61年)に霧島市で発見された縄文早期(約1万700~1万400年前)から縄文晩期の複合遺跡で(注2)、特に縄文早期のものは「国内最古、最大級の定住化した集落跡」とされています。
 
注2:古い資料では上野原遺跡は約9500年前からとされていますが、再測定により上記の約1万700~1万400年前です。又、同様に古い資料では喜界赤ホヤ噴火も約6300年前とされていますが、これも約7300年前です。
 
 そして天皇の男性の遺伝子Y-DNAハプログループはD1a2a1bの縄文系です(注3)。また上野原遺跡は縄文人の遺跡。天孫族が上野原遺跡の地の出身だとしても可笑しくはありません。
 
注3:これは東山天皇の男系子孫の複数名と南朝後村上天皇の男系子孫等のY-DNAを調査した結果です。 
 
 上野原遺跡は200mの高台に有り、凡そ20km離れた高千穂峰は裾野のまで見渡せる位置なので(図2参照)、上野原遺跡にいた縄文人は高千穂峰を朝晩畏敬の念で見ていたと思われます。そして高千穂峰は喜界赤ホヤ噴火を挟んで7600年前から7300年前に2回大きな噴火を起こしていたのです。
 
     図2:上野原遺跡から見た高千穂峰。(画像はストリート・ビューから)
 
 その最初の1回目の噴火が黄泉の国の神話が生まれた理由では無いかと考えられます。何故1回目の噴火かと言うと、上野原遺跡の縄文早期の遺跡は喜界赤ホヤ噴火の火山灰に埋もれており、喜界赤ホヤ噴火で滅んだと思われるからです。
 
 そこで黄泉の国の神話が上野原遺跡の地に居た天孫族が高千穂峰の噴火を見て考えついた物語とするなら、上野原遺跡に居た天孫族が超巨大噴火である喜界赤ホヤ噴火を神話に記載しない筈が有りません。そう考えると日本神話の最大イベントである天岩戸神話と喜界島の赤ホヤ噴火を結び付けるのが自然です。
 
 では天照大御神が天岩戸に隠れる前に何が起きたかですが、古事記ではスサノオ尊が天照大御神に合いに天に参上する時「山川悉に動み、国土皆震りき」とあります。つまりこれは大地震の描写と見て間違いがないと思います。
 
 事実、南九州で喜界赤ホヤ噴火による堆積物を調べると、最後の火砕流を伴う噴火の灰の下の地層に液状化の跡が発見され、最後の噴火の前にこの地域が激震に見舞われたことが証明されたのです。
 
 喜界赤ホヤ噴火とは、幸屋降下軽石と言われる降下物を伴う噴火と、やや小規模火砕流を伴う噴火と、幸屋火砕流と言われる大規模火砕流を伴う巨大噴火の3回の噴火の総称です。特に最後の噴火の火砕流は薩摩半島と大隅半島と屋久島の宮之浦岳1936mの山頂までを覆い尽くして霧島市近くまで迫っており、噴煙は3万m以上に登り、降灰は東北地方南部まで及んでいるのですから上野原遺跡の地では相当な降灰が有ったと思われます。つまり上野原遺跡の地では真っ暗になった筈です。
 
 これこそ天岩戸神話での天照大御神が天岩戸に隠れる場面ではないでしょうか。例えば11世紀以降人類が経験した最大の噴火である1815年のインドネシア・スンバワ島にあるタンボラ山の噴火(注4)では、スマナプ島に居た英国人が「翌日の午後までろうそくを照らす必要があった」と手紙に書いているのです。
 
注4:1815年のタンボラ山の噴火の火山爆発指数VEIは7、喜界赤ホヤ噴火もVEIは7ですが、喜界赤ホヤ噴火の方が大きいと考えられています。
 
 スマナプ島が何処かは不明ですが、スマナプ島がスマラプラ島(バリ島)だとするとバリ島の主要都市とタンボラ山の距離は凡そ200km、それに対して喜界カルデラと上野原遺跡間の距離は凡そ114kmと、上野原遺跡の方が暗闇に包まれる時間も長い筈であり、上野原遺跡の縄文人が恐れおののいて、天岩戸神話のような色々なやり方で祈ったのではないでしょうか。
 
 1番目の仮説の難点である「噴火の降灰の最中に踊り祈る事など出来るであろうか」については、粒子の荒い降灰は早期に収束して、後はタンボラ山噴火時のスマナプ島のように粒子の細かい火山灰漂って日光を遮る状態が続いたのではないでしょうか。それなら踊ったり、祈りを捧げることが出来るかも知れません。
 
 また天岩戸神話では岩戸から天照大御神が劇的に出て来ますが、これも上空に風が吹いて灰が飛んだことにより青空が現れたのではないでしょうか。
 
 それより2番目の仮説の難点の「上野原遺跡の地にいた縄文人は脱出出来るのであろうか」ですが、富士山の宝永の噴火の際、麓の須走村では3mの降灰が有ったが村人の死者の記録は無いので脱出出来たとしましたが、この点に関しては検討が必要です。

 それでも脱出出来なければ仮説は成り立たないので脱出出来たとします。
 
 脱出は相当困難を極めたに違いありません。ガラス質の火山灰は吸い込むと呼吸器疾患を引き起こし、又高空に舞い上がった火山灰は前線を刺激して豪雨をもたらし、豪雨は山中に降り注いだ火山灰を土石流となってあらゆる物を押し流すからです。
 
 九州東側は火山灰が厚く降り注いだ為、脱出ルートは多分九州の西側を通って九州北部にたどり着いたと考えられます。何故なら長崎県や福岡県では、喜界アカホヤ噴火の降灰が有ったにも関わらず、縄文早期から晩期まで生活が続いたと思われる痕跡がある遺跡が有るからです(図3参照)。
 


   図3、縄文早期と前期の遺跡の推移(拡大)。
      南九州と四国西武は縄文前期の期間、遺跡が発見されていない。

 
 そして九州北部の地で数千年、天孫族は大陸から戦乱を逃れてきたボートピープル、即ち長江人と邂逅を果たします。

 長江文明は、4000年前頃の寒冷化による食料危機で蜂起した黄河流域の牧畜民の度重なる侵攻で滅亡したと考えられています。その為、長江人のY-DNAがO1b2a1aと考えられる人が日本、朝鮮半島、ベトナム、インドネシアに見られるのに、中国には雲南省の山岳地以外殆ど見つけられないのは、その地でホロコーストが有り、生き延びた長江人が四方に逃げた結果と考えられるからです(図4参照)。
 

 図4:アジアにおけるY-DNAの分布と長江人の脱出ルート(注5)。(拡大)。
注5:このY-DNA分布は現代のものですが、O1b2は中国周辺にいるが中国本土では山岳部に有るだけで殆どいません。そしてO1b2は世界で初めて水稲栽培を初めた長江人と考えられています。
 
 又長江人は水の民です。日本に稲作が伝わったのは、彼等は常に逃げられるように船に種籾も積んでいたからでしょう。と言っても黒潮分流の対馬海流に乗ったとしても対馬海流は最大で1.3kn、長江河口から長崎まで2週間ぐらいかかります。従ってこれについても検証が必要です。
 
 世界で初めて稲作、それも水稲栽培を始めた長江文明。土器の作成も縄文土器と同じくらい古い長江文明。この長江文明と縄文文明が北九州の地で邂逅したのです。
 
 しかし実は縄文人も長江人も落ちこぼれなのです。縄文人が日本列島に入ってきたのは、ナウマン象等の動物を追ってですが、むしろ後から来る人間との動物争奪戦に敗れて、追われるように日本列島に入って来たのです。従って縄文人のY-DNAは大陸に痕跡すら有りません。そしてナウマン象を取り尽くし、やむなく漁労採取の定住生活に入ったのが縄文時代です。
 
 長江人も同様、大陸の動物争奪戦、即ち中原に鹿を逐う戦いに敗れて、やむなく長江辺りでの漁労採取の定住生活に入ったのです。しかし必要は発明の母、長江人は世界で初めて水稲栽培を発明します。
 
 農耕の始まりが戦争と階級制度を生んだとのトンデモ説が流布されていますが違うと思います。長江人が牧畜民の侵攻により離散したように、中原に鹿を逐う言葉が示しているように、戦争文化は遊牧民の文化です。騎馬民族に至っては戦争が本業になりました。宦官・奴隷が遊牧民の発明だったように、階級制度も遊牧民が生んだ文化です。強い者が上に立たないと成り立たないのです。恐らく黄河文明は遊牧民が畑作民の上に乗る形で出来たのでしょう。
 
 それに対して定住は分業を生み出します。縄文時代に硬玉の翡翠を加工出来たのは、誰の指示を受けずに自由に仕事が出来たプロフェッショナルが居たからです。定住が長い縄文社会も長江社会もプロフェッショナル集団の共同体なのです。その結果、日本以外の国の人ではマネジメント志向の人が多いのに対して、プロフェッショナル志向の人が多いのが日本の特徴です。
 
 日本では強力なリーダが居なくても仕事が出来てしまう事が多々ありますが、それは縄文と長江の文明の性格を引き継いでいるからでしょう。大勢を纏める必要がある場合もありますが、そのとき必要なのは祭祀ぐらいです。正に天皇の役割ですね。
 
 そして九州北部の地で天皇の先祖が出会った長江人の一人が藤原氏の先祖の天児屋根命(アメノコヤネ)と思われます。藤原氏が常に天皇を補佐する形になったのは、天児屋根命が別の文明の知恵を持っていた為と思えば納得できます(注6)。
 
注6:天児屋根命の子孫のY-DNAはO1b2a1a。藤原鎌足の墓ではないかと言われる阿武山古墳の遺体のY-DNAもO1b2a1aです。天孫族と藤原氏の結びつきはこの時からですが、7300年前に長江人が上野原遺跡の地に居たとは考えられないので、天児屋根命がチャッカリ天岩戸神話に登場するのは、古事記・日本書紀を編纂するときに、藤原氏が無理やり付け加えたものと思われます。
 
 そして長江人から水稲稲作を教わった天孫族は、縄文晩期の寒冷化から一早く繁栄して他の部族を圧する程の勢力となります。瓊瓊杵尊(ニニギの尊)が天照大神から稲穂を持たされたのは、天孫族が他より早く稲作を行っていた証拠です。日本最古の菜畑遺跡等がそれを裏付けています。
 
 否、それ以前に天孫族は一大勢力だったでしょう。理由は信仰です。他の縄文人部族も自然崇拝の信仰のようなものを持っていたと考えられますが、間近に喜界アカホヤ噴火という強烈な体験をした天孫族の自然崇拝は、天孫族の団結を強固にして他を圧したとものと考えられます。従って天孫族の自然崇拝の中で一番重きが置かれているのが天照大御神であるのは、ただの偶然では無いでしょう。
 
 例えば天岩戸神話を日食に結びつける説が有りますが、日食による暗黒時間は最長で7分間です。古代支那等で日食を凶事と結びつける事例や、世界には日食だろうと思われる神話も有りますが、日食により太陽を最高神と崇める信仰が生まれた例はあるでしょうか。やはり喜界アカホヤの超巨大噴火と暗黒の世界の強烈な体験が天照信仰を産んだと思います(注7)。
 
注7:平安時代(915年)に起きた十和田カルデラの大噴火では、火砕流(毛馬内火砕流)が日本海まで流れ下り、神話ではありませんが八郎太郎と南祖坊の戦いの伝説が生まれました。インパクトのある災害ではこのような物語が生まれるのです。これだって火山に興味が無い人間が聞いたら只の御伽話と思うでしょう。
 
 只この仮説も3番目の難点の、5000年以上も記憶を継承出来るだろうかと思うと自信が有りません。例えば最古のヘブライ語の文字は紀元前1千年程。モーゼの出エジプト記が紀元前1600年頃だとすると、600年程度なら民族の記憶を継承出来そうですが、さて5000年は?と言われると、黙り込むしかありません。
 
 次は邪馬台国と卑弥呼の問題です。天孫族が九州北部で居を構えていたとなると、魏志倭人伝を避けては通れません。
 
 古事記・日本書紀の神代期の天岩戸神話までは天上の神樣同士の話のように見えますが、出雲の国譲りやニニギ尊の天孫降臨の話頃からは、何やら生くさい話になってきます。神が人間界に関与してくるのです。例えば国譲り神話です。
 
 出雲の国は荒神谷遺跡の発見等から弥生初期頃の存在が推定されており、その出雲の国を天照大御神は、国を譲って貰えと周りに指示しているのです。天孫降臨についても天照大御神はニニギ尊に稲穂を持たせたりと細かい指示を出したりと非常に人間くさいです。
 
 また稲作は縄文晩期か弥生初期から始まったものであり、天岩戸神話が7300年前の出来事とするこの仮説の立場としては、天岩戸神話の頃と天孫降臨の頃の天照大御神は別人格という事になります。
 
 従って魏志倭人伝頃に登場する天照大御神は想像上の神では無く人間ではでないでしょうか。天照大御神の代役がいたと考えられます。それに適任なのが卑弥呼です。卑弥呼は日巫女と読めます。日巫女は日神子とも書き、日神は天照大御神のことです。恐らく卑弥呼は天照大御神が憑依した巫女ではないでしょうか。
 
 魏使倭人伝では卑弥呼が女王となっていますが、「その国(邪馬台国)、本はまた男子を以って王と為す。住みて七、八十年、倭国は乱れ、相攻伐して年を歴る。すなはち、一女子を共に立て王と為す。名は卑弥呼といふ。鬼道に事へ、よく衆を惑はす。年、すでに長大にして、夫婿なし。男弟有りて国を治むるを佐く」と、一女子を共に立て王と為すと書いているので、別に男の王が居た筈であり、「鬼道に事へ、よく衆を惑はす」と有るのだから、日の神が王以上の権威を持っていたとするなら、日の神が憑依した卑弥呼が邪馬台国の王に指示していたと思われます。
 
 邪馬台国の国名ですが、邪馬台国は邪馬壱国の間違いである説の方が有力なようですが、後漢書には邪馬台国の記述があるようなので、敢えて邪馬台国とします。理由は邪馬台国はヤマト国の当て字か読み間違いとしたいからです。つまり、この度の仮説では南九州から北九州に逃れて来た天孫族が北九州でヤマト王朝を設立した事が前提になっているからです。
 
 また邪馬台国が貰っている筈の金印については、志賀島で発見された「漢委奴国王」の金印こそが邪馬台国が貰った金印でしょう。委の奴の国王と読むから可笑しな話になるのです。
 
 委奴国とは、狗奴国が犬野郎の国の意味と同様、小人野郎の国の意味です。従って委奴の読み方はワヌです。この点については韓国人の方が理解しています。彼等は日本を蔑むとき、日本の事を屡々委奴(ワヌ)と言います。周辺国を蛮族と思っている中国の歴代王朝が良い名称を与える訳がないのです。
 
 それでも北九州に金印を貰える程の倭国最大の国が存在し、それが邪馬台国、即ち後の日本であるヤマト国であることは間違いがないでしょう。
 
 この辺は論争の種になるので避けたい処ですが、日本書紀にも「神武東征が日向を発ち」と書いてあるので、ヤマト王朝が九州に有った説を譲る訳には行きません。
 
 でも「邪馬台国も卑弥呼も古事記・日本書紀に記載が無いではないか」の意見もありますが、これ等はヤマト朝廷にとっては黒歴史、倭国の名や朝貢をしていた事を恥じるようなヤマト朝廷が載せる訳が有りません。
 
 卑弥呼についても「鬼道に事へ、よく衆を惑はす」と書かれている処を見ると、当時から問題視する倭人が居たのでしょう。当然正史である日本書紀に書ける訳がありません。
 
 但し天照大御神が憑依してニニギ尊を天孫降臨させた南九州の地等については、ニニギの尊が「此処は俺達の神聖な土地だ」と言っても丸く収まった訳では無く、エルサレムを巡る紛争と同様、紛争地帯となり、ヤマト朝廷が武力で解決するはめになりました。
 
 これら黒歴史は有ったとしても、日本は先住民の王朝が築いた継続する世界最古の国であり、世界的規模の噴火を元にした神話と、それに伴う7000年前に生まれた世界最古の宗教を頂く国であり、これまた世界最古の縄文文明と長江文明が合体し、その文明を継承している国であると言えるでしょう。
 

地震波形表示プログラム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;
}
/*********************************************************************/
ここまで。

カレンダー

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:
崗上虜囚
性別:
非公開

アナライズ

カウンター