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

Цифровой фильтр в Matlab

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

недано начал учиться моделировать цифровые фильтры в Matlab,с фнч-фвч вроде все понятно.

остановился на полосовике:

кусочек программы:

Fs = 2*pi*1e8;                                     %частота дискретизации        
Wp = 2*pi*[0.5e7 1.5e7]/Fs;                 %полоса пропускания
Ws = 2*pi*[0.45e7 1.55e7]/Fs;
Rp = 0.5;
Rs = 40;

[n,Wn] = ellipord(Wp,Ws,Rp,Rs)
[b,a]= ellip(n,Rp,Rs,Wp);

[h,f]= freqz(b,a);                                  %рис1 АЧХ
plot(f/pi,abs(h))

 

при данных параметрах n = 7 получаем АЧХ

520c6173651eac85343e8a73dbfca9f0.jpg

 

непонятно почему при подаче частоты 10МГЦ на выходе нет ничего, 20-30МГЦ спектр на выходе присутствует

если поставить порядок 20 то получается следующая АЧХ:

f98ae71447384c9226c8e65ecbd3f500.jpg

 

не подскажете где я не прав?что нужно почитать?

 

полный код

 Fs = 2*pi*1e8;
Wp = 2*pi*[0.50e7 1.50e7]./Fs;           %полоса пропускания
Ws = 2*pi*[0.45e7 1.55e7]./Fs;
Rp = 0.5;
Rs = 40;

T = 1/Fs;                                            % Период дескретизации
L = 10000;                                         % Длинна сигнала
t = (0:L-1)*T;                                     % Вектор времени

[n,Wn] = ellipord(Wp,Ws,Rp,Rs)
[b,a]= ellip(n,Rp,Rs,Wp);
[h,w]= freqz(b,a);                                %рис1 АЧХ
plot(w/pi,abs(h))

f0 = 1e7;                                            %частота несущей
x = 1*sin(2*pi*f0*t);
figure
plot((1:200),x(1:200))
title('Входной сигнал')
xlabel('Время')

NFFT = 2^nextpow2(L);                       %следующая степень 2 
Y = fft(x,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);         %сетка частот

% график модуля спектра
figure
plot(f,2*abs(Y(1:NFFT/2+1))) 
axis ([0 2*f0 0 1])
title('Модуль спектра x(t)')
xlabel('Частота (Hz)'),
ylabel('|x(f)|')

%s1 = filter(b,a,x);
%figure
%plot(s1)                       %рис 3 сигнал на выходе фильтра

h = impz(b,a);                 %импульсная функция
figure
plot(h)

y = conv(x,h);                 %свертка
figure
plot((1:200),y(1:200))
         
V= fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);              


figure
plot(f,2*abs(V(1:NFFT/2+1))) 
axis ([0 2*f0 0 1])
title('Модуль спектра y(t)')
xlabel('Частота (Hz)')
ylabel('|Y(f)|')

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


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

Я сам недавно стал работать с Matlab, поэтому просто делаю фильтры в Filter Design & Analysis Toll (команда в окне матлаба >> fdatool). А в Вашем коде попробуйте сделать Fs=2Fv ,т.е Fs=2*pi*3e7

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


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

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

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

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

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

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

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

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

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

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