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

АЧХ -каскада фильтров

Добрый день. Возник следующий вопрос:

Имеется два фильтра: 1)Стандартный КИХ-дециматор. И фильтр Приподнятого косинуса.

Собственно вопрос заключается в том, как построить АЧХ каскадного соединения этих двух фильтров.

Конструкция для каскадного соединения КИХ-фильтров типа такой:

 

% Расчет КИХ-фильтра дециматора.

Fs2 = 240e3; % Частота входных выборок

Fpass2 = 15e3;

Fstop2 = 20e3;

Rp2 = 0.1;

Astop2 = 60;

M = 5;

FIRdecim = fdesign.decimator(M, 'lowpass', Fpass2, Fstop2, Rp2, Astop2, Fs2);

 

FC2 = design(FIRdecim);

 

hRxFilt = comm.RaisedCosineReceiveFilter('RolloffFactor',0.5, 'InputSamplesPerSymbol',8, ...

'DecimationFactor',8);

 

FC3 = design(hRxFilt);

 

увы не работает. Ошибка в следующей строке: FC3 = design(hRxFilt);

 

Оно в общем то и понятно из-за чего. А как сделать по другому, никак не соображу.

Заранее спасибо.

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


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

Дело в том, что если я все правильно понял конструкция cascade работает только для фильтров входящих в библиотеку функций Multirate and Multistage Filters.

Фильтр приподнятого косинуса туда не входит. В этом то и проблема. Может есть у кого пример описания каскадного соединения применительно к данному фильтру.

 

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


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

Добрый день. Возник следующий вопрос:

Имеется два фильтра: 1)Стандартный КИХ-дециматор. И фильтр Приподнятого косинуса.

Собственно вопрос заключается в том, как построить АЧХ каскадного соединения этих двух фильтров.

 

Выкидываете дециматор из КИХ, между коэффициентами приподнятого косинуса вставляете нули в соответствии с коэффициентом децимации, полученные фильтры каскадно соединяете и подаёте дельта-импульс, строите АЧХ полученной ИХ.

 

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


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

Выкидываете дециматор из КИХ, между коэффициентами приподнятого косинуса вставляете нули в соответствии с коэффициентом децимации, полученные фильтры каскадно соединяете и подаёте дельта-импульс, строите АЧХ полученной ИХ.

Спасибо попробую.

 

Собственно нашел пример как описывать подобного рода штуки.

Может как и мне, кому-ни-ть бригодится.

 

RRC_rolloff = 0.22; % RRC rolloff factor

RRC_order = 34; % RRC order is one less than the filter length.

RRC_L_factor = 4; % interpolate by this number in the RRC

 

% create a SQUARE ROOT RAISED COSINE filter based on the above parameters.

dRRC = fdesign.pulseshaping(RRC_L_factor,'Square Root Raised Cosine','N,Beta',RRC_order,RRC_rolloff);

hRRCtemp = design(dRRC);

hRRC = mfilt.firinterp(RRC_L_factor, hRRCtemp.Numerator);

 

%---------------------------------------------------------------

% CIC COMPENSATION (CFIR) SECTION

% (Note: some parameters belong to the CIC being compensated.)

%---------------------------------------------------------------

 

CFIR_L_factor = 2; % interpolation factor of CFIR

CIC_D = 1; % differential delay of CIC

CIC_N = 5; % number of stages in CIC

CIC_R = 8; % interpolation factor of CIC

CFIR_Fp = 1e6; % passband edge frequency of CFIR

CFIR_Fst = 2e6; % stopband edge frequency of CFIR

CFIR_Ap = 0.2; % passband ripple of CFIR (in dB)

CFIR_Ast = 80; % stopband attenuation of CFIR (in dB)

CFIR_Fs = 12.5e6; % OUTPUT (interpolated) sampling frequency of CFIR

 

% create a CIC COMPENSATION FILTER based on the above parameters

dCFIR = fdesign.interpolator(CFIR_L_factor,'ciccomp', CIC_D, CIC_N, CIC_R, ...

'Fp,Fst,Ap,Ast', ...

CFIR_Fp, CFIR_Fst, CFIR_Ap, CFIR_Ast, CFIR_Fs);

hCFIR = design(dCFIR,'equiripple');

 

% create a CFIR SCALING FACTOR OBJECT

% (NOTE: the coefficients are scaled to prevent loss of signal power due to

% insertion of zero samples - this requires correction for convenient

% plotting of the spectrum.)

K_cfir = 1/CFIR_L_factor; % gain compensation value

hKcfir = dfilt.scalar(K_cfir);

 

%--------------

% CIC SECTION

%--------------

 

CIC_Fs = 100e6; % OUTPUT (interpolated) sampling frequency of CIC

CIC_iwl = 10; % CIC input

 

% create a CIC filter object

hCIC = mfilt.cicinterp(CIC_R, CIC_D, CIC_N);%, 10, CIC_Fs);

 

% create a CIC scaling factor object

K_cic = 1/(CIC_R^CIC_N); % gain compensation value

hK = dfilt.scalar(K_cic);

 

%------------------

% CASCADE SECTION

%------------------

 

% create a cascade of the objects

hCIChK = mfilt.cascade(hCIC,hK); % CIC with scaling applied

hCFIRhKcfir = mfilt.cascade(hCFIR,hKcfir); % CFIR with scaling applied

hCASC = mfilt.cascade(hRRC,hCFIR,hKcfir,hCIC,hK); % cascade of all filters and scalings

 

Код для примера.

Всем спасибо.

 

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


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

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

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

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

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

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

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

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

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

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