• 検索結果がありません。

1 ( ) 1.1 (convert.sh) (18GHz 26GHz) C (convert.c, convert1.c) mesure-ryudai convert.sh #!/bin/sh # file1 file1= ls -1 $1 # file1 data for data in $fi

N/A
N/A
Protected

Academic year: 2021

シェア "1 ( ) 1.1 (convert.sh) (18GHz 26GHz) C (convert.c, convert1.c) mesure-ryudai convert.sh #!/bin/sh # file1 file1= ls -1 $1 # file1 data for data in $fi"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

情報工学実験

I

ー無線通信における降雨減衰特性のモデリングー

担当教員 : 宮里 智樹

学籍番号 :

065712D

氏名

:

大城健太

実験日7月20日

提出日8月2 4 日

最終締切日8月24日

(2)

1

課題

(

1週目

)

• データをダウンロードし、2秒毎に記録されている測定値を10秒毎のデータに作りかえよ。

1.1

2秒毎に記録されている測定値を10毎のデータに作りかえる

• シェル (convert.sh) で受信強度 (18GHz、26GHz) のデータを1つずつ C 言語ファイル (convert.c, convert1.c) に 渡していき処理を実行する。シェルの引数には、mesure-ryudai へのパスを入力。 • convert.sh #!/bin/sh # バックコート内の実行結果を変数 file1 に代入 file1=‘ls -1 $1‘ # file1の内容を上から順に変数 data に代入 for data in $file1

do ‘mkdir $data‘ echo "∼ディレクトリ「$data」にあるファイルを処理∼" # バックコート内の実行結果を変数 file2 に代入 file2=‘ls -1 $1/$data‘ echo "" echo "192.168.100.9_csv.logを処理する" # grepコマンドを用いて日付を取り出し、変数 date に代入する。 date=‘grep -v ’[a-z]’ $1/$data/192.168.100.9_csv.log‘ echo "$date" > 192.168.100.9_csv.log

# 192.168.100.9_cvs.logを引数として実行ファイル"convert"を実行する。 ‘./convert 192.168.100.9_csv.log‘ # $dataの名前を変更する。 ‘mv 192.168.100.9_per10csv.log ./$data/‘ echo "192.168.100.11_csv.logを処理する" # grepコマンドを用いて日付を取り出し、変数 date に代入する。 date=‘grep -v ’[a-z]’ $1/$data/192.168.100.11_csv.log‘ echo "$date" > 192.168.100.11_csv.log

# 192.168.100.9_cvs.logを引数として実行ファイル"convert1"を実行する。 ‘./convert1 192.168.100.11_csv.log‘ # $dataの名前を変更する ‘mv 192.168.100.11_per10csv.log ./$data/‘ echo "" echo "" done • シェルから渡された受信強度のデータを 10 秒毎に変換する C 言語ファイル (convert.c, convert1.c) は次のように なる。このとき、convert.c が 18GHz の受信強度、convert1.c が 26GHz の受信強度のデータを処理する。

(3)

• convert.c

#include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000];/*データを入れる配列*/ int i = 1;/*カウント用変数*/ int th,tm,ts,le,po,be1,be2;/*ステータスの変数*/ int x,y;/*秒数カウント用変数*/ int c = 1;/*平均演算用カウント変数*/ int sle = 0, spo = 0, sbe = 0;/*合計*/ FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break;

sscanf(s, "%d:%d:%d,%d,%d,%d\n", &th, &tm, &ts, &le, &po, &be1);

if(i == 1)/*一回目*/ { datea = fopen("192.168.100.9_csv10.log","a"); fprintf(datea,"%d\n",(le+256)/2-121); fclose(datea); x = ts % 10; sle = sle + le; spo = spo + po;

c++;

}

else if(i == 2)/*二回目*/ {

y = ts % 10; sle = sle + le; spo = spo + po; c++;

}

else/*三回目以降*/ {

(4)

x = y; y = ts % 10; if(x > y) { sle = sle / (c-1); spo = spo / (c-1); if(y == 1) ts = ts-1; if(y == 2) ts = ts-2; if(sle >= 0){ datea = fopen("192.168.100.9_csv10.log","a"); fprintf(datea,"%d\n",sle/2-121); fclose(datea); } if(sle < 0){ datea = fopen("192.168.100.9_csv10.log","a"); fprintf(datea,"%d\n",(sle+256)/2-121); fclose(datea); } sle = 0; spo = 0; c = 0;

sle = sle + le; spo = spo + po; c++;

} else

{

sle = sle + le; spo = spo + po;

} c++; } i++; } return(0); } • convert1.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1];

