В этом примере показано, как моделировать стационарное поведение цифрового понижающего преобразователя с фиксированной точкой для преобразования основной полосы частот 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.