Jump to content

    

fvtool

Здравствуйте,

 

подскажите как сделать так, чтобы АЧХ (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');

 

-спасибо

overall_response.jpg

post-77337-1533653616_thumb.jpg

Edited by dcs

Share this post


Link to post
Share on other sites
подскажите как сделать так, чтобы АЧХ (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];

 

 

 

Share this post


Link to post
Share on other sites
По первому вопросу:

 

По второму:

спасибо

Share this post


Link to post
Share on other sites

здравствуйте.

 

подскажите, вот как у меня в посте выше есть cic и cfir

 

условно говоря, с выхода cic разрядность пусть 96 бит, это много для входа корректирующего.

 

Например, я округляю до 32 бит (беру старшие 32 значащих по результатам моделирования или есть другой способ? есть ли смысл окргулять по правилу 0.5 или именно так и надо? имею ввиду примерно следющее cic_out[96:65]+cic_out[64] если >0 и наоборот если отрицательный результат)

 

Так вот на сколько давить внеполосные сигналы в корректирующем фильтре? на 20*log10(2^32) = 193дБ ? как правильно?

 

-спасибо

Share this post


Link to post
Share on other sites

Слушайте, у вас исходная частота выборок 100МГц, а конечная - 20КГц, если нигде опечатки нет. Передискретизация в 5000 раз?! Вы точно этого хотите? Это некая учебная задача? Потому что я не очень могу представить откуда в практических задачах мог приехать НЧ-сигнал с полосой порядка 20КГц оцифрованный на 100МГц.

Share this post


Link to post
Share on other sites
Потому что я не очень могу представить откуда в практических задачах

SDR-приемник? Самое то :)

Share this post


Link to post
Share on other sites
я не очень могу представить откуда в практических задачах мог приехать НЧ-сигнал с полосой порядка 20КГц оцифрованный на 100МГц.

опечатки нет. fs=1.5e9, bw=3.2e3 (единственный такой режим. однополосная, КВ)

 

100e6, 20e3 - это условный пример.

 

 

все-таки повторю вопрос , при каскадной реализации фильтров из каких условий выбирается уровень подавления в каждом следующем фильтре?

 

из каких условий выбирается разрядность данных между фильтрами? где бы почитать об этом на конкретном примере ?

 

-спасибо

Share this post


Link to post
Share on other sites
При каскадной реализации фильтров из каких условий выбирается уровень подавления в каждом следующем фильтре?

Все определяется Вашими требованиями к избирательности КВ приемника.

Самый простой и наглядный способ - постройте сквозную АЧХ всех каскадов фильтрации. Для этого надо импульсные характеристики всех фильтров привести к частоте дискретизации АЦП, то есть интерполировать на величину коэффициента децимации перед фильтром. Все интерполированные импульсные характеристики свернуть между собой. fvtool() от результирующей импульсной характеристики покажет сквозную АЧХ.

Share this post


Link to post
Share on other sites
Все определяется Вашими требованиями к избирательности КВ приемника.

Самый простой и наглядный способ - постройте сквозную АЧХ всех каскадов фильтрации. Для этого надо импульсные характеристики всех фильтров привести к частоте дискретизации АЦП, то есть интерполировать на величину коэффициента децимации перед фильтром. Все интерполированные импульсные характеристики свернуть между собой. fvtool() от результирующей импульсной характеристики покажет сквозную АЧХ.

спасибо.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this