(5)

char s[1000];/*データを入れる配列*/ int i = 1;/*カウント用変数*/

int th,tm,ts,le,po,be1,be2;/*ステータスの変数*/ int x,y;/*秒数カウント用変数*/

int c = 1;/*平均演算用カウント変数*/ int sle = 0, spo = 0, sbe = 0;/*合計*/ FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break;

sscanf(s, "%d:%d:%d,%d,%d,%d,%d\n", &th, &tm, &ts, &le, &po, &be1, &be2);

if(i == 1)/*一回目*/ { datea = fopen("192.168.100.11_csv10.log","a"); fprintf(datea,"%d\n",le); fclose(datea); x = ts % 10; sle = sle + le; spo = spo + po; c++;

}

else if(i == 2)/*二回目*/ {

y = ts % 10; sle = sle + le; spo = spo + po; c++; } else/*三回目以降*/ { x = y; y = ts % 10; if(x > y) { sle = sle / (c-1); spo = spo / (c-1); if(y == 1) ts = ts-1; if(y == 2) ts = ts-2; datea = fopen("192.168.100.11_csv10.log","a");

(6)

fprintf(datea,"%d\n",sle); fclose(datea);

sle = 0; spo = 0; c = 0;

sle = sle + le; spo = spo + po; c++;

} else

{

sle = sle + le; spo = spo + po; } c++; } i++; } return(0); }

1.2

解説

• convert.sh を実行すると、convert.c と convert1.c の実行ファイルが呼び出され (ここでは convert, convert1)、1 つずつファイルを処理していく。この処理をすると、2秒を10秒にしたファイルができる。この2つの C 言語 ファイルの違いは、18GHz と 26GHz のステータスを代入するために使う変数 be が1つであるか、2つであるか だけである。処理の内容としては、同じことをしている。C 言語の処理の内容は、fgets 関数でシェルから渡され たファイルを上から一行ずつ読み、それぞれのステータスを変数に毎回代入していく。ステータスの1つである変 数 le には 1803RXLEVEL の値が代入される。その値を毎回変数 sle に足していき、10秒間分の行数で割ること によって平均が出る。その平均の値をファイルに毎回出力すれば10秒間のデータファイルができる。

2

課題

(

2週目

)

• 1週目で作成した降雨強度、受信強度 (18GHz,26GHz) を用いて、累積時間分布のグラフを作成せよ。

2.1

降雨強度のデータを1分毎から1時間毎に作りかえる。

• 1分毎から1時間毎に作りかえるときもシェル (h conv.sh) を用いて降雨強度のデータを1つずつ C 言語ファイル (h.conv.c)に渡していき処理を実行する。このときのシェルの引数にも、mesure-ryukyu へのパスを入力する。 • h conv.sh #!/bin/sh # バックコート内の実行結果を変数 file1 に代入 file1=‘ls -1 $1‘

(7)

echo "$file1"

# file1の内容を上から順に変数 data1 に代入 for data1 in $file1

do

echo "---$data1---"

# バックコート内の実行結果を変数 file2 に代入 file2=‘ls -1 $1/$data‘

for data2 in $file2 do

if [ $data2 != ‘basename $data2 _rain.csv‘ ] ; then echo "$1"

echo "$data1" echo "$data2"

echo "${1}/${data1}/${data2}"

# grepコマンドを用いて日付を取り出し、変数 date に代入する。 date=‘grep -v ’[a-z]’ $1/$data1/$data2‘

echo "$date" > rainof${data1} # 実行ファイル"h_conv"を実行する。 ‘./h_conv "rainof${data1}"‘ fi done done • h conv.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000];/*データを入れる配列*/ int i = 0;/*カウント用変数*/ int ca,mo,da,th,tm,rs;/*ステータスの変数*/ int c = 1;/*平均演算用カウント変数*/ int srs = 0;/*合計*/ FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date);

(8)

