Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

デジタル ダウン コンバーターの設計および分析

この例では、デジタル ダウン コンバーター (DDC) System object™ を使用して、TI Graychip 4016 デジタル ダウン コンバーターを簡単にエミュレートする方法を示します。この例はSimulink での GSM デジタル ダウン コンバーターの例との比較に基づいています。DDC System object を使用して、間引きフィルターを作成および解析し、各種の通過帯域および阻止帯域周波数と減衰仕様に適合するさまざまな構成オプションをすばやく模索する方法を示します。この例には Fixed-Point Designer™ のライセンスが必要です。

if ~isfixptinstalled
    error(message('dsp:dspDigitalDownConverterDesign:noFixptTbx'));
end

はじめに

Simulink での GSM デジタル ダウン コンバーターの例は、TI Graychip 4016 デジタル ダウン コンバーターをエミュレートするときに必要な手順を示しています。このデジタル ダウン コンバーターは、14.44 MHz を中心とする通過帯域信号をベースバンドにし、係数 256 で信号をダウン サンプルして入力サンプル レート 69.333 MHz を 270.83 kHz に変換します。この例では、以下の手順を実行します。

1) 数値制御発振器を設計し、14.44 MHz の混合器周波数を生成します。

2) 事前設定された係数セットを読み込み、通過帯域周波数 80 KHz で CIC 間引きフィルター、CIC 補償器フィルター、および FIR フィルターを生成します。

3) GSM 信号 (複素指数としてシミュレート) の周波数をダウン コンバートし、間引きフィルターのカスケードで、ダウン コンバートした出力をダウン サンプルします。

4) データ キャスティングを実行し、各ダウン コンバーター セクションで、必要な固定小数点データ型を取得します。

また、Simulink での GSM デジタル ダウン コンバーターの例では、FIR レート コンバーターを作成して、出力の第 3 フィルター段階でデータを再サンプリングします。DDC System object はレート コンバーターを含まないため、この例ではこのオブジェクトの実装は行いません。

この例では、DDC System object を使用して一連の間引きフィルターを設計する方法を示します。また、DDC オブジェクトが簡単で少ないステップでダウン コンバージョン処理を実行することも示します。

以下の DDC System object ブロック線図には、各段階でのデータ タイプと、対象となる例のデータ レートが含まれます。FiltersInputDataType および CustomFiltersInputDataType プロパティを使用して、フィルターの入力データ タイプを制御します。OutputDataType および CustomOutputDataType プロパティを使用して、出力データ タイプを制御します。

DigitalDownConverter System object の定義

DDC System object を作成します。オブジェクトの入力サンプル レートを 1 秒あたり 69.333 メガ サンプル (MSPS) に、間引き係数を 256 に設定し、出力サンプル レートを 270.86KHz にします。DDC オブジェクトは、間引き値を自動的に因数分解し、CIC フィルターが 64 で、CIC 補償器が 2 で、3 段目のフィルターが 2 で間引くようにします。

ddc = dsp.DigitalDownConverter('SampleRate',69.333e6, ...
    'DecimationFactor',256);

間引きフィルターの設計

Simulink での GSM デジタル ダウン コンバーターの例では、事前定義された一連のフィルター係数を使用して、2 つの FIR 間引きと 1 つの CIC 間引き System object を生成します。対応するカスケード応答が所定の通過帯域および阻止帯域の減衰と周波数仕様に適合するように間引きフィルターを構成することは、各フィルター段階で通過帯域および阻止帯域周波数の正しい組み合わせを選択する必要があり、非常に面倒なプロセスです。低次数のフィルター構成では、阻止帯域周波数を正しく選択する必要があります。

DDC オブジェクトは、一連の通過帯域および阻止帯域の減衰と周波数仕様に基づいて、間引きフィルターを自動的に設計します。

最小次数フィルター設計

DDC オブジェクトは、指定した通過帯域および阻止帯域の減衰量と周波数仕様に基づいて、最小次数の間引きフィルター設計を自動的に取得します。MinimumOrderDesign プロパティを true に設定して最小次数フィルター設計を取得します。

ddc.MinimumOrderDesign = true;

