Добавил:
Студент, если у тебя есть завалявшиеся работы, то не стесняйся, загрузи их на СтудентФайлс! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работы / ОИФС.docx
Скачиваний:
14
Добавлен:
05.08.2022
Размер:
602.09 Кб
Скачать

2.4 Реализация фильтра в среде Matlab

        Основными функциями для осуществления линейной дискретной фильтрации в Matlab  являются функции filter, fftfilt и  filtfilt. Функция filter реализует обычную одномерную дискретную фильтрацию. Функция fftfilt реализует дискретную фильтрацию с использованием быстрого преобразования Фурье (БПФ) в сочетании с разделением сигнала на блоки. Таким способом могут быть реализованы только нерекурсивные фильтры. Функция filtfilt позволяет компенсировать фазовый сдвиг, вносимый при обычной фильтрации (иными словами, данная функция реализует фильтрацию без внесения временной задержки). Осуществляется это путем двунаправленной обработки сигнала. Первый проход фильтрации осуществляется обычным образом, а затем полученный выходной сигнал фильтруется второй раз - от конца к началу. За счет этого происходит компенсация фазовых сдвигов, а результирующий порядок фильтра увеличивается в два раза.

Основная функций, реализующая дискретную фильтрацию в MATLAB, носит имя filter. В простейших виде она имеет следующий синтаксис:

y=filter(b, a, x);

Здесь b-вектор коэффициентов нерекурсивной части фильтра (числителя функции передачи), а-вектор коэффициентов рекурсивной части фильтра(знаменателя функции передачи), х-входной сигнал.

Результат фильтрации с помощью функций s_out = fftfilt(b_filt, s_in) представлен на рисунке 2.4.

Рисунок 2.4 – Результат фильтрации

По спектру отфильтрованного сигнала определены значения максимумов и занесены в таблицу 2.3.

Таблица 2.3 – Таблица гармоник отфильтрованного сигнала

Амплитуда, |Y|

Значение, Гц

f1

0,038

1568

f2

0,041

2105

Программа для фильтрация сигнала и построения графика спектра отфильтрованного сигнала в среде Matlab представленного на рис 2.4

fx=load('Data4.txt');

N=length(fx);

save('fx.mat')

data = load('fx.mat'); % считывание исходного сигнала из файла

s_in = data.fx;

fd=44100;

dt=1/fd;

T=dt*(N-1);

x=0:dt:T;

k = load('b_filt.mat'); % весовые коэффициенты фильтра хранятся в векторе b_filt

s_out =filter(k.b_filt,1,s_in); % фильтрация исходного сигнала

subplot(2,1,1),plot(x,fx);

xlabel('Время,с')

ylabel('Амплитуда,В')

title ('Результат фильтрации');

hold on

subplot(2,1,1),plot(x,s_out,'r');

legend('Исходный сигнал', 'Отфильтрованный сигнал');

grid;

Y = fft(s_out); % Преобразование Фурье

f = 1/T * (0:N/2-1); % Ось частот

Y = 2 * abs(Y(1:N/2)) / N; % Модуль |Y|

subplot(2,1,2),plot(f,Y);grid;

xlim([0 10000]);

ylim([0 0.03]);

xlabel('Частота, Гц');

ylabel('|Y|');

title ('Спектр отфильтрованного сигнала');

В данном пункте получен результат фильтрации с помощью функци [filter]. Далее был получен спектр отфильтрованного сигнала, на котором изображены полезные гармоники.

Соседние файлы в папке Работы