if(feof(date)) break; sscanf(s, "%d/%d/%d %d:%d,%d\n",&ca,&mo,&da,&th,&tm,&rs); /*ここから処理*/ if(c == 1){ /*一行消去*/ c++; i--; } else { if(i < 59) { srs = srs + rs; } else if(i == 59) { srs = srs + rs; datea = fopen("rain","a"); fprintf(datea,"%d/%02d/%02d %02d:%02d,%d\n",ca,mo,da,th+1,tm-59,srs); fclose(datea); srs = 0; i = -1; } } i++; } return(0); }

2.2

解説

• h conv.sh を実行すると、h conv.c の実行ファイル h conv が呼び出され、1つずつファイルを処理していく。この 処理をすると、1分毎のデータから1時間毎のデータにしたファイル rain ができる。C 言語ファイルの h conv.c は、sscanf 関数でシェルで渡された降雨強度のステータスを読み込み、60行ごとを足してファイルに出力する。

2.3

降雨強度の頻度分布を作る

• h conv.c で作ったファイル rain を用いて頻度分布のファイルを作る。rain を C 言語ファイル frequency r.c の引数 として、実行する。frequency r.c は、whie 文の入れ子を使用し、5つ刻みで値をカウントしていく。

• frequency r.c

(9)

int main(int argc, char *argv[]){ char *p; p = argv[1]; char s[1000]; int b[1500]; int c[1500]; int a = 0; int i = 0; int g = 0; int ca,mo,da,th,tm,rs; int srs = 0; FILE *date,*datea; while(1) { date = fopen(p,"r"); if(i == 1500) break; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d/%d/%d %d:%d,%d\n",&ca,&mo,&da,&th,&tm,&rs); if( i*5 <= rs && rs <= i*5+5 )

{ a++; g++; } } b[i]=i*5+10; c[i]=a; datea = fopen("r_fre_distribute","a"); fprintf(datea,"%d %d\n",i*5+10,a); printf("%d %d\n",i*5+10,a); fclose(datea); i++; a=0; fclose(date); } i=1500; while(1) { if(i < 0) break; printf("%d %d\n",b[i],c[i]);

(10)

datea = fopen("r_fre_distribute_rev","a"); fprintf(datea,"%d %d\n",b[i],c[i]); fclose(datea); i--; printf("%d\n",g); } return(0); } • この処理でできた頻度分布ファイル r fre distribute をグラフにすると次のようになる。 図1:頻度分布ファイル r fre distribute

2.4

頻度分布から累積分布を作る

• frequency r.c で作ったファイル r fre distribute rev を用いて累積分布のファイルを作る。r fre distribute rev を C 言語ファイル r accumulate.c の引数として実行する。

• frequency r.c

#include <stdio.h>

(11)

char *p; p = argv[1]; char s[1000]; int i = 0; int y = 0; int xk = 0.0; double sr = 0.0; double ss = 0.0; double b = 0.0; FILE *date,*datea; date = fopen(p,"r"); while(1) { if(i == 1500) break; fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d %d\n",&y,&xk); printf("%d\n",xk); sr = (xk / 2257.0)*100; ss = ss + sr; printf("%f\n",ss); datea = fopen("rrain","a"); fprintf(datea,"%f %d\n",ss,y); fclose(datea); i++; } return(0); } • この処理でできた累積分布ファイル r accu distribute をグラフにすると次のようになる。

(12)

図2:累積分布ファイル r accu distribute

• 以上のようにして、受信強度 (18GHz,26GHz) の累積分布も作る。

2.5

10

秒毎受信強度 (18GHz,26GHz) を1分毎受信強度に作りかえる

• 降雨強度のときのように、シェル (m conv.sh) と C 言語ファイル (m conv.c , m conv1) を用いて10秒毎のデー タを1分毎にする。これらのソースは次のようになる。 • m conv.sh #!/bin/sh # バックコート内の実行結果を変数 file に代入 file=‘ls -1 $1‘ # file1の内容を上から順に変数 data に代入 for data in $file

do

echo "∼ディレクトリ「$data」にあるファイルを処理∼" echo ""

echo "192.168.100.9_per10csv.logを処理する" date=‘cat $1/$data/192.168.100.9_per10csv.log‘ echo "$date" > date18

(13)

‘mv conv18 $1/$data‘

echo "192.168.100.11_per10csv.logを処理する" date=‘cat $1/$data/192.168.100.11_csv10.log‘ echo "$date" > date26

‘./m_conv1 date26‘ ‘mv conv26 $1/$data‘ echo "" echo "" done • m conv.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1];

