Цифровой преобразователь GSM в MATLAB

Этот пример показывает, как симулировать установившееся поведение цифрового преобразователя частоты с фиксированной точкой для преобразований основной полосы частот GSM (Глобальной системы для мобильных устройств). Пример использует системные объекты обработки сигналов, чтобы эмулировать операцию четырехкомпонентного преобразователя цифрового вниз TI Graychip 4016 и требует лицензии Fixed-Point Designer™.

Введение

Digital Down Converter (DDC) является важным компонентом цифрового радио. Он выполняет преобразование частоты, чтобы преобразовать высокую входную частоту выборки вниз к более низкой частоте дискретизации для эффективной обработки. В этом примере DDC принимает полосно-пропускающий сигнал со частотой дискретизации около 70 мегавыборки в секунду (MSPS) и выполняет следующие операции:

  • Цифровое смешение или преобразование входного сигнала вниз с помощью цифрового генератора (NCO) и смесителя.

  • Узкополосный lowpass фильтрация и десятикратное уменьшение с помощью фильтрующей цепи Cascaded Integrator-Comb (CIC) и конечной импульсной характеристики фильтров.

  • Настройка усиления и окончательная повторная дискретизация потока данных.

DDC выдает сгенерированный модулированный сигнал с частотой дискретизации 270 килосампл в секунду (KSPS), который готов к демодуляции. Ниже приведен блок схема типового DDC.

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

Инициализация

Создайте и сконфигурируйте системный объект источника синусоиды, чтобы смоделировать источник GSM. Вы устанавливаете частоту объекта в 69 .1e6 * 5/24 MSPS, потому что после цифрового микширования объект будет иметь частоту основной полосы около 48 KSPS. Поскольку система, которую вы моделируете, повторяет вход в 4/( 3 * 256), необходимо задать формат кадра объекта как наименее распространенный множитель этих факторов.

Fs = 69.333e6;
FrameSize = 768;
sine = dsp.SineWave( ...
            'Frequency', 69.1e6*5/24, ...
            'SampleRate', Fs, ...
            'Method', 'Trigonometric function', ...
            'SamplesPerFrame', FrameSize);

Создайте и сконфигурируйте объект NCO System, чтобы смешать и уменьшить преобразование сигнала GSM. TI Graychip требует, чтобы частота настройки (свойство PhaseIncrement) была 32-битным типом данных с 32-битной длиной дроби. Смещение фазы должно быть 16-битным типом данных с 16-битной длиной дроби. Чтобы уменьшить шум амплитудного квантования и расширить паразитные частоты по доступной полосе пропускания, добавьте dither к значениям фазы аккумулятора. Обычно количество dither бит (14) является разностью между аккумулятором размера слова (32) и адресом размера слова (18) таблицы.

nco = dsp.NCO( ...
            'PhaseIncrementSource', 'Property', ...
            'PhaseIncrement', int32((5/24) *2^32), ...
            'PhaseOffset', int16(0), ...
            'NumDitherBits', 14, ...
            'NumQuantizerAccumulatorBits', 18, ...
            'Waveform', 'Complex exponential', ...
            'SamplesPerFrame', FrameSize, ...
            'AccumulatorDataType', 'Custom', ...
            'CustomAccumulatorDataType', numerictype([],32), ...
            'OutputDataType', 'Custom', ...
            'CustomOutputDataType', numerictype([],20,18));

Создайте и сконфигурируйте Системный объект CIC дециматора, который децимирует выход смесителя в 64 раза. CIC-фильтры могут достичь высоких частот десятикратного уменьшения или интерполяции, не используя никаких умножителей. Эта функция делает их очень полезными для цифровых систем, работающих с высокими скоростями.

M1 = 64;
cicdec = dsp.CICDecimator( ...
            'DecimationFactor', M1, ...
            'NumSections', 5, ...
            'FixedPointDataType', 'Minimum section word lengths', ...
            'OutputWordLength', 20);

Создайте и сконфигурируйте системный объект дециматора конечной импульсной характеристики, чтобы компенсировать падение полосы пропускания, вызванное CIC-фильтром. Этот фильтр также децимируется в 2 раза.

gsmcoeffs; % Read the CFIR and PFIR coeffs
M2 = 2;
cfir = dsp.FIRDecimator(M2, cfir, ...
            'CoefficientsDataType', 'Custom', ...
            'CustomCoefficientsDataType', numerictype([],16), ...
            'FullPrecisionOverride', false,...
            'OutputDataType', 'Custom', ...
            'CustomOutputDataType', numerictype([],20,-12));

Создайте и сконфигурируйте конечную импульсную характеристику дециматора Системного объекта, чтобы уменьшить частоту дискретизации в другой раз 2.

M3 = 2;
pfir = dsp.FIRDecimator(M3, pfir, ...
            'CoefficientsDataType', 'Custom', ...
            'CustomCoefficientsDataType', numerictype([],16), ...
            'FullPrecisionOverride',false, ...
            'OutputDataType', 'Custom', ...
            'CustomOutputDataType', numerictype([],20,-12));

