exponenta event banner

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

В этом примере показано, как моделировать стационарное поведение цифрового понижающего преобразователя с фиксированной точкой для преобразования основной полосы частот GSM (Global System for Mobile). В примере используются объекты системы обработки сигналов для эмуляции работы четырехдиапазонного понижающего преобразователя TI Graychip 4016 и требуется лицензия Fixed-Point Designer™.

Введение

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

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

  • Узкополосная низкочастотная фильтрация и прореживание с использованием цепочки фильтров Cascaded Integrator-Comb (CIC) и FIR-фильтров.

  • Регулировка усиления и окончательная повторная выборка потока данных.

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

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

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

Создайте и настройте системный объект sine wave source для моделирования источника 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-разрядной дроби. Для уменьшения шума амплитудного квантования и расширения ложных частот по доступной полосе частот добавьте сигнал сглаживания к значениям фазы накопителя. Обычно число разрядов (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);

Создайте и настройте объект FIR-прореживающей системы для компенсации спада полосы пропускания, вызванного фильтром 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));

Создайте и настройте объект системы прореживания FIR, чтобы уменьшить частоту выборки еще в 2 раза.

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

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

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]);

Создайте и сконфигурируйте два объекта Spectrum Analyzer System для построения графика спектра мощности выхода 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, а программируемый фильтр FIR прореживает на другой коэффициент 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.