char s[1000]; int i = 1;

int th,tm,ts,le,po,be1,be2; int sle = 0, spo = 0, sbe = 0; int c = 1; int srs = 0; FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le); if(i < 6) { sle = sle + le; }

else if(i == 6) {

sle = sle + le;

datea = fopen("conv18","a"); fprintf(datea,"%d\n",sle/6); fclose(datea);

(14)

sle = 0; i = 0; } i++; } return(0); } • m conv1.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1];

char s[1000]; int i = 1;

int th,tm,ts,le,po,be1,be2; int sle = 0, spo = 0, sbe = 0; int c = 1; int srs = 0; FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le); if(i < 6) { sle = sle + le; }

else if(i == 6) {

sle = sle + le;

datea = fopen("conv26","a"); fprintf(datea,"%d\n",sle/6); fclose(datea); sle = 0; i = 0; }

(15)

i++; }

return(0); }

2.6

1分毎受信強度 (18GHz,26GHz) を1時間毎受信強度に作りかえる

• これも降雨強度のときのように、シェル (h conv1826.sh) と C 言語ファイル (h conv18.c , h conv26) を用いて1分 毎秒毎のデータを1時間毎にする。これらのソースは次のようになる。 • h conv1826.sh #!/bin/sh # バックコート内の実行結果を変数 file に代入 file=‘ls -1 $1‘ # fileの内容を上から順に変数 data に代入 for data in $file

do

echo "∼ディレクトリ「$data」にあるファイルを処理∼" echo "192.168.100.9_per10csv.logを処理する" date=‘cat $1/$data/conv18‘

echo "$date" > h_date18 ‘./h_conv18 h_date18‘

echo "192.168.100.11_per10csv.logを処理する" date=‘cat $1/$data/conv26‘

echo "$date" > h_date26 ‘./h_conv26 h_date26‘ echo "" echo "" done • h conv18.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1];

(16)

char s[1000]; int i = 0; int le; int sle = 0; int c = 1; int srs = 0; FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le); if(i < 59) {

sle = sle + le; }

else if(i == 59) {

sle = sle + le;

datea = fopen("hour18","a"); fprintf(datea,"%d\n",sle/60); fclose(datea); sle = 0; i = 0; } i++; } return(0); } • h conv26.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000]; int i = 0; int le; int sle = 0;

(17)

int c = 1; int srs = 0; FILE *date,*datea; date = fopen(p,"r"); if(date == NULL) return; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le); if(i < 59) { sle = sle + le; }

else if(i == 59) {

sle = sle + le;

datea = fopen("hour26","a"); fprintf(datea,"%d\n",sle/60); fclose(datea); sle = 0; i = 0; } i++; } return(0); }

2.7

受信強度の頻度分布を作る。

• これも降雨強度のときのように、C 言語ファイル (frequency 18.c , frequency 26.c) を用いて1時間毎のデータを もとに頻度分布を作る。これらのソースは次のようになる。 • frequency 18.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1];

(18)

int b[1500]; int c[1500]; int a = 0; int i = 0; int g = 0; int le; int srs = 0; FILE *date,*datea; while(1) { date = fopen(p,"r"); if(i == 70) break; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le);

if( -i*2-2 <= le && le <= -i*2 ) { a++; g++; } } b[i]=i*2+2; c[i]=a; datea = fopen("e18_fre_distribute","a"); fprintf(datea,"%d %d\n",-i*2-2,a); printf("%d %d\n",-i*2-2,a); fclose(datea); i++; a=0; fclose(date); } i=1500; while(1) { if(i < 0) break; printf("%d %d\n",b[i],c[i]); datea = fopen("e18_fre_distribute_rev","a"); fprintf(datea,"%d %d\n",b[i],c[i]); fclose(datea); i--; printf("%d\n",g); }

(19)

return(0); }

• frequency 26.c

