今回は、これを搬送波に載せてデジタル伝送をやってみます。
搬送波にデジタル信号を重畳させる方法はいくつか種類があります。
ここでは、一番基本な BPSK変調を使ってみることにします。
BPSK変調の詳細はこちらを参照して下さい。
http://ja.wikipedia.org/wiki/%E4%BD%8D%E7%9B%B8%E5%81%8F%E7%A7%BB%E5%A4%89%E8%AA%BF
(Wiki:位相偏移変調)
簡単に説明しておくと、元のデジタルデータが '0' の場合は、搬送波を正位相、'1'
の場合は逆位相にして送ると云うことです。
え、万が一受信側で '1' を先に検出したら '0' と '1' が逆転するのではって?
そういうツッコミはご遠慮願います。冗談です。グッドクェスチョンです。
前々回少し触れたように、それをデジタル伝送では考慮しなくてはいけません。
それらの解決策についてはゆるゆる触れていきます。
さて、搬送波の式を y=sin(ft) とします。f は周波数です。
それをデジタルデータで変調を掛けるわけですから、'0' の時は y=sin(ft)、'1' の時
は y=sin(ft+pi) と式を立てていけば良いわけです。
そこで、後々デジタル信号を符号化してから変調を掛けるのと整合性を取るために、元データを8倍オーバーサンプリングします。
別にたいしたことをしません。'0' → '00000000'、'1' → '11111111' とするだけです。
前々回、変数 data に、64bit のデータ列を作っていますので、これを利用します。コ
ードにはデータ列発生も入れておきました。
このオーバーサンプリングされたデータを 1bit 単位で、位相変調を掛けていきますが、ここでは 1bit 辺り 4周期と設定して進めます。多すぎるとデータ量が膨大になりますので注意して下さい。少ないと復調処理が難しくなります。
また、1周期の搬送波に対して 16 ポイントの解像度で処理をすることにします。
コードは以下のようになります。
//ランダムデジタルデータの発生
//初期値の設定
rand('seed',0)
//一様分布の乱数発生。数値範囲 0-1.0
randomdata=(rand(1,64,'uniform'))
//'0','1' 符号化するために、0.5を足して整数部分のみを抽出
data=int(0.5+randomdata)
//オーバサンプリングする
for i=1:64
j=(i-1)*8
if data(1,i)==0 then data8(1,j+1:j+8)=[0 0 00 0 0 0 0];
else data8(1,j+1:j+8)=[1 1 1 1 1 1 1 1];
end
end
//BPSK 変調を掛ける。
datasignal=[]
//データサイズを取得
datasize=size(data8,'c')
//1bit辺りの周期数を設定
f=4;
//1周期16サンプル
Fs=1/16/f
//データ数と刻みを設定
n=0:Fs:datasize-Fs
//元データ 1bit が 8 x 4 x 16 される。
for i=1:datasize
for j=1:16*f
if data8(1,i)==0 then datasignal(1,(i-1)*16*f+j)=0;
else datasignal(1,(i-1)*16*f+j)=1;
end
end
end
// '0'ならば位相をずらさない、'1'ならば位相
phiy=datasignal*%pi
bpskmodu=sin(f*2*%pi*n+phiy)
//表示
scf(1);
clf(1)
subplot(2,1,1)
plot(n,datasignal)
subplot(2,1,2)
plot(n,bpskmodu)

変化点を拡大すると、

ということで元データを BPSK変調することが出来ました。
なんか拍子抜けというか、だから何だ、といいたくなるかも知れませんが、まずは流れを示すためにやってみました。
なお、スクリプトは場所により作成した時期が異なっているものを組み合わせたので、非常にスジの悪いところがあるかと思います。ご容赦願います。
次回は、これを復調してみます。