exponenta event banner

Субдискретизация IF со сложными многоскоростными фильтрами

В этом примере показано, как использовать сложные многоскоростные фильтры в реализации цифровых понижающих преобразователей (DDC). DDC является ключевым компонентом цифровых радиостанций. Он выполняет преобразование частоты, необходимое для преобразования высоких входных скоростей дискретизации, обычно встречающихся на выходе аналого-цифрового (АЦП) преобразователя, в более низкие скорости дискретизации для дальнейшей и более простой обработки. В этом примере мы увидим, как звуковой сигнал, модулированный несущей частотой 450 кГц, может быть снижен до частоты дискретизации 20 кГц. После краткого обзора традиционной архитектуры DDC мы описываем альтернативное решение, известное как субдискретизация промежуточной частоты (IF), и сравним соответствующие затраты на внедрение этих двух решений. В этом примере требуется лицензия Fixed-Point Designer™.

Обычный цифровой понижающий преобразователь

Обычный процесс преобразования с понижением частоты начинается с дискретизации аналогового сигнала со скоростью, которая удовлетворяет критерию Найквиста для несущей. Возможной опцией может быть выборка входного сигнала 450 кГц на частоте 2,0 МГц, затем использование цифрового понижающего преобразователя для выполнения сложного преобразования в основную полосу частот, фильтрация и понижающая выборка на 25 с помощью фильтра Cascaded Integrator-Comb (CIC), а затем понижающая выборка на 4 с парой полупополосных фильтров. Такая реализация показана ниже:

Проектирование фильтров ЦВК

Первый фильтр обычного DDC обычно является фильтром CIC. Фильтры CIC являются эффективными структурами без умножения, которые используются в системах с высоким прореживанием или интерполяцией. В нашем случае это понизит сигнал 2 МГц до 2,0 MHz/25 = 80 кГц.

Fs_normDDC = 2e6;          % Sampling frequency
R          = 25;           % Decimation factor
Fpass      = 10e3;         % Passband Frequency
Astop      = 60;           % Aliasing Attenuation(dB)
D          = 1;            % Differential delay
dcic = fdesign.decimator(R,'cic',D,Fpass,Astop,Fs_normDDC);
cic = design(dcic,'SystemObject',true);
cicgain = dsp.FIRFilter('Numerator',1/gain(cic)); % Normalize gain of CIC

Конструкция компенсационного дециматора FIR

Второй фильтр обычного DDC компенсирует провал полосы пропускания, вызванный CIC. Поскольку CIC имеет sinc-подобный отклик, он может быть компенсирован с помощью фильтра нижних частот, который имеет обратный sinc отклик в полосе пропускания.

Nsecs = cic.NumSections;       % Number of sections
Fpass  = 10e3;                 % Passband Frequency
Fstop  = 25e3;                 % Stopband Frequency
Apass  = 0.01;                 % Passband Ripple (dB)
Astop  = 80;                   % Stopband Attenuation (dB)
dcp = fdesign.decimator(2,'ciccomp', ...
    D,Nsecs,Fpass,Fstop,Apass,Astop,dcic.Fs_out);
cfir = design(dcp,'equiripple', ...
    'StopBandShape','linear','StopBandDecay',60,'SystemObject',true);

Проектирование полупериодного фильтра

Наконец, мы используем фильтр 20-го порядка для снижения сигнала 40 кГц до 20 кГц.

dhbfilter = fdesign.decimator(2,'halfband','N',20,dcp.Fs_out);
hbfilter = design(dhbfilter,'SystemObject',true);

Обычный фильтр DDC получают путем каскадирования трех ранее спроектированных ступеней.

normDDCFilter = cascade(cicgain,cic,cfir,hbfilter);

Субдискретизация IF

Поскольку несущая частота отбрасывается как часть выделения сигнала, нет необходимости сохранять ее во время процесса дискретизации данных. Критерий Найквиста для несущей может быть фактически нарушен до тех пор, пока удовлетворяется критерий Найквиста для полосы пропускания сложной огибающей.

Эта узкополосная интерпретация критерия Найквиста приводит к альтернативному процессу сбора данных, известному как субдискретизация IF. В этом процессе частота дискретизации АЦП выбирается меньшей, чем центральная частота сигнала, для преднамеренного совмещения центральной частоты. Поскольку критерий Найквиста нарушается намеренно, аналоговый сигнал должен быть кондиционирован, чтобы предотвратить наложение нескольких частотных интервалов на то же самое частотное местоположение, в котором будет находиться требуемая составляющая сигнала.