#include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000]; int b[1500]; int c[1500]; int a = 0; int i = 0; int g = 0; int le; int srs = 0; FILE *date,*datea; while(1) { date = fopen(p,"r"); if(i == 70) break; while(1) { fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d\n",&le);

if( -i*2-2 <= le && le <= -i*2 ) { a++; g++; } } b[i]=i*2+2; c[i]=a; datea = fopen("e26_fre_distribute","a"); fprintf(datea,"%d %d\n",-i*2,a); printf("%d %d\n",-i*2,a); fclose(datea);

(20)

i++; a=0; fclose(date); } i=1500; while(1) { if(i < 0) break; printf("%d %d\n",b[i],c[i]); datea = fopen("e26_fre_distribute_rev","a"); fprintf(datea,"%d %d\n",b[i],c[i]); fclose(datea); i--; printf("%d\n",g); } return(0); }

• この処理でできた頻度分布ファイル e18 fre distribute ,e26 fre distribute をグラフにすると次のようになる。

(21)

図4:頻度分布ファイル e26 fre distribute

2.8

受信強度の頻度分布から累積分布を作る

• 頻度分布ファイルである e18 fre distribute, e26 fre distribute をもとに C 言語ファイル (e18 accumulate.c , e26 accumulate.c) を用いて累積分布を作る。これらのソースは次のようになる。

• e18 accumulate.c

#include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000]; int i = 0; int y = 0; int xk = 0.0; double sr = 0.0; double ss = 0.0; double b = 0.0; FILE *date,*datea; date = fopen(p,"r");

(22)

while(1) { if(i == 140) break; fgets(s, 1000, date); if(feof(date)) break; sscanf(s, "%d %d\n",&y,&xk); printf("%d\n",xk); sr = (xk / 3297.0)*100; ss = ss + sr; printf("%f\n",ss); datea = fopen("e18_accu_distribute","a"); fprintf(datea,"%f %d\n",ss,y); fclose(datea); i++; } return(0); } • e26 accumulate.c #include <stdio.h>

int main(int argc, char *argv[]){

char *p; p = argv[1]; char s[1000]; int i = 0; int y = 0; int xk = 0.0; double sr = 0.0; double ss = 0.0; double b = 0.0; FILE *date,*datea; date = fopen(p,"r"); while(1) { if(i == 140) break; fgets(s, 1000, date); if(feof(date))

(23)

break; sscanf(s, "%d %d\n",&y,&xk); printf("%d\n",xk); sr = (xk / 3285.0)*100; ss = ss + sr; printf("%f\n",ss); datea = fopen("e26_accu_distribute","a"); fprintf(datea,"%f %d\n",ss,y); fclose(datea); i++; } return(0); }

• この処理でできた累積分布ファイル e18 accu distribute ,e26 accu distribute をグラフにすると次のようになる。

(24)

図6:累積分布ファイル e26 accu distribute

3

感想

・今回の実験の課題は、とても難しくて期限も過ぎて最終期限での提出になってしまいました。実験の内容も理解でき ていないので理解できている友達を見つけて教えてもらいしっかり理解できるようにしたいと思います。

参照

関連したドキュメント

Let Si be the 2 -category in the sense of [11, XII.3] whose objects are admissible sites C (Denition 3.6), whose 1 -morphisms are continuous functors C → D preserving nite limits

Rhoudaf; Existence results for Strongly nonlinear degenerated parabolic equations via strong convergence of truncations with L 1 data..

On the other hand, conjecture C for a smooth projective variety over a finite field allows to compute the Kato homology of X s in (1-3), at least in the case of semi- stable

Let C be a co-accessible category with weak limits, then the objects of the free 1 -exact completion of C are exactly the weakly representable functors from C

(1) 送信機本体 ZS-630P 1)

¤ Teorema 2.11 Todo autovalor do problema de Sturm-Liouville tem multiplici- dade 1, isto ´e, o espa¸co vetorial das autofun¸c˜oes correspondentes tem dimens˜ao 1..

Then, since S 3 does not contain a punctured lens space with non-trivial fundamental group, we see that A 1 is boundary parallel in V 2 by Lemma C-3 (see the proof of Claim 1 in Case

We also show that the Euler class of C ∞ diffeomorphisms of the plane is an unbounded class, and that any closed surface group of genus &gt; 1 admits a C ∞ action with arbitrary