ダウン コンバーターは、両面帯域 160 KHz で GSM 信号を処理します。DDC オブジェクトの Bandwidth プロパティを 160 KHz に設定し、間引きフィルター カスケードの通過帯域周波数が 160e3/2 = 80 KHz になるようにします。

StopbandFrequencySource プロパティを 'Auto' に設定し、DDC オブジェクトの設定により、カスケード応答のカットオフ周波数がほぼ出力ナイキスト レート (すなわち、270.83e3/2 = 135.4 KHz) に、阻止帯域周波数が 2Fc-Fpass = 2*135.4e3 - 160e3/2 = 190.8 KHz になるようにします。ここで、Fc はカットオフ周波数、Fpass は通過帯域周波数です。StopbandFrequencySource'Auto' に設定すると、DDC オブジェクトは阻止帯域周波数をできる限り緩和し、カスケード応答の遷移帯域でエイリアシング エネルギーを許容しながら、最低フィルター次数を取得します。この設計トレードオフは、フィルター次数の最小化を優先する際に有効です。

ddc.Bandwidth = 160e3; % Passband frequency equal to 80 KHz
ddc.StopbandFrequencySource = 'Auto'; % Allow aliasing in transition band

最後に、阻止帯域の減衰 55dB と通過帯域リップル 0.04 dB を設定します。

ddc.StopbandAttenuation = 55; 
ddc.PassbandRipple = .04;

DDC オブジェクトの fvtool メソッドを呼び出して、間引きフィルターのカスケード応答を解析できます。カスケード応答が阻止帯域の減衰仕様を満たすフィルター係数を DDC オブジェクトが最適ビット数に設定するように、固定小数点演算を指定します。