Переменная y представляет приблизительно 3 секунды звукового сигнала, модулированного несущей частотой 450 кГц. Дискретный сигнал ys представляет выходной сигнал АЦП 120 кГц.

[y,ys,Fs] = loadadcio;
Fs_altDDC = 1.2e5;   % Sampling frequency

[Hys,Fys] = periodogram(ys,[],[],Fs,'power','centered');
N = length(Fys);

figure('color','white')
periodogram(y,[],[],Fs,'power','centered');
clear y;
hold on;
plot((-(ceil(N/2*9)-1):floor(N/2*9))/N*Fs_altDDC/1000, ...
        repmat(10*log10(Hys),9,1),'r:');
axis([-50 500 -160 0])
legend('Input of A/D Converter','Aliased Output of A/D Converter', ...
    'Location','NorthEast');

Диапазон частот около 450 кГц совмещен около -30 кГц. Наложение на четверть частоты дискретизации максимизирует разделение между положительным и отрицательным частотными псевдонимами. Это обеспечивает максимальную полосу пропускания перехода для аналогового полосового фильтра и, следовательно, минимизирует его стоимость.

Выбор частоты дискретизации 120 кГц также облегчает последующую задачу преобразования с понижением частоты в 20 кГц, которая выполняется путем дискретизации с понижением частоты в 6 раз. Преобразование вниз может быть достигнуто в два этапа. Сначала выполняют понижающую дискретизацию 3 в 1 с помощью комплексного полосового фильтра с последующим преобразованием 2 в 1 с помощью полупополосного фильтра. Структура этого псевдослучайного DDC показана ниже.

Разработка комплексного полосового фильтра

Для получения комплексного полосового фильтра преобразуем прообразный прореживатель нижних частот в четверть частоты дискретизации путём умножения коэффициентов фильтра на гетеродинные члены exp (-j * pi/2 * n). Обратите внимание, что в то время как коэффициенты фильтра нижних частот действительны, коэффициенты преобразованного фильтра сложны. На рисунке ниже показаны амплитудные характеристики этих фильтров.

M = 3;               % Decimation Factor
TW   = Fstop-Fpass;  % Transition Width (Hz)
designLowpass = fdesign.decimator(M,'nyquist',M,TW,Astop,Fs_altDDC);
lpfilter = design(designLowpass,'SystemObject',true); % Lowpass prototype
n = 0:length(lpfilter.Numerator)-1;
complexBPFilter = dsp.FIRDecimator(M,lpfilter.Numerator.*exp(-1i*pi/2*n));
fvt = fvtool(lpfilter,complexBPFilter,'Fs',Fs_altDDC,'Color','White');
legend(fvt,'Lowpass Decimator','Complex Bandpass Decimator', ...
    'Location','NorthEast')

Теперь применим комплексный полосовой прореживатель к выходу аналого-цифрового преобразователя. Можно показать, что сигнал с четвертной частотой дискретизации всегда будет соответствовать кратной четверти частоты дискретизации при прореживании на любой целочисленный коэффициент. В нашем примере центрированный сигнал -30 кГц будет иметь значение 40/4 = 10 кГц.

ycbp = complexBPFilter(ys);
figure('color','white')
periodogram(ycbp,[],[],designLowpass.Fs_out,'power','centered');
legend('Output of Complex Bandpass Decimator')

Выходная последовательность ycbp затем гетеродинируется до нуля.

yht = ycbp.*(-1i).^(0:length(ycbp)-1).';
figure('color','white')
periodogram(yht,[],[],designLowpass.Fs_out,'power','centered');
legend('Heterodyned Sequence')

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

yf = hbfilter(yht);
figure('color','white')
periodogram(yf,[],[],dhbfilter.Fs_out,'power','centered');
legend('Output of Aliasing DDC')

Воспроизведение звукового сигнала на выходе «совмещающего» DDC. (Copyright 2002 Bomb)

player = audioDeviceWriter('SampleRate',dhbfilter.Fs_out);
player(real(yf));

Сравнение затрат на внедрение

