Рисунок 2.3 – Имитация идеальной АЧХ
Для примера вектор F = [fs fl fl fh fh fe]; Af = [0 0 1 1 0 0]; fs – начальное значение; fe – значение частоты, превышающее значение fh.
%Построение характеристики фильтра в среде матлаб:
in = load('b_filt.mat');
b_filt = in. b_filt;
Af = [0 0 1 1 0 0 0 1 1 0 0];
F = [fls1 flp1 flp1 fhp1 fhp1 fhs1 flp2 flp2 fhp2 fhp2 fhs2];
nf = 1024; % количество точек аппроксимации
[h, w] = freqz(b_filt, 1, nf);
plot(F, Af, 'color', 'r');
hold on;
f = 0:(44100/2)/nf: 44100/2-1;
plot(f, abs(h), 'color', 'b');
hold off;
legend('Идеальный', 'Результат расчета');
Рисунок 2.4 – Характеристика полосового фильтра
Основными функциями для осуществления одномерной линейной дискретной фильтрации в Matlab являются функции filter, filtfilt, fftfilt.
Синтаксис функций фильтрации:
s_out = filter(b_filt, 1, s_in);
s_out = filtfilt(b_filt, 1, s_in);
s_out = fftfilt(b_filt, s_in);
где: b_filt – коэффициенты фильтра; s_in – отсчеты входного сигнала; s_out - результат фильтрации..
Рисунок 2.5 – Результат фильтрации
Программа Matlab для фильтрации сигнала
% Фильтрация сигнала в среде Matlab:
data = load('Data2.txt'); % считывание исходного сигнала из файла
s_in = data;
k = load('b_filt.mat'); % весовые коэффициенты фильтра хранятся в векторе b_filt
s_out =filtfilt(b_filt, 1, s_in); % фильтрация исходного сигнала
subplot(2,1,1), plot(time, data), grid;
hold on
subplot(2,1,1), plot(time, s_out,'r'), grid;
hold off
Y = fft(s_out);
c=305736
f=1/T*(0:c/2-1);
Y=2*abs(Y(1:c/2))/c;
subplot(2,1,2), plot(f, Y), grid;
По спектру отфильтрованного сигнала определить значения максимумов. Занести значения в таблицу 2.3.
Таблица 2.3 – Таблица гармоник отфильтрованного сигнала
№ |
Значение, Гц |
Амплитуда |Y| |
|
1568 |
0.01266 |
|
2105 |
0.01497 |
Алгоритм обнаружения
сигнала основан на сравнении амплитуд
спектральных составляющих отфильтрованного
сигнала с пороговыми значениями (метод
частотной выборки). Коэффициенты фильтра
используются из п. 2.3. Пороговые значения
задаются на основании результатов,
полученных в п.2.3 (таблица 2.3). Для
разработки алгоритма необходимо
заполнить таблицу 3.1, где для каждой
гармоники полезного сигнала указать
значение порога и интервал поиска.
Критерием обнаружения полезного сигнала
будет одновременное наличие во всех
интервалах спектральных составляющих,
удовлетворяющих следующему
соотношению:
,
(3.1)
где:
-
нижний порог,
- верхний
порог,
- значение
амплитуды гармоники с номером .
Значения
и
рассчитываются
на основании значений таблицы
2.3:
,
,
,
(3.2)
где n- количество
значений частот в таблице 2.3.
Таблица 3.1 –Пороговые значения для поиска
№ |
Центральная частота, Гц |
Интервал поиска, Гц |
Пороговое значение |
Пороговое значение |
|
1568 |
1398-1738 |
0.0114 |
0.0139 |
|
2105 |
1935-2275 |
0.0135 |
0.0165 |
На рисунке 3.1 необходимо изобразить алгоритм обнаружения полезного сигнала на основе анализа амплитудного спектра. Алгоритм должен содержать все этапы обработки сигнала: считывание, фильтрацию, поиск максимумов в интервалах, принятие решения.
Рисунок 3.1 – Алгоритм обнаружения полезного сигнала
Начало Начало
Считать
данные из файла массив (fx)
Загрузить
коэффициент фильтра из файла (b_filt.mat)
Выполнить
фильтрация сигнала (fx)
на основании коэффициентов b_filt.
Сохранить результат в переменной
fx_filt
Выполнить
прямое преобразование Фурье над сигналом
fx_filt.
Сохранить полученный спектр в переменной
fft_filt
Выполнить
сравнение частот спектра fft_filt
с заданным набором из таблицы 3.1 (Частота
и амплитуда)
Совпали
ли частоты?
-
+
+
+
Конец Конец
Текст программы для обнаружения полезного сигнала в среде Matlab.
y1=0.01266;
y2=0.01497;
yl1=0.9*y1
yl2=0.9*y2
yh1=1.1*y1
yh2=1.1*y2
Ymax1=max(Y(flp1*T:fhs1*T));
Ymax2=max(Y(flp2*T:fhs2*T));
if Ymax1<yh1 && Ymax1>yl1 && Ymax2<yh2 && Ymax2>yl2
c=('Полезный')
else
c=('Не полезный')
end
c = Полезный
Программа обнаружения сигнала тестируется на выборке фрагментов неизвестных сигналов. Результат проверки по всем фрагментам сводится в таблице 3.2.
Таблица 3.2 – Сводная таблица результатов тестирования алгоритма
Название фрагмента |
Значения |У| гармоник на интервале |
Решение |
|
f1 |
f2 |
||
fx165 |
1,445E-03 |
2,747E-03 |
Не полезный |
fx196 |
3,924E-02 |
4,586E-02 |
Не полезный |
fx236 |
4,745E-04 |
1,066E-04 |
Не полезный |
fx385 |
1,979E-03 |
2,821E-03 |
Не полезный |
fx402 |
6,044E-04 |
4,749E-04 |
Не полезный |
fx422 |
1,586E-03 |
3,320E-04 |
Не полезный |
fx757 |
4,776E-03 |
6,475E-03 |
Не полезный |
fx804 |
4,137E-05 |
2,183E-05 |
Не полезный |
fx808 |
3,531E-03 |
2,502E-03 |
Не полезный |
fx823 |
4,853E-05 |
1,732E-05 |
Не полезный |
fx1198 |
5,133E-05 |
4,465E-05 |
Не полезный |
fx1216 |
5,846E-05 |
6,911E-04 |
Не полезный |
fx1292 |
1,792E-05 |
1,153E-05 |
Не полезный |
fx1489 |
1,993E-04 |
3,394E-05 |
Не полезный |
fx1697 |
3,696E-02 |
2,370E-02 |
Не полезный |
fx1749 |
4,183E-04 |
1,205E-03 |
Не полезный |
fx1836 |
9,219E-03 |
1,441E-02 |
Не полезный |
fx1889 |
5,002E-04 |
1,996E-04 |
Не полезный |
fx2420 |
1,147E-02 |
1,360E-02 |
Полезный |
fx2588 |
3,376E-02 |
1,411E-02 |
Не полезный |
fx3351 |
3,389E-02 |
2,656E-02 |
Не полезный |