Для этого формирую вектор , например из 512 элементов где все элементы нули и один элемент очень большое число - аля дельта функция .
Сформированый вектор подаю на функцию фильтра , получаю вектор прошедший через фильтр и его я подаю на функцию fft() , перевожу в Дб и вывожу на график.
И вроде всё - ок.
Вопрос такой, будет ли эта же схема работать с самодельным CIC фильтром ?
Вот с таким например:
CODE
function [y]=cic_filter(x) //M=2 N=2 R=1
n=length(x)
integrator1=0
integrator2=0
last2_integrator2=0;
last1_integrator2=0;
last2_comb1 = 0;
last1_comb1 = 0;
last2_comb2 = 0;
last1_comb2 = 0;
downsample_clock=0;
for i=1:n
integrator1 = (integrator1 + x(i))/1;
integrator2 = (integrator2 + integrator1)/1;
downsample_clock=downsample_clock+1
if downsample_clock>1
then
last2_integrator2 = last1_integrator2;
last1_integrator2 = integrator2;
comb1 = (integrator2 - last2_integrator2)/1;
last2_comb1 = last1_comb1;
last1_comb1 = comb1;
comb2 = (comb1 - last2_comb1)/1
last2_comb2 = last1_comb2;
last1_comb2 = comb2;
//y(i/downsample_clock)=comb8;
y(i)=comb2;
downsample_clock=0
end
end
endfunction
n=length(x)
integrator1=0
integrator2=0
last2_integrator2=0;
last1_integrator2=0;
last2_comb1 = 0;
last1_comb1 = 0;
last2_comb2 = 0;
last1_comb2 = 0;
downsample_clock=0;
for i=1:n
integrator1 = (integrator1 + x(i))/1;
integrator2 = (integrator2 + integrator1)/1;
downsample_clock=downsample_clock+1
if downsample_clock>1
then
last2_integrator2 = last1_integrator2;
last1_integrator2 = integrator2;
comb1 = (integrator2 - last2_integrator2)/1;
last2_comb1 = last1_comb1;
last1_comb1 = comb1;
comb2 = (comb1 - last2_comb1)/1
last2_comb2 = last1_comb2;
last1_comb2 = comb2;
//y(i/downsample_clock)=comb8;
y(i)=comb2;
downsample_clock=0
end
end
endfunction
а то я в качестве АЧХ получил прямую линию