Автор: dcs Aug 7 2018, 14:52
Здравствуйте,
подскажите как сделать так, чтобы АЧХ (CIC,CFIR,и результирующая) отображались визуально "гладко, без изломов" при увеличении для моего примера при больших коэффициентах децимации.
Начальная частота семплирования Fs = 100MHz. На выходе хочу, например, 10kHz.
data @100MHz -> CIC (decimate by 5000) -> CFIR (decimate by 2) -> data @10kHz
P.S.
можно ли отобразить результат последнего fvtool(CICDecim, CICCompDecim, filtCasc, ... от 0 до целевой 10кГц?
Код
clc, clear, close all;
%% CIC
Fs_init = 100e6; % Hz
CIC_output_sample_rate = 20e3; % integer multiple of Fs_init
CIC_decim_factor = Fs_init/CIC_output_sample_rate; % decimatin factor
CICDecim = dsp.CICDecimator( ...
'DecimationFactor', CIC_decim_factor, ...
'DifferentialDelay', 1, ... % нули АЧХ cic будут на частотах кратных 20кГц
'NumSections', 4);
Gain_CIC = gain(CICDecim);
f_CICDecim = fvtool(CICDecim,'Analysis','freq','ShowReference','off');
f_CICDecim.NormalizeMagnitudeto1 = 'on';
legend(f_CICDecim,'CIC decimator');
%% CFIR with decimation by 2
fs = CIC_output_sample_rate; % sample rate @compensator input
fPass = 2e3;
fStop = 4e3;
CICCompDecim = dsp.CICCompensationDecimator(CICDecim, ...
'DecimationFactor',2, ...
'PassbandFrequency',fPass, ...
'StopbandFrequency',fStop, ...
'PassbandRipple', 0.25, ...
'StopbandAttenuation', 80, ...
'SampleRate',fs);
f_CICCompDecim = fvtool(CICCompDecim,'Analysis','freq');
legend(f_CICCompDecim, 'CIC compensator decimator');
filtCasc = dsp.FilterCascade(CICDecim,CICCompDecim);
f = fvtool(CICDecim, CICCompDecim, filtCasc, ...
'ShowReference','off', ...
'Fs', [fs*CIC_decim_factor fs fs*CIC_decim_factor]);
f.NormalizeMagnitudeto1 = 'on';
legend(f,'CIC Decimator','CIC Compensation Decimator', ...
'Overall Response');
-спасибо
http://electronix.ru/redirect.php?https://postimages.org/
Автор: Самурай Aug 7 2018, 16:26
Цитата(dcs @ Aug 7 2018, 18:52)
подскажите как сделать так, чтобы АЧХ (CIC,CFIR,и результирующая) отображались визуально "гладко, без изломов"
...
можно ли отобразить результат последнего fvtool(CICDecim, CICCompDecim, filtCasc, ... от 0 до целевой 10кГц?
По первому вопросу:
f = fvtool(...);
f.NumberofPoints = 100500;
По второму:
f = fvtool(...);
f.FrequencyRange = 'Specify freq. vector';
f.FrequencyVector = [0:10:10000];
Автор: dcs Aug 7 2018, 18:06
Цитата(Самурай @ Aug 7 2018, 17:26)
По первому вопросу:
По второму:
спасибо
Автор: dcs Aug 15 2018, 19:13
здравствуйте.
подскажите, вот как у меня в посте выше есть cic и cfir
условно говоря, с выхода cic разрядность пусть 96 бит, это много для входа корректирующего.
Например, я округляю до 32 бит (беру старшие 32 значащих по результатам моделирования или есть другой способ? есть ли смысл окргулять по правилу 0.5 или именно так и надо? имею ввиду примерно следющее cic_out[96:65]+cic_out[64] если >0 и наоборот если отрицательный результат)
Так вот на сколько давить внеполосные сигналы в корректирующем фильтре? на 20*log10(2^32) = 193дБ ? как правильно?
-спасибо
Автор: Kluwert Aug 21 2018, 11:36
Слушайте, у вас исходная частота выборок 100МГц, а конечная - 20КГц, если нигде опечатки нет. Передискретизация в 5000 раз?! Вы точно этого хотите? Это некая учебная задача? Потому что я не очень могу представить откуда в практических задачах мог приехать НЧ-сигнал с полосой порядка 20КГц оцифрованный на 100МГц.
Автор: soldat_shveyk Aug 21 2018, 12:01
Цитата
Потому что я не очень могу представить откуда в практических задачах
SDR-приемник? Самое то
Автор: dcs Aug 21 2018, 17:30
Цитата(Kluwert @ Aug 21 2018, 11:36)
я не очень могу представить откуда в практических задачах мог приехать НЧ-сигнал с полосой порядка 20КГц оцифрованный на 100МГц.
опечатки нет. fs=1.5e9, bw=3.2e3 (единственный такой режим. однополосная, КВ)
100e6, 20e3 - это условный пример.
все-таки повторю вопрос , при каскадной реализации фильтров из каких условий выбирается уровень подавления в каждом следующем фильтре?
из каких условий выбирается разрядность данных между фильтрами? где бы почитать об этом на конкретном примере ?
-спасибо
Автор: soldat_shveyk Aug 22 2018, 06:54
Цитата
При каскадной реализации фильтров из каких условий выбирается уровень подавления в каждом следующем фильтре?
Все определяется Вашими требованиями к избирательности КВ приемника.
Самый простой и наглядный способ - постройте сквозную АЧХ всех каскадов фильтрации. Для этого надо импульсные характеристики всех фильтров привести к частоте дискретизации АЦП, то есть интерполировать на величину коэффициента децимации перед фильтром. Все интерполированные импульсные характеристики свернуть между собой. fvtool() от результирующей импульсной характеристики покажет сквозную АЧХ.
Автор: dcs Aug 22 2018, 08:40
Цитата(soldat_shveyk @ Aug 22 2018, 06:54)
Все определяется Вашими требованиями к избирательности КВ приемника.
Самый простой и наглядный способ - постройте сквозную АЧХ всех каскадов фильтрации. Для этого надо импульсные характеристики всех фильтров привести к частоте дискретизации АЦП, то есть интерполировать на величину коэффициента децимации перед фильтром. Все интерполированные импульсные характеристики свернуть между собой. fvtool() от результирующей импульсной характеристики покажет сквозную АЧХ.
спасибо.