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