Перейти к содержанию
    

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

 

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

Изменено пользователем dcs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

 

-спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому что я не очень могу представить откуда в практических задачах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

 

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

 

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

 

-спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброе времени суток коллеги.

Есть вопрос связанный с применением fvtool для верификации своего алгоритма реализации фильтра на С.

Написал алгоритм реализации КИХ фильтра на С в виде функции принимающая один аргумент в качестве входного отсчета данных с АЦП и возвращающий значение с выхода фильтра. Коэффициенты взяты из Filter Designer.

Код реализация на С через mex конвертируется в функцию матлаб.

Есть желание отобразить в fvtool АЧХ моего алгоритма. Каким образом это можно реализовать? Есть примеры где можно это посмотреть?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, dlsh сказал:

Доброе времени суток коллеги.

Есть вопрос связанный с применением fvtool для верификации своего алгоритма реализации фильтра на С.

Написал алгоритм реализации КИХ фильтра на С в виде функции принимающая один аргумент в качестве входного отсчета данных с АЦП и возвращающий значение с выхода фильтра. Коэффициенты взяты из Filter Designer.

Код реализация на С через mex конвертируется в функцию матлаб.

Есть желание отобразить в fvtool АЧХ моего алгоритма. Каким образом это можно реализовать? Есть примеры где можно это посмотреть?

 

Как вариант, можно подать дельта-функцию на вашу реализацию, получите ИХ. А с ИХ уже работайте дальше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 22.05.2020 в 16:48, _sda сказал:

Как вариант, можно подать дельта-функцию на вашу реализацию, получите ИХ. А с ИХ уже работайте дальше.

Так и не разобрался каким образом подать дельта функцию для получения ИХ. Решил пойти другим путем. В Simulinke сделал блок фильтра - указав в качестве его реализации .с/.h файлы. Подключил к фильтру синусоидальный сигнал+шум, а к выходу спектроанализатор. 

Спойлер

image.thumb.png.d50fd4e20a0752cf23f25d6449fa8a0a.png

В результате получил на каждый фильтр два спектра

Спойлер

image.thumb.png.7b1b044d064562c4c1b4837830be3ab9.png

  

Здесь есть непонятный момент связанный с установкой параметра RBW спектроанализатора, при значении RBW < 0.15 Гц - график не строится.

Далее решил получить АЦХ данного фильтра. Выбрал LPF1, задал вх/вых (Input Perturbation/Output Measurement) и добавил Simulink Control Disign->Linear Analysis Plots->Bode Plot для снятия АФЧХ.

Спойлер

image.thumb.png.30311839a67f296809f38c9569ef3ff4.png

Однако результата нет, ошибок тоже. Возможно это связано с дискретностью источника сигнала и/или настройки нужно задать верные - так и не разобрался. Собственно вопрос как можно построить АЧХ данной модели?

В какую сторон здесь надо копать?

Проект FIR_v1.zip прикрепил.

image.png

image.png

image.png

FIR_v1.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...