Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

3 チャネル ウェーブレット トランスマルチプレクサー

この例では、ウェーブレット トランスマルチプレクサー (WTM) を使用して、3 つの独立な信号を合成して単一の通信リンクで送信し、再構成する方法を示します。また、離散ウェーブレット変換 (DWT) の完全再構成プロパティについても説明します。

はじめに

この WTM は 1 つのリンク上で送信される 3 つのソース信号を組み合わせた後、チャネルの受信先で 3 つの信号を分離します。この例では 3 チャネルのトランスマルチプレクサーについて説明しますが、この方法は任意の数のチャネルに拡張できます。

WTM の操作は、いくつかの点で周波数領域マルチプレクサー (FDM) に似ています。FDM では、ベースバンド入力信号をフィルター処理し、隣接する周波数帯域に変調してから加算して、1 つのリンク上で送信します。受信側では、送信された信号をフィルター処理して隣接した周波数チャネルに分離してから、信号をベースバンドに復調します。また、フィルターは、フィルターの通過帯域から阻止帯域への明確な遷移を示すため、隣接する信号を大きく減衰しなければなりません。この手順に従うと、1 つの周波数帯域から次の周波数帯域へのクロストーク (信号漏れ) が制限されます。さらに多くの場合、FDM では、FDM フィルターの要件を緩和するために、3 つの変調周波数帯域間に保護帯域と呼ばれる未使用の周波数帯域を導入します。

WTM の場合、合成ウェーブレット フィルターおよび解析ウェーブレット フィルターで行われるフィルター処理は FDM のフィルター処理手順に似ており、合成段階の内挿は周波数変調と同じです。周波数領域という観点から見ると、ウェーブレット フィルターは通過帯域から阻止帯域への遷移が遅く、応答も大きく歪むため、FDM の実装に必要なフィルターと比較するとスペクトル フィルターとして劣ります。WTM が特別である理由は、解析フィルターと合成フィルターを一緒に使用することで、フィルターの歪みと信号のエイリアシングが相殺されるため、入力信号を完全に再構成し、多重化された入力を完全に抽出できることです。保護帯域が不要になり、理想的なスペクトル効率が得られます。チャネル フィルターを実装した場合の実際的な制限は、帯域外の漏れや歪みが生じることです。従来の FDM のアプローチでは、同じ通信システム内の各チャネルに独自のフィルターが必要であり、隣接するチャネルからのクロストークの影響を受けやすい状況でした。WTM を使用すると、通信チャネル全体で必要なバンドパス フィルターは 1 つで、チャネル間の干渉も排除されます。

ノイズの多いリンクでは入力信号の再構成が不完全になり、チャネル ノイズや復元された信号のその他の障害による影響は、FDM と WTM の間で異なることがあります。これはノイズ源をデータ リンクに追加するなどしてモデル化することができます。

初期化

処理ループで使用する前に System object を作成して初期化することは、最適なパフォーマンスを得るために不可欠です。チャネル ノイズの標準偏差など、この例で使用される変数を初期化します。

load dspwlets;    % load filter coefficients and input signal
NumTimes = 14;    % for-loop iterations
stdnoise = .2^.5; % standard deviation of channel noise

チャネル 1 信号を生成する正弦波の System object を作成します。

sine = dsp.SineWave('Frequency',       fs/68, ...
                     'SampleRate',      fs, ...
                     'SamplesPerFrame', fs*2);

チャネル ノイズの乱数発生器ストリームを作成します。

strN = RandStream.create('mt19937ar','seed',1);

チャネル 2 信号を生成するチャープ System object を作成します。

chirpSignal = dsp.Chirp( ...
    'Type', 'Swept cosine', ...
    'SweepDirection', 'Bidirectional', ...
    'InitialFrequency', fs/5000, ...
    'TargetFrequency', fs/50, ...
    'TargetTime', 1000, ...
    'SweepTime', 1000, ...
    'SampleRate', 1/ts, ...
    'SamplesPerFrame', fs);

信号のサブバンドを分解するために、2 進解析フィルター バンクの System object を作成し、設定します。

