コヒーレント復調後の受信機にはローパスフィルターが必要ですね。しかし、変調にも問題があります。あなたの例では、シンボルレートRs
は角搬送波周波数よりも低くw_c
、受信機でスペクトルの重複を引き起こす可能性があります。その結果、情報信号の再構成は不可能になる。さらに、あなたの例ではfc * T = 2
。これは、正弦関数の引数が 2pi の整数倍であるため、常にゼロであることを意味します。
必要なのは、帯域幅 の送信機にあるインパルス シェーパー (ローパス フィルターとして実装可能)w_g >= R/2
です。いわゆるナイキストローパスである必要があります。キャリア周波数は を満たす必要がありw_c > w_g
ます。
送信信号を再構築できるように、インパルス整形、変調、復調、フィルタリング、およびサンプリングを行うMATLABスクリプトを作成しました。
まず、パラメータを定義し、ランダム ビットを作成して、既に行ったようにマッピングを行います。インパルス整形には非常に単純なインパルス応答、つまり矩形インパルスが使用されます。現実の世界では、ここでデジタルからアナログ ドメインに移行しますが、これはコンピューター モデルであるため、アナログ信号をサンプリング周波数 の離散信号で表しますf_s
。L
各サンプル時間を繰り返すだけなので、インパルス シェーパーは単純です。
M = 16; % QAM order
fs = 16000; % Sampling frequency in Hz
Ts = 1/fs; % Sampling interval in s
fc = 1000; % Carrier frequency in Hz (must be < fs/2 and > fg)
Rs = 100; % Symbol rate
Ns = 20; % Number of symbols
x = randint(Ns, 1, M);
y = modulate(modem.qammod(M), x);
L = fs / Rs; % Oversampling factor
% Impulse shaping
y_a = reshape(repmat(y', L, 1), 1, length(y)*L);
さて変調。上記の条件を満たすキャリア周波数を使用しました。これは信号帯域幅よりも高く、使用したサンプリング周波数で表すことができます。
%% Modulation
I = real(y_a);
Q = imag(y_a);
t = 0 : Ts : (length(y_a) - 1) * Ts;
C1 = I .* sin(2*pi * fc * t);
C2 = Q .* cos(2*pi * fc * t);
s = C1 + C2;
復調は簡単です...
%% Demodulation
r_I = s .* sin(2*pi * fc * t);
r_Q = s .* -cos(2*pi * fc * t);
復調後にスペクトル支流を除去するには、2f_c
ローパス フィルターが必要です。MATLAB FDAToolを使用して、フィルターと次のコードの一部を作成しました。覚えておいてください: 信号帯域幅はRs/2
で、不要な支流は から始まります2*fc - Rs/2
。Fpass
とはこうしてFstop
見つけられる。(これらの要件を少し緩和すると役立つ場合があります。)
%% Filter
% Design filter with least-squares method
N = 50; % Order
Fpass = Rs/2; % Passband Frequency
Fstop = 2*fc - Rs/2; % Stopband Frequency
Wpass = 1; % Passband Weight
Wstop = 1; % Stopband Weight
% Calculate the coefficients using the FIRLS function.
b = firls(N, [0 Fpass Fstop fs/2]/(fs/2), [1 1 0 0], [Wpass Wstop]);
% Filtering
w_I = filter(b, 1, r_I);
w_Q = filter(b, 1, r_Q);
フィルタリング後、受信信号をサンプリングする必要があります。ここでは単なるダウンサンプリングです。L/2
フィルタの遷移を避けるために、位相オフセットを使用しました。
%% Sampling
u_I = downsample(w_I, L, L/2);
u_Q = downsample(w_Q, L, L/2);
最後に、コンスタレーション ダイアグラムをプロットして、適切な 16-QAM コンスタレーションを取得します。
plot(u_I, u_Q, '.');
完全なコードはここにあります。
あなたの質問は、DSPと MATLAB プログラミングの両方の多くのトピックに触れました。どこも詳しく説明できませんでした。16-QAM の変調と復調について具体的な質問がある場合は、おそらく Stack Exchange サイトのSignal Processingを参照してください。