fvt = fvtool(ddc,'Arithmetic','Fixed-point');

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (MHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent Filter #1: Quantized, Filter #1: Reference.

CIC 補償器および 3 段目の FIR 設計に構成済みフィルター次数と係数語長を取得します。

ddcFilters = getFilters(ddc,'Arithmetic','Fixed-point');
n = getFilterOrders(ddc);

CICCompensatorOrder = n.SecondFilterOrder %#ok<NASGU> 
CICCompensatorOrder = 12
ThirdStageFIROrder = n.ThirdFilterOrder %#ok<NASGU> 
ThirdStageFIROrder = 18
CICCompensatorCoefficientsWordLength = ...
    ddcFilters.SecondFilterStage.CustomCoefficientsDataType.WordLength
CICCompensatorCoefficientsWordLength = 11
ThirdStageFIRWordLength = ...
    ddcFilters.ThirdFilterStage.CustomCoefficientsDataType.WordLength
ThirdStageFIRWordLength = 11

遷移帯域のエイリアシングが許容できない場合、StopbandFrequencySource プロパティを 'Property' に設定して、阻止帯域周波数を任意の値に設定します。3 段目のフィルター次数を大きくして、阻止帯域周波数を 128KHz に設定して、遷移帯域を狭めます。

ddc.StopbandFrequencySource = 'Property';
ddc.StopbandFrequency = 128e3;

close(fvt)
fvt = fvtool(ddc,'Arithmetic','fixed-point');

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (MHz), ylabel Magnitude (dB) contains 3 objects of type line. These objects represent Filter #1: Quantized, Filter #1: Reference.

n= getFilterOrders(ddc);
CICCompensatorOrder = n.SecondFilterOrder
CICCompensatorOrder = 10
ThirdStageFIROrder = n.ThirdFilterOrder
ThirdStageFIROrder = 34

DDC オブジェクトの visualizeFilterStages メソッドを使用して、フィルター段階の応答と、カスケード全体の応答をビジュアル化します。

close(fvt)
fvt = visualizeFilterStages(ddc,'Arithmetic','fixed-point');

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (MHz), ylabel Magnitude (dB) contains 9 objects of type line. These objects represent CIC decimator, Decimation factor = 64: Quantized, CIC decimator, Decimation factor = 64: Reference, CIC compensator, Decimation factor = 2: Quantized, CIC compensator, Decimation factor = 2: Reference, Lowpass decimator, Decimation factor = 2: Quantized, Lowpass decimator, Decimation factor = 2: Reference, Cascade response: Quantized, Cascade response: Reference.

フィルター次数の制御

フィルター次数が設計上で最大の制約条件となる場合があります。DDC オブジェクトを使用して、MinimumOrderDesign プロパティを false に設定し、指定の次数で間引きフィルターを設計します。この場合でも、カスケード応答の所要の通過帯域および阻止帯域周波数を指定できます。ただし、阻止帯域の減衰およびリップルは、プロパティ値ではなく、フィルターの次数で制御されています。

発振器の設計

DDC オブジェクトは、いくつかのパラメーターに基づいて、数値制御発振器を設計します。Oscillator プロパティを 'NCO' に設定して、数値制御発振器を選択します。32 積和ビットと 18 量子化積和ビットを使用します。中心周波数を 14.44 MHz に設定し、14 ディザー ビットを選択します。

ddc.Oscillator = 'NCO';
ddc.CenterFrequency = 14.44e6;
ddc.NumAccumulatorBits = 32;
ddc.NumQuantizedAccumulatorBits = 18;
ddc.NumDitherBits = 14;

固定小数点の設定

DDC オブジェクトで異なるプロパティを設定し、ダウン コンバージョン パスで固定小数点データ タイプを制御できます。

CustomFiltersInputDataType プロパティを numerictype([],20,19) に設定して、各フィルターの入力で、語長および小数部の長さをそれぞれ 20 および 19 ビットにキャストします。DDC オブジェクトは、CIC 間引きの出力で、データをスケールします。Simulink での GSM デジタル ダウン コンバーターの例ではこのスケーリングが実行されておらず、このため各例で選択した小数部の長さの値は異なるものとなっています。

出力データ タイプ語長が 24 ビットに、小数部長が 23 ビットになるように設定します。

ddc.FiltersInputDataType = 'Custom';
ddc.CustomFiltersInputDataType = numerictype([],20,19);
ddc.OutputDataType = 'Custom';
ddc.CustomOutputDataType = numerictype([],24,23);

処理ループ

正弦波ジェネレーターを初期化し、GSM ソースをシミュレートします。バッファーを初期化し、入力信号データ タイプを 19 ビット語長と 18 ビット小数部長にキャストします。信号のスペクトル推定をプロットする図を作成します。

Fs = 69.333e6;
FrameSize = 768;
sine = dsp.SineWave('Frequency', 14.44e6+48e3, 'SampleRate', Fs, ...
    'PhaseOffset', 0, 'SamplesPerFrame', FrameSize);

gsmsig = fi(zeros(FrameSize,1),true,19,18);             
inputSpectrum = spectrumAnalyzer( ...
    'SampleRate',sine.SampleRate, ...
    'Title','Power spectrum of input signal');
outputSpectrum = spectrumAnalyzer( ...
    'SampleRate',sine.SampleRate/ddc.DecimationFactor, ...
    'Title','Power spectrum of down-converter signal');

主シミュレーション ループ

for ii = 1:1000
    % Create GSM signal with 19 bits of word length and 18 bits of fraction
    % length.
    gsmsig(:) = sine();
    
    % Down convert GSM signal
    downConvertedSig = ddc(gsmsig); 
    
    % Frequency domain plots
    inputSpectrum(gsmsig);
    outputSpectrum(downConvertedSig);
end

% Release objects
release(sine);
release(ddc);
release(inputSpectrum);

release(outputSpectrum);

Simulink での GSM デジタル ダウン コンバーターの例と比べて、信号のダウン コンバートに必要な手順が簡単になっています。

まとめ

この例では、Simulink での GSM デジタル ダウン コンバーターの例に示したデジタル ダウン コンバーターの設計に必要な手順を、DDC System object を使用した場合に必要な手順と比較しました。DDC オブジェクトでは、シンプルな 1 ステップでダウン コンバーター設計を取得できます。このオブジェクトは、通過帯域周波数、通過帯域周リップル、阻止帯域周波数、および阻止帯域の減衰仕様を満たす間引きフィルターを設計する手段となります。また、DDC オブジェクトは、間引きフィルター応答をビジュアル化し、解析する便利な手段ともなります。

その他の調査

dsp.DigitalUpConverter System object を使用して、デジタル アップ コンバーター システムを設計できます。