Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цифровые фильтры
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
zvv
Здравствуйте.
Хочу задать вопрос по проектированию рекурсивных цифровых фильтров.
Нужно спроектировать ФНЧ (любой) с полосой пропускания до 500 герц.
Для этого использую MatLab6.1. С помощью инструмента FDAtool получаю коефициенты фильтра. Проблема заключается в том , что при любой частоте сигнал на выходе равен сигналу на входе. Не могу понять в чем проблема.

Fs = 10000;
t = 1e-6:1e-6:1e-2;

f = 500; %Hz

x = sin(2*pi*t*f);

plot(t,x);
xlabel('Samples(1 sample = 10 us)');
ylabel('Magnitude');
grid on;

a = [6.4889e-2,1.2977e-1,6.4889e-2];
b = [1.1615,-4.21066e-1];

for k = 1:1:Fs;
if(k == 1);
y(1) = a(1)*x(1);
end;
if(k == 2);
y(2) = x(2)*a(1) + x(1)*a(2) + y(1)*b(1);
end;
if(k > 2);
y(k) = x(k)*a(1) + x(k-1)*a(2) + x(k-2)*a(3) + y(k-1)*b(1) + y(k-2)*b(2);
end;

end;

figure;
plot(t,y);
Dr.NoA
Вы пытаетесь обрабатывать отсчеты, взятые с периодом 1 мкс, фильтром, спроектированным на частоту дискретизации 10 кГц.
Попробуйте этот код:
Код
clear
Fs = 10000;

f = 500; %Hz

t = 0:1/Fs:10/f
N = size(t, 2)

x = sin(2*pi*t*f);

plot(t,x);
xlabel('Samples(1 sample = 10 us)');
ylabel('Magnitude');
grid on;

a = [6.4889e-2 1.2977e-1 6.4889e-2];
b = [1.1615 -4.21066e-1];

for k = 1:1:N;
    if(k == 1);
        y(1) = a(1)*x(1);
    end;
    if(k == 2);
        y(2) = x(2)*a(1) + x(1)*a(2) + y(1)*b(1);
    end;
    if(k > 2);
        y(k) = x(k)*a(1) + x(k-1)*a(2) + x(k-2)*a(3) + y(k-1)*b(1) + y(k-2)*b(2);
    end;
end;

figure;
plot(t,y);
zvv
Огромное Вам спасибо, все работает!!!!! smile.gif smile.gif smile.gif smile.gif smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.