2014年11月30日日曜日

【PHP】多次元連想配列の学習記録

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

今日は下記のページを参考に勉強しました。とても役に立ちました。ありがとうございます。

PHPの多次元配列と連想配列についてのサンプル


下記は上記のリンクのコードをテスト結果を格納するように変更しました。実際には次のTAGが抜けています。


2014年11月29日土曜日

引き続きPHPの勉強です

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

引き続きPHPの勉強をしています。今日はネット上で見つけた次のリンクを使いました。
「PHPコードではなくPHPコードの「書き方」を知る」を発表してきました」


オブジェクト指向はクラスの使用とともに教科書的な勉強はしてきましたが、とても簡単な練習問題を使いながらもそのポイントが改めて理解できる、良い講義でした。

例えば1から20の自然数において、基本はその数字を表示させるのですが、FizzBuzzという3で割り切れる数にはFizz、5で割り切れる数にはBuzz、両方で割り切れる数にはFizzBuzzで置き換えるというものです。

私の始めのコードも注文通り、入力部と出力部のコードがごっちゃになったものでした(笑)。

PHPでアレイとForeachの学習

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

php.orgのマニュアルを参考にアレイとforeachのお勉強をしました。
http://php.net/manual/en/language.operators.string.php


$low = 1; $high = 30; $step =1;
$i = range($low, $high, $step);

print_r ($i);
echo "
"; // リファレンスとして使用しないと、アレイ$iの要素はそれぞれ2倍とならない foreach ($i as $value){ $value = $value * 2 ; } print_r($i); echo "
"; // リファレンス使用で、アレイ$iの要素はそれぞれ2倍となる foreach ($i as &$value){ $value = $value * 2 ; } print_r($i); unset($value)

アレイ$iのアウトプットは、それぞれ次のようになります。

オリジナル
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 )


2倍となっていない
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 )


2倍となった
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 [5] => 12 [6] => 14 [7] => 16 [8] => 18 [9] => 20 [10] => 22 [11] => 24 [12] => 26 [13] => 28 [14] => 30 [15] => 32 [16] => 34 [17] => 36 [18] => 38 [19] => 40 [20] => 42 [21] => 44 [22] => 46 [23] => 48 [24] => 50 [25] => 52 [26] => 54 [27] => 56 [28] => 58 [29] => 60 )




2014年11月24日月曜日

Web等の技術を、もっともっと教育利用できればいいですね

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

昨今のニュースを見ていて、技術、資本そして言葉も含めて、ありとあらゆるものが諸刃の剣かも知れないと思う今日この頃です。

その一方で、けっして暗い側面ばかりではなく、正しく活用すれば「その良い面を使って、もっと人々に役立たせることも出来る筈だ」という期待を持っています。

映像技術やWebの技術はもうすでに教育現場で活用され成果をあげていますが、さらに「技術の進歩と普及」を教育活用していけるのかも知れません。

********************

2014年11月23日日曜日

ScilabによるFDTDの学習(1) 1次元方向への電磁波の伝播

 Scilabを使っていますが、ソースコードを掲載することはMatlabのFile Exchangeの規約に反すると思われ、掲載を見送っています。いつかオリジナルでプログラミングした際に、ソースコードを掲載したいと思います。

以前、あるドクターから宿題があり、FDTDによる電磁波伝播のシミュレーションの勉強をしたことがあります。

その際にMatlabクローンのScilabを使って、自由空間を1次元方向に進む電磁波をシミュレーションしてみたのが、下記のグラフです。

原点(0,0,0)で時間的にSineとして振動する電場を与え、それが垂直方向に磁場を作り、またその磁場が電場を作っていきます。実際はこの波が進んでいく様子が 経時的にアニメーションのように表示されます。

付録:グラフのお化粧およびアニメーションの作成 : 最終のScilabコード(1)

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。


前回Sine波を重ね合わせてのこぎり波を近似するプログラムを前回紹介しました。

Scilabにおける関数の定義と使い方(2)