dyadicAnalysis = dsp.DyadicAnalysisFilterBank( ...
    'CustomLowpassFilter', lod, ...
    'CustomHighpassFilter', hid, ...
    'NumLevels', 2 );

ウェーブレット成分によって生じたシステム遅延を補正する遅延を各チャネルに挿入する 3 つの System object を作成します。

delay1 = dsp.Delay(4);
delay2 = dsp.Delay(6);
delay3 = dsp.Delay(6);

信号の別のサブバンドから信号を再構成する 2 進合成フィルター バンクの System object を作成し、設定します。

dyadicSynthesis = dsp.DyadicSynthesisFilterBank( ...
    'CustomLowpassFilter',[0 lor], ...
    'CustomHighpassFilter',[0 hir], ...
    'NumLevels', 2 );

時間範囲 System object を作成して、元の再構成された信号と誤差信号をプロットします。

scope1 = timescope('Name', 'Three Channel WTM: Original (delayed)', ...
  'SampleRate', fs, ...
  'TimeSpan', 30, ...
  'YLimits', [-2 2], ...
  'ShowLegend', true, ...
  'TimeSpanOverrunAction', 'Scroll');
pos = scope1.Position;
pos(3:4) = 0.9*pos(3:4);
scope1.Position = [pos(1)-1.1*pos(3) pos(2:4)];

scope2 = timescope('Name', 'Three Channel WTM: Reconstructed', ...
  'Position', pos, ...
  'SampleRate', fs, ...
  'TimeSpan', 30, ...
  'YLimits', [-2 2], ...
  'ShowLegend', true, ...
  'TimeSpanOverrunAction', 'Scroll');

scope3 = timescope('Name', 'Three Channel WTM: Error', ...
  'Position', [pos(1)+1.1*pos(3) pos(2:4)], ...
  'SampleRate', fs, ...
  'TimeSpan', 30, ...
  'YLimits', [-5e-11 5e-11], ...
  'ShowLegend', true, ...
  'TimeSpanOverrunAction', 'Scroll');

Tx_Ch3 = [ones(35,1);zeros(45,1)];   % Generate the Channel 3 signal

ストリーム処理ループ

3 チャネル トランスマルチプレクサーをシミュレートする処理ループを作成します。このループは上記でインスタンス化した System object を使用します。

for ii = 1:NumTimes
    Tx_Ch1 = sine() + ...
        stdnoise*randn(strN,fs*2,1);      % Generate Channel 1 signal
    Tx_Ch1_delay = delay1(Tx_Ch1);

    Tx_Ch2 = chirpSignal();               % Generate Channel 2 signal
    Tx_Ch2_delay = delay2(Tx_Ch2);

    Tx_Ch3_delay = delay3(Tx_Ch3);        % Delayed Channel 3 signal

    % Concatenate the three channel signals
    Tx = [Tx_Ch1; Tx_Ch2; Tx_Ch3];
    
    % Synthesis stage equivalent to frequency modulation.
    y = dyadicSynthesis(Tx);
    
    % Analysis stage
    Rx = dyadicAnalysis(y);
    
    % Separate out the three channels
    Rx_Ch1 = Rx(1:160);
    Rx_Ch2 = Rx(161:240);
    Rx_Ch3 = Rx(241:320);

    % Calculate the error between TX and RX signals
    err_Ch1 = Tx_Ch1_delay - Rx_Ch1;
    err_Ch2 = Tx_Ch2_delay - Rx_Ch2;
    err_Ch3 = Tx_Ch3_delay - Rx_Ch3;

    % Plot the results. 
    scope1(Tx_Ch1_delay, Tx_Ch2_delay, Tx_Ch3_delay);
    scope2(Rx_Ch1, Rx_Ch2, Rx_Ch3);
    scope3(err_Ch1, err_Ch2, err_Ch3);
end
release(scope1);

release(scope2);

release(scope3);

まとめ

この例では、DyadicAnalysisFilterBankDyadicSynthesisFilterBank の System object を使用して、ウェーブレット トランスマルチプレクサーを実装しました。解析ウェーブレット フィルターと合成ウェーブレット フィルターの完全な再構成プロパティを使用することで、多重化した入力を完全に抽出することができます。