SSブログ

Scilab で SSB 信号を作る [Simulation]

 Scilab で SSB 信号を作ってみました。 変調方式は PSN です。 時間は離散時間ですが、振幅の量子化はしていません。 int16() 関数とかを使えば良いのですが、それは次の機会にトライしてみます。 (subplot()関数を使ってグラフの表示内容を増やしました)

〔信号波形〕
シミュレーションした条件は
① AF 信号: 1000Hz + 1700Hz
② キャリヤ: 64kHz
③ サンプリング: 512kHz
で、得られた SSB 信号はこれです。
Two Tone SSB subplot.jpg
上から、Two Tone 信号、キャリヤ、I信号、Q信号、SSB 出力です。
〔プログラム〕
π/2 のフェーズシフターにはヒルベルト変換をそのまま使ってしまっています。 本来は hilb() 関数でヒルベルト・フィルタの係数を計算し、それぞれの信号をヒルベルト・フィルタに通して計算した方が実際に近いです。 まだ subplot() 関数がうまく使えていないので、出力の波形は一つだけです。 ← 使ってみました。

// PSN SSB simulation with Two Tone AF signal
// AF signal
// 1000Hz + 1700Hz
// Carrier siganl
// 64kHz
// Sampling frequency
// 512kHz
// simulation time
// T sec

afreq1 = 1000;
afreq2 = 1700;
cfreq = 64000;
sf = 512000;
taps = 511;
a1 = 0.1; // amplitude
a2 = 0.1;
ac = 0.8;

T = 1/sf; // calculate sampling period

while(1)
printf('\n');
st = input('input simulation time [Sec] (zero is exit) ??');
if st == [0] then break end;
// calculate the number of sampling points
sp = st * sf;
k = 1:sp;

// Two Tone AF signal
af1 = a1*sin(2*%pi*afreq1*k*T);
af2 = a2*sin(2*%pi*afreq2*k*T);
af = af1 + af2;
subplot(5,1,1);
plot(af, 'r');

// carrier signal
cf = ac*sin(2*%pi*cfreq*k*T);
subplot(5,1,2);
plot(cf, 'g');

// Hilbert Filter
hf = hilb(taps);

// calculate I
I = af .* cf;
subplot(5,1,3);
plot(I, 'c');

// calculate Q
afi = imag( hilbert(af) ); // pi/2 shifter
cfi = imag( hilbert(cf) ); // pi/2 shifter
Q = afi .* cfi;
subplot(5,1,4);
plot(Q, 'm');

y = (I + Q)/2;
subplot(5,1,5);
plot( y, 'b' );
yfft = fft( y );
// plot( yfft );
end

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0