Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Вопросы системного уровня проектирования _ fvtool

Автор: 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-приемник? Самое то sm.gif

Автор: 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() от результирующей импульсной характеристики покажет сквозную АЧХ.

спасибо.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)