キイロイトリらぼ

ぬいぐるみと一緒に生きていきます

C言語でBPSK変調のグラフを作成する #1

概要

 ディジタル無線通信技術をプログラミングとともに学びたくなった.

BPSKに始まり,OFDMといった通信技術を手を動かすことで身につけ,可視光通信バイスに応用したい.ディジタル無線通信技術といえば,matlabであるが,matlab環境がないこと,最終的にマイコンで実装をしたいことから,C言語にした.さらには,調べながらでは,挫折しそうなので,体系的に学ぼうと,『C言語によるディジタル無線通信技術』を参考にすることにした.

この本のとおりにプログラムを書けばいいのだが,このままでは計算結果だけが出力されて,信号処理の中身がわかりにくい.そこで,グラフを挟んで,自分なりに少しずつ理解できるようにしたい.

 

C言語によるディジタル無線通信技術

C言語によるディジタル無線通信技術

 

 

結論

 配列を用いて作成したBPSK変調プログラムの送信データ,受信データをグラフで出力できた.

実行したこと

実行環境

【ホストPC】

手順 

BPSKのBERを計算機シミュレーションで求めるプログラムを作成する.C言語で作成するには,先の本では3つの方法があるという.

  1. 配列によって信号を保存する
  2. 構造体を用いて新しくデータの方を定義するとともに,信号をポインタで表現する構成
  3. 2の変数をさらに構造化した構成

まずは,1を写経する.

これは,まず,データをランダムに発生させて,BPSK変調を行う.つぎに,通信路でAWGNが付加され,受信機において復調されたあと,得られたデータを正解のデータと照合することでBERを計算している.

このプログラムでは,設定したSNRによってBERがテキストで出力されるが,作成したデータをグラフで出力したくなったので,gnuplotで実現している.

 

プログラム

作成したプログラムはこちら.

配列によって信号を保存するBPSK変復調シミュレーションにグラフを追加

 

C言語なので下記のようにしてプログラムを実行するとグラフが出力できる

$ gcc list4_1.c

f:id:gijin94yobu:20200705233554p:plain

送信データ:紫,受信データ:水色,データ数100,SNR=10

あとがき

C言語でグラフを出力するのに結構苦労した.

今思えばなんてことはないが,gnuplotのexeファイルのインストールの設定がうまく行っていなかっただけであった*1

おそらく,環境変数のあたりのチェックを気にしていなかったのだろう.

もともと,ディジタル無線通信技術のmatlab版を持っていたので,scilabpythonでやろうとしたが,仕事でC言語を使っていることや,pythonで置き換えようとするモチベーションがなかったので,C言語版の本を用意することにした.

 

MATLABによるディジタル無線通信技術

MATLABによるディジタル無線通信技術

  • 作者:神谷 幸宏
  • 発売日: 2008/11/01
  • メディア: 単行本
 

 

C言語の勉強の本はたくさんあるが,この例のように,長めのプログラムを書くことはあんまりないので,今一度C言語の勉強も兼ねて頑張ることにする.

しかし,グラフを書くのが結構面倒くさい.matlabpythonであれば,一行ずつ確認できたりするのだが.

 

今回は,肝心の勉強は後回しに,プログラムの作成を目標にしたので,あんまり内容はまだ見れていない.

このグラフのプログラムをもっと応用して,送信データ,変調データ,BER曲線まで頑張って出したい.

参考

gnuplotのインストールやグラフの出力に参考にした.