波形を表示するエッセンスの部分は非常に短いコードですが、グラフのタイトルや軸の名称がなかったり、表示ごとに縦軸の最大値が表示波形の振幅に伴って変わってしまうなど問題が残っています。

その際エッセンスの部分のコードだけ紹介しましたが、グラフのフォーマットなどを含めた最終的なものをご参考に記載します。最後に描かせたグラフを静止画のgifフォーマットとして出力させています。




2014年10月30日木曜日

Windows 7 のシステムが出す音をオフに設定する方法


Windows 7 のシステムが出す音をオフに設定する方法

1.[スタート]→[コントロール パネル]→[ハードウェアとサウンド]→[システムが出す音の変更]の順にクリックします。

2.「サウンド」ウィンドウの「サウンド」タブが表示されたら、「サウンド設定」欄のプルダウンメニューから[サウンドなし(変更)]を選択します。

3.「Windows スタートアップのサウンドを再生する」のチェックを外します。





2014年9月28日日曜日

SQL文におけるデータベースやフィールドを指定する識別子 (mySQL)

ダブル・クォーテーション(")、シングル・クォーテーション(')、バッククォート/バックティック(`)の使い方を一度整理してみます。

基本的にSQLの構文はどのデータベースでも同じでしょうが、下記リンクなどを読む限りではデータベースソフトごとに微妙に仕様が違うと思われます。

ここではMySQL 5.4/PHPMyAdmin4.1.12で確認しています。

違うデータベースソフトを使っている場合には、それぞれのデータベースソフトのマニュアルを参照するのが一番確実でしょう。
http://pear.php.net/manual/ja/package.database.mdb2.intro-quote.php

ここでも最後にmySQLの参考ページを紹介します。

「顧客データ」というデータベースで「名前」というフィールドに「鈴木」という文字列を含むレコードを抽出するクエリ文は次のようになります。

ここで%はSQLのWHERE句におけるLIKE演算子におけるワイルドカードです。


SELECT * FROM `顧客データ` WHERE `名前` like '%鈴木%'


私もごちゃごちゃになっていたのですが、データベース名とフィールド名はバックティック(`)で引用し、指定してあげる必要があります。


2014年9月26日金曜日

MySQLでデータ挿入が出来ない!?

Windows Server 2008上にアプリケーションとFTPサーバー機能を持たせて、Webベースのドキュメント共有・管理システムを運用しています。PHPとMySQLを利用しています。

社内のサーバーに移行作業と基本的なテストが終わり、いよいよ切り替えというタイミングなのですが、一部のページでmySQLのデータベースへデータ登録がエラーとなるという不具合が分かりました。

テストの時には問題なかったと思うのでとても不思議です。

2014年9月22日月曜日

アプリケーション・ウインドウの自動最大化の解除 (英語版のWindows 7)

Windowsのデフォルトなのでしょうか、よくウインドウを移動したりしている際に勝手にスクリーン全体に最大化されてしまうことがあります。

スナップ機能というのですね。でも私は勝手にサイズが最大化されると、本当にいやな気持ちになります。




このスナップ機能を解除する手順です。

1. [スタート]メニューから[Control panel]をクリック。

2. [Ease of Access]をクリック。


3. [Change how your mouse works] をクリック。


4. [Prevent windows from...] をクリック。最後に[OK]ボタンを押します。






よろしければ、クリックいただけると嬉しいです♪


2014年9月21日日曜日

アメリカ人だって大変なんです~ (単位換算 その2)


先日の記事の中で、摂氏温度の換算について次のように書きました。

アメリカ人も換算に苦労しているようです。正確な換算式は(華氏温度 - 32)*5/9ですが、私などはパッと概算で換算したい場合は、30を引いて半分にしています。ただ、どうしても誤差は出てしまいます

アメリカ人だって大変なんです~ (単位換算)

これは私自身の反省ではありますが、この誤差がどの程度なのか定量的には把握していませんでした。今回簡単に検討してみることにしました。

簡単な例題ですが、どうせならScilabを使ってまずグラフ化しました。が、まずはExcelで検算したものを使って先に結論を紹介し、Scilabのコードは後ほど紹介します。
縦軸:℃ 横軸: F青:正確な値  
赤:近似値   
       緑:正確な値 ― 近似値  

2014年9月19日金曜日

アメリカ人だって大変なんです~ (単位換算)


すみません、ちょっと技術的な話でもあるので、こちらでも紹介させていただきます。

アメリカ人だって大変なんです~

アメリカ人のエンジニアと食事をした際に、単位の話が出ました。

皆さんご存知のように、アメリカでは一般的にMKS単位系(長さの単位にメートル m、質量の単位にキログラム kg、時間の単位に秒 s を用いる)が使われません。

ただ大学等の物理などの授業では、やはりMKS単位が使われるようです。先日見た『MIT白熱教室』でもそうでした。重力加速度は我々と同じ9.8m/s/sが使われていますね。

さて、温度も水の氷点と沸点をそれぞれ0℃と100℃と定義した摂氏温度を国際的には使っていますが、アメリカでは氷点を32Fとしている華氏温度ですね。






2014年9月13日土曜日

一口に赤外線といってもさらに細かく分類されますね

カメラやビデオなどで夜間の撮影モードが搭載されたモデルがありますよね。いわゆるナイト・ビジョンといわれるものです。

これは赤外線を利用していることは知っていたのですが、赤外線の中でも比較的波長の短く、可視光に近い、近赤外線(およそ0.7から2.5μm)だということです。

ちょっと調べる機会があったので、メモとしてまとめます。

その他大きく分類すると、化学物質の同定に使われる波長がおよそ2.5 - 4 μmの中赤外線、天文物理や熱源として登場する波長がおよそ4 - 1000 μmの遠赤外線に分けられます。

英語ではInfrared、略してIRと呼ばれます。

夜間を含めたセキュリティ・カメラのニーズからソニーを始めとするいくつものメーカーから赤外線撮影モードを搭載したカメラ、赤外線を照射する機器が出ているようです。

この赤外線投光器で利用されている波長には主に850nm(0.85μm)と940nm(0.94μm)があり、前者は人間の目でも赤い発光が認識できるため可視タイプ、後者は不可視タイプと呼ばれています。

最近の赤外線投光器はLEDタイプのものが多く、購入する場合には使用状況に応じて、上記の波長のほか、ビームの幅とその到達距離(レンジ)、および消費電力(W)などが比較検討するための主要なパラメータとなります。



2014年9月11日木曜日

サーバー移行の覚書

使用中のサーバー(Windows Server 2008 R2)ですが、社外のレンタルから社内のものに移行しました。


個人用のメモになりますが、まとめます。

理由

1. コスト低減
2. セキュリティ強化(拠点間VPNを使用)

現状の使用方法

FTPおよびWebデータベースおよびそのアプリケーション(PHPとmySQLの連携による)

本社と拠点間で申請ドキュメントの共有およびそのデータベース化

特長

Webページで本社サイドは本社ドキュメントを必要情報と一緒にDBとして登録できる
 登録日と登録者および製品情報をもとに管理番号を自動発番し、保管フォルダを自動生成する
 登録完了後に保管フォルダのリンクが表示される。
 本社の登録者は該当ドキュメントをExploreを使って貼り付けるだけでよい。
 (登録後、連絡メールの自動送信機能は未実装なので、別途メールで連絡が必要)
 拠点側の担当者および関係者の全員がそのフォルダにを開けば該当ドキュメントを入手できる
 登録されたドキュメントはmySQLに登録されており、用意されたスクリプトページで一覧を表示することができる。

移行の作業内容

1. サーバー準備はIT部門による
  新サーバーへのOS搭載、ネットワーク設定(VPN、IPアドレス設定など
2. PHP5.5/mySQL 5.5の据付
3. 必要ユーザの設定
4. IISによるWebアプリサーバー、FTPサーバーなど必要なサーバー機能の設定
5. アプリケーション (PHPコード)あるいはドキュメント保存先など、必要フォルダの作成と権限設定
   wwwroot、ftprootおよびその下のアプリ、旧データベースのバックアップおよび 
6. アプリケーション、データベース、ドキュメントのコピーと復旧
7. 動作確認テスト




2014年9月7日日曜日

付録:グラフのお化粧およびアニメーションの作成 : 最終のScilabコード (2)

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。 

後日追記
ImageMagicを使ったGifアニメーションはループになっていなかったので、最終的にはAdobeのFlashを使いました。アニメに出力した際グラフの線が途切れ途切れになってしまい苦労しました。画像サイズをFlash上で変えないほうが良いようです。

************************************************************

前回の続きです。

付録:グラフのお化粧およびアニメーションの作成 : 最終のScilabコード(1)


最後にGifファイルをつないでアニメーションを作る方法です。Webを調べ、ImageMagicというオープンソフトを使うとできることがわかりました。


MatlabプログラムをScilabに変換、再編集するに当たって

Scilabのコードは大雑把な言い方ですが、90%程度Matlabと同じです。コツさえつかめれば、Matlabの簡単なコードをScilab上で動かすことはさほど時間が掛かりません。

もちろん複雑なコードはそれなりに時間が掛かったり、落とし穴があって悩んだりしますが。

ポイントは次の通りです。私は付属のSciNotesをエディタとして使っていますが、Find & Replaceが活躍します。


2014年9月6日土曜日

Scilabにおける関数の定義と使い方(2)

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

今回もC/C++を勉強していた時のテキストブックに出ていたプログラムをScilabで作ってみました。

関数の定義には、多少ですが、前回とは違う方法があり、これを使いました。

倍音としてSine波を徐々に重ね合わせていくとのこぎり波に近づいていく様子が分かると思います。

関数形は下記より調べ、k=11まで重ね合わせて作成したものが下のアニメーションです。kの数を増やしていくとさらにきれいなのこぎり波となっていきます。
Wiki: のこぎり波


Scilabにおける関数の定義と使い方(1)

今回はC/C++を勉強していた時のテキストブックに出ていたプログラムをScilabで作ってみました。

まずは関数の定義のしかたと使い方を習得するために階乗のプログラムです。ここではForループでも良かったのですが、whileループとしました。

Scilab自体にfactorial()という関数があるので、ここではmyFactorialという関数名としました。引数を一つとり、この引数(int型)の階乗を計算してその値を返します。

Scilabのヘルプにも関数の使い方は載っており、参考としました。

14行目はデバックの目的で入れてあります。5の階乗を計算させていますが、ループが正しく回っていることがコンソール画面上で確認できます。

Scilab ― 始めの一歩と免責事項

むかしMathematicaという数値計算ソフトをかじっていましたが、恥ずかしながら十分に使いこなしてはいませんでした。

今回数値シミュレーションを勉強するに当たってMatlabクローンであるScilabを選びました。

2014年9月5日金曜日

JavaScriptをかじっています♪

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

今回のものはゲームというよりも自分用の英語トレーニングツールですが、こんなのを作りました♪

『えいごであそぼう』の第2弾、LとRの特訓編です。


LとRの特訓



これ自体はAS3.0を使っていますが、ブログを書くに当たってArrayの中身をカンマ区切りの英単語リストに直す必要あり、お勉強も兼ねてJavaScriptで遊んでみました~ (次の1)を2)のように直したかった)

1) "rice", "lice", "rose", "louse", "light", "right", "grew", "glue", "slew", "straw",
2) rice, lice, rose, louse, light, right, grew, glue, slew, straw,


スクリプト
まだまだつたないコードで恥ずかしいのですが、何かのお役に立てればと思い、あげますね。私もWeb上のあちこちのサイトでお世話になったお礼です。ただし、使用される場合は自己責任である旨、ご了解願いますね。


ちなみに今回は特に次のサイトにお世話になりました。
http://www.html5rocks.com/ja/tutorials/file/dndfiles/
http://d.hatena.ne.jp/sho322/20130627/1372355192


今回のJavaScriptのコードです







情報処理技術者試験の記録です~

ずいぶん昔のものですが、私が情報処理技術者試験に挑戦していた頃の勉強記録です。
基本的には模試を買い込んできての独学。たまに何社かの模擬試験を受けに行ったり、自宅受験をしました~

模擬試験との格闘記録

当 時のシステムアナリストまで一気に取得しましたが、この記録を読むと、全部紙一重で合格してきたように思います。模試で出来たところと出来なかったところ を技術・知識の面とメンタルの面の両方から分析し、合格点数とのギャップをどう埋めていくかという点に心を砕いていたことに改めて気がつきます♪


野 球やサッカーなどスポーツとは異なるものの、資格試験も特に本番は勝負ごとと似ている側面もあるのかなと思います、ケアレス・ミスして取れる点数を取りこ ぼさない、分からなくてgive upしたい問題も、粘りに粘って一つでも正解でな選択肢をふるい落とす(そして4択を、3択へ2択へと落とし込む) - テクニックもそうですが、集中力 と精神力、粘りも重要な役割を果たすと思います♪


受験者の皆さん、頑張ってくださいね!


参考
現在の区分で言えば、次に(ほぼ)相当します。。

基本情報技術者試験 (FE)
応用情報技術者試験 (AP)
ITストラテジスト試験 (ST)



英語であそぼう!

ある別のブログで紹介したのですが、AS3でお子様向けの英語教育ゲームの習作を作りました。


LetsPlay2
 

上の画像をクリックして、PLAYボタンを押してください。

音声が流れるので、マッチする絵をクリックしてね! まだまだ習作でお恥ずかしい限りの単純なものですが、そのうちバージョンアップしますね!


私が使用しているRemote Desktopです♪

TeamViewer - ネット経由のパソコン遠隔操作(リモートコントロール)ソフトです。

http://www.teamviewer.com/ja/

便利ですよ~


Windows Server 2008 R2で苦戦しました

PHPとMySQLによるデータベース管理
会社の仕事の一部としてWindows Server 2008 R2を外部にレンタルし、PHPとMySQLで簡単なWebベースのデータエントリープログラムとデータベースを作成、運用しています。

このサーバー上ではWebサーバーとFTPサーバー機能を持たせ、Web上のフィールドで必要な情報を入れることによって、フォルダを自動生成し、必要なファイルをそこにアップロード/ダウンロードすればいいという仕組みも作っています。本職のプログラマではないのでいたってシンプルなものですが、PHPは手軽な割にはけっこういろいろ遊べます。  

トラブルの始まりは・・・
サーバー上の単純な設定ではこれまでずっと動いていたのですが、トラブルの始まりはユーザを3つほど追加してフォルダごとにアクセス権を変えようとしていた時でした。なんとftprootに置いたいくつかの重要なフォルダの属性がおかしなことになったらしく、外部からFTP接続できなくなってしまいました。始めは例えばhogeというフォルダ内のファイルがダウンロードできないというのが問題でした。  

フォルダ名を元に戻すと外部からアクセスできなくなる!?
アクセス権をいろいろいじってもうまく行かないので、hogehogeという新しいフォルダ名で新たにフォルダを作ってファイルも置き直したら何とか外部からアクセスできるようになりました。 ところがとても不思議なことに、これをもとのhogeというフォルダ名に戻すと、その途端にFTPフォルダとして外部からアクセスできなくなるのです。例えばhogeではなくhoge2なら問題ないのですが、hogeに戻すとダメになるのです。これには途方に暮れました。このまま我慢しようかとも思いましたが、PHPのコードを書き直す作業が発生する他、下手にフォルダ名を変更したまま整合がとれない可能性が残るのも気持ち悪いので、丸々1日七転八倒してしまいました。

設定ファイルをいじってもうまく行かず、最後は力技で
エラーログによるとおそらく原因はapplicationHost.configという設定ファイルの中にFTPサイトのフォルダごとのユーザ権限が記載されている箇所があり、この部分と実際のフォルダのアクセス権限属性にミスマッチがあったのだろうと推測しています。しかし、この設定ファイルのバッティングしていると思われる箇所を消したり、net share korekore /deleteなどといろいろいじってみましたが、結局うまく行きません。設定ファイルは変更して修正しても、サービスやロールをRestartするだけではOSが変更を認識しないようです。 結局、IISマネージャで一度FTPサイトを消去して再度作成し直し、何とか復帰しました!この時同時にftprootフォルダからフォルダも全て一から作成し直しています。  
Windows Server 2008 R2は敷居が高い
私自身がサーバー運用の専門家ではないためいろいろトライ&エラーでここまで構築してだましだまし運用していますが、特にACL(アクセス制御リスト)の理解は決定的に不十分です。 見よう見まねで設定しそれなりに動いてはいますが、一度体系的に学習したいものです。何か良い本などがあれば教えてくださいね!


2014年7月6日日曜日

HTMLによる右クリックの禁止方法

※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。

いろいろな方に迷惑をかけないよう掲載している写真には個人情報が入らないように気をつけています。

が、特にもう一つのブログで写真や教育ゲーム用に作ったswfファイルが簡単にダウンロードできてしまうことに気がつきました。

HTMLで右クリックを禁止することが可能なんですね~ プリント・スクリーンなどは防げませんが、私の目的には十分です。

ネット上では自分もいろいろな方のお世話になっており、節度を保って情報や素材を交換することはむしろ好ましいと考えていて、あまり目くじらを立てているわけでもないので~

次のサイトから情報をいただきました。ありがとうございます。他にも有用な情報が多く、ちょくちょく訪問させていただきたいと思います。
 http://www.kanaya440.com/contents/tips/html/006.html


<body oncontextmenu="return false;"> 

<body oncontextmenu="alert('右クリック禁止'); return false;">


拙作のゲーム等についてはコードをもう少しきれいにして自由にDLできるようにするつもりですが、それ以前でも希望する方には喜んでお渡ししますので、連絡くださいね♪



にほんブログ村 IT技術ブログへ

2014年7月1日火曜日

Task Barの異常を復帰させる方法 (Windows 7)

Windows 7を使っていて、たまに下の写真のようにTask Barの透明感がなくなって、白くなってしまうことがあります。

特にノートPCで電源が切れたなど、Windows 7が以上終了した際になるような気がしています。

こうした場合、Aero Theme(エアロ・テーマ)がカスケードされ、選択・変更も出来ません。

ThemeStopped2.png


2014年6月1日日曜日

Scilabで波形解析の勉強中(フーリエ変換)

前回に続いて、これも防備録です。CQ出版社の「Scilab入門 (大川善邦著)」の第4章フーリエ変換です。

次のグラフはノイズをのせたSin波形とそのFFTのグラフです。後述のスクリプトの最後の方にありますが、n=32としています。




n=2とn=30で同じピークになっていますが、これがナイキストの定理を視覚化したものだろうと思います。

まずはシンプルに4点でFFTをかけてみます。

-->x=[0:3]

-->y=[1 2 -3 1]

-->F=fft(y)

-->plot(x,abs(F))

-->atan(imag(F)/real(F))


-->plot(x,F)

次に32点に拡張してみます。

-->n=32

-->x=[0:n-1]

Cos波形です。m=1としています。

-->m=1
-->yc=cos(2*%pi/n*m*x)

-->plot(x,yc)

Sin波形です。今度はm=2としています。

-->m=2
-->ys=sin(2*%pi/n*m*x)

-->plot(x,ys)

Sin波形にノイズを乗っけてみます。

-->ysr=ys+0.5*(rand(x)-0.5)

-->plot(x,ysr)

-->fsr=fft(ysr)

-->plot(fsr)
-->plot(x,abs(fsr))


※ ソースコードを見やすくするために、Syntaxhilighterを使っています。状況によって表示に時間がかかる場合があります。


Scilabで波形解析の勉強中(単純移動平均によるノイズの平滑化)

CQ出版社の「Scilab入門 (大川善邦著)」で勉強しています。工学的にもレベルの高い内容を簡便にまとめたとても良い本なのですが、初学者には途中が分かりづらいところも多く、苦労しました。個人的な防備録です。(この記事も端折っているところが多いことを承知していますが、個人的な防備録ということでご容赦願います。いつか丁寧に書き直せればと思います〕


仮にxに最後に添付したようなデータが代入されていたとします。
このxに対して単純にplotすると次の通りとなります。


-->plot(x)





さて、このxに対して単純移動平均を使い、ノイズを平滑化してみましょう。次の式を使います。

movave.sci

function [y, q]=movave(x,m)
n=length(x)
y=zeros(1:n-2*m)
q=0
for i=1:n-2*m
for j=1:2*m+1
y(i)=y(i)+x(i+j-1)
end
y(i)=y(i)/(2*m+1)
q=q+abs(x(i+m)-y(i))
end
q=q/(n-2*m)
endfunction




まずこのscilabのスクリプトを読込みます。
-->exec('movave.sci')


そして単純移動平均を使って平滑化したデータをyおよびy2とします。それぞれ、スパンを1と3として、平滑化しています。

-->y=movave(x,1)
-->y2=movave(x,3)



最終的にx、yおよびy2を重ねてplotしてみましょう。分かりやすいように色を変えています。

-->plot(x)
-->plot(y,'r')
-->plot(y2,'g')




いかがでしょう。このようにもともとのノイズが平滑化されていく様子が分かると思います。


-->x
x =

0.1264897
1.2129952
1.0036602
0.1729712
1.5782405
0.4174043
0.9388323
1.2149275
1.6000938
1.8087148
1.7028309
0.6147606
0.5568364
1.6944389
2.0721791
1.608637
1.9073498
0.8274307
1.1922035
1.248821
2.0435278
2.1330404
0.9264366
1.8342634
2.0288983
2.1875188
2.2077628
1.1990715
2.1063092
2.479181
2.1946336
1.7015175
1.2910821
2.345001
2.1686946
1.0549354
1.6415012
1.8936499
2.4144687
1.7341093
2.3342741
1.5551764
0.9906141
2.0238292
1.400569
1.5377264
0.8224160
1.5273907
0.8184764
1.6268398
1.9968465
1.0661916
1.522688
1.3923442
1.1693609
1.5086416
1.7246005
1.3852612
0.4135782
0.4977468
1.5468636
0.8303553
0.9147481
1.4109466
0.1027075
1.213852
0.5256967
0.4246119
0.6704330
1.1481728
1.127669
1.0395627
0.7132832
0.0062328
0.8399817
0.2014862
0.6045971
- 0.2585392
0.6779304
0.7655637
0.2567430
- 0.4638138
- 0.2407652
- 0.5779273
- 0.7885088
- 0.8389518
0.3232153
- 0.6311532
- 0.1317764
- 0.35279
- 0.1574515
- 0.3789825
- 0.4373964
- 0.9820469
- 0.6562250
- 0.1807200
- 0.2197603
0.2198833
- 0.5447156
- 0.1595177
- 0.0951699
0.1972291
0.2044302
- 0.6498597
- 0.3569228
0.3518487
0.3867190
- 0.0233764
- 0.2070345
0.6741294
0.2762051
- 0.0304471
0.5493576
- 0.6010724
- 0.2336461
0.1226762
0.1503910
0.1267047
0.2057953
- 0.2009539
0.1940034
1.1100968
- 0.2468777
0.9820300
0.2959132
0.2379027
1.1986828
1.315955