GSM, цифровой вниз конвертер в MATLAB

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

Введение

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

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

  • Узкополосная фильтрация низкой передачи и десятикратное уменьшение с помощью цепочки фильтра Каскадной расчески интегратора (CIC) и КИХ-фильтров.

  • Получите корректировку и итоговую передискретизацию потока данных.

DDC производит основополосный сигнал с частотой дискретизации 270 kilosamples в секунды (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, чтобы смешать и вниз преобразовать сигнал 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 decimator Системный объект, который десятикратно уменьшает микшер, выведенный фактором 64. CIC-фильтры могут достигнуть высоких уровней десятикратного уменьшения или интерполяции, не используя множителей. Эта функция делает их очень полезными для цифровых систем, действующих на высоких показателях.

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

Создайте и сконфигурируйте КИХ decimator Системный объект, чтобы компенсировать свисание полосы пропускания, вызванное 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));

Создайте и сконфигурируйте КИХ decimator Системный объект, чтобы уменьшать частоту дискретизации другим фактором 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 объект заданного numerictype действовать как преобразование типа данных для синуса вывод.

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

Создайте fi объект заданного numerictype сохранить микшер фиксированной точки вывод.

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

Создайте и сконфигурируйте в два Раза Системные объекты Осциллографа, чтобы построить действительные и мнимые части КИХ-фильтра конвертера уровня вывод.

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

timeScope2 = dsp.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, ...
  'TimeSpan', 1.2e-3, ...
  'YLimits', [-2e8 2e8], ...
  'TimeSpanOverrunAction', 'Scroll');

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

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™, чтобы моделировать установившееся поведение фиксированной точки GSM, цифровой вниз конвертер. Осциллограф Времени и Спектр Системные объекты Анализатора позволяют вам анализировать различные этапы DDC.