Создайте и сконфигурируйте Системный объект преобразователя скорости конечной импульсной характеристики, чтобы повторно отобразить конечный результат в 4/3 раза.

firrc = dsp.FIRRateConverter(4, 3, fir1(31,0.25),...
    'CoefficientsDataType', 'Custom', ...
    'CustomCoefficientsDataType', numerictype([],12), ...
    'FullPrecisionOverride',false, ...
    'OutputDataType', 'Custom', ...
    'CustomOutputDataType', numerictype([],24,-12));

Создайте объект fi указанного числового типа, чтобы действовать как преобразование типа данных для синусоидального выхода.

gsmsig = fi(zeros(768,1),true,14,13);

Создайте объект fi указанного числового типа, чтобы сохранить выходы смесителя с фиксированной точкой.

mixsig = fi(zeros(768,1),true,20,18);

Создайте и сконфигурируйте два Системных объектов Time Scope, чтобы построить график действительной и мнимой частей фильтра преобразователя скорости конечной импульсной характеристики выхода.

timeScope1 = timescope(...
  'Name', 'Rate Converter Output: Real Signal', ...
  'SampleRate', Fs/256*4/3, ...
  'TimeSpanSource','property', ...
  'TimeSpan', 1.2e-3, ...
  'YLimits', [-2e8 2e8]);
pos = timeScope1.Position;
timeScope1.Position(1:2) = [pos(1)-0.8*pos(3) pos(2)+0.7*pos(4)];

timeScope2 = timescope(...
  'Name', 'Rate Converter Output: Imaginary Signal', ...
  'Position', [pos(1)-0.8*pos(3) pos(2)-0.7*pos(4) pos(3:4)], ...
  'SampleRate', Fs/256*4/3, ...
  'TimeSpanSource','property', ...
  'TimeSpan', 1.2e-3, ...
  'YLimits', [-2e8 2e8]);

Создайте и сконфигурируйте два объекта системы анализатора спектра, чтобы построить график спектра степени вывода NCO и компенсированного выхода CIC дециматора.

specScope1 = dsp.SpectrumAnalyzer(...
  'Name','DSPDDC: NCO Output',...
  'SampleRate',Fs,...
  'FrequencySpan','Start and stop frequencies',...
  'StartFrequency',0,'StopFrequency',Fs/2,...
  'RBWSource', 'Property', 'RBW', 4.2e3,...
  'SpectralAverages', 1,...
  'Title', 'Power spectrum of NCO output',...
  'Position',[pos(1)+.8*pos(3) pos(2)+0.7*pos(4) pos(3:4)]);

FsCICcomp = Fs/(M1*M2);
specScope2 = dsp.SpectrumAnalyzer(...
  'Name','DSPDDC: Compensated CIC Decimator Output',...
  'SampleRate',FsCICcomp,...
  'FrequencySpan','Start and stop frequencies',...
  'StartFrequency',0, 'StopFrequency',FsCICcomp/2,...
  'RBWSource', 'Property', 'RBW', 4.2e3,...
  'SpectralAverages', 1,...
  'Title', 'Power spectrum of compensated CIC decimator output',...
  'Position',[pos(1)+.8*pos(3) pos(2)-0.7*pos(4) pos(3:4)]);

Цикл обработки

В цикле обработки передний интерфейс смесителя преобразует сигнал GSM в полосу частот модулирующих сигналов с цифровым понижением частоты. CIC десятикратного уменьшения и компенсационный фильтры понижают значение сигнала в 128 раз, и программируемая конечная импульсная характеристика фильтр децимирует в 2 раза, получая общее десятикратное уменьшение 256. Бэкэнд повторной дискретизации выполняет дополнительную фильтрацию для конкретного приложения. Выполнение цикла обработки для 100 итераций эквивалентно обработке около 1,1 мс повторно дискретизированного выхода.

% Create a container for the four scopes
scopesContainer = HelperCreateScopesContainer(...
                  {timeScope1,specScope1,timeScope2,specScope2},...
                   'Name','Digital Down Converter',...
                   'Layout',[2 2],...
                   'ExpandToolstrip',false);

for ii = 1:100
    gsmsig(:) = sine();         % GSM signal
    ncosig    = nco();          % NCO signal
    mixsig(:) = gsmsig.*ncosig; % Digital mixer

    % CIC filtering and compensation
    ycic = cfir(cicdec(mixsig));

    % Programmable FIR and sample-rate conversion
    yrcout = firrc(pfir(ycic));

    % Frequency and time-domain plots
    timeScope1(real(yrcout));
    timeScope2(imag(yrcout));
    specScope1(ncosig);
    specScope2(ycic);
end
release(timeScope1);
release(timeScope2);
release(specScope1);
release(specScope2);

Заключение

В этом примере вы использовали объекты DSP System Toolbox™ System, чтобы симулировать статическое поведение цифрового преобразователя частоты GSM с фиксированной точкой. Объекты Time Scope и Spectrum Analyzer System позволяют вам анализировать различные стадии DDC.