Прежде чем перейти к анализу затрат, давайте проверим, что амплитудные характеристики фильтров в двух решениях DDC сравнимы. Мы исключаем как комплексное преобразование в основную полосу в обычном случае DDC, так и гетеродин в случае субдискретизации IF. Кроме того, мы используем прореживатель прототипа нижних частот в последнем случае, поскольку он имеет ту же ширину перехода, пульсации полосы пропускания и затухание полосы останова, что и комплексный прореживатель полосы пропускания.

altDDCFilter = cascade(lpfilter,hbfilter);

Мы проверяем, что фильтры, используемые в обоих случаях, имеют очень схожие амплитудные характеристики: пульсация полосы пропускания менее 0,04 дБ, частота отсечки 6dB 10 кГц и затухание полосы останова 55 дБ при 13,4 кГц. Поэтому было бы справедливо перейти к анализу затрат.

set(fvt, ...
    'Filters',{normDDCFilter,altDDCFilter}, ...
    'FrequencyRange','Specify freq. vector', ...
    'FrequencyVector',linspace(0,100e3,2048), ...
    'Fs',[Fs_normDDC,Fs_altDDC], ...
    'ShowReference','off', ...
    'Color','White');
legend(fvt,'Conventional DDC Filter', ...
    'Equivalent Digital IF Subsampling Filter', ...
    'Location','NorthEast');

В случае обычного DDC, мы должны сначала принять во внимание стоимость трансляции основной полосы частот. Мы предполагаем, что это сделано только с одним множителем, работающим на частоте 2 МГц. Затем необходимо добавить стоимость фильтров CIC и полуполосных фильтров. В случае субдискретизации ПЧ мы должны учитывать стоимость гетеродина. Мы предполагаем, что это делается только с одним умножителем, работающим на частоте 40 кГц. Затем мы должны добавить стоимость сложных полосовых и полупериодных фильтров.

% Cost of CIC and halfband filters
c_normDDC = cost(normDDCFilter);
% Cost of complex bandpass and halfband filters
c_altDDC  = cost(cascade(complexBPFilter,hbfilter));
ddccostcomp(Fs_normDDC,c_normDDC,Fs_altDDC,c_altDDC)
ans =

    'Total Cost                      : Conventional DDC | IF subsampling
     -------------------------------------------------------------------
     Number of Coefficients          :               36 |             42
     Number of States                :               50 |             62
     Multiplications per microsecond :             5.18 |            1.5
     Additions per microsecond       :             9.44 |            1.4'

Количество умножителей, сумматоров и состояний, требуемых в случае субдискретизации ПЧ, сравнимо с количеством обычных DDC, но количество операций в секунду значительно уменьшается, так как это экономит 71% от числа умножений в секунду и 85% от числа дополнений в секунду.

Использование dsp. ComplexBandpassDecimator

Мы можем упростить проектирование сложного полосового фильтра с помощью dsp. Объект ComplexBandpassDecimator System. Объект проектирует полосовой фильтр на основе указанного коэффициента прореживания, центральной частоты и частоты дискретизации. Нет необходимости переводить коэффициенты нижних частот в полосовые, как мы это делали в конструкции выше: объект сделает это за нас. Кроме того, объект будет получать частоту, на которую сглажен отфильтрованный сигнал, и смешивать его обратно до нуля Гц для нас.

% Design a complex bandpass filter. Include the decimate-by-2 halfband
% filter into the design by specifying a decimation factor of 2*M:
bp = dsp.ComplexBandpassDecimator(M*2 , -30e3, Fs_altDDC,...
                                  'TransitionWidth',TW);
% Visualize the filter response
visualizeFilterStages(bp);
% Filter the output of the 120 kHz A/D converter
yf = bp(ys);
figure('color','white')
periodogram(yf,[],[],dhbfilter.Fs_out,'power','centered');
legend('Output of complex bandpass decimator')
player(real(yf));

Резюме

В этом примере показано, как сложные многоскоростные фильтры могут использоваться при разработке цифровых понижающих преобразователей на основе субдискретизации IF. Технология субдискретизации ПЧ может быть экономически эффективной альтернативой обычным DDC во многих применениях. Для получения дополнительной информации о субдискретизации ПЧ см. Многоскоростная обработка сигналов для систем связи fredric j harris, Prentice Hall, 2004.