Расчет значений отклонения в полосе пропускания p и отклонение в полосе подавления s по формулам (2.3) занесён в таблицу 2.2.
,
(2.3)
Таблица 2.2– Значения отклонений в полосе пропускания и подавления
|
|
0,07151 |
0,003162 |
Стандартный КИХ-фильтр характеризуется следующими уравнениями:
|
(2.4, а) |
|
(2.5, б) |
где
-
коэффициент фильтра,k-номер
фильтра,n-номер
массива
Для
расчета необходимо сформировать вектор
частотной характеристики
,
вектор коэффициентов передачи
в частотной области, вектор допустимых
отклонений
амплитудно-частотной характеристики
фильтра от заданной.
Вектор формируется по значениям из таблицы 2.1 в следующем виде:
.
Вектор коэффициентов передачи строится на основе таблицы 1.2:
.
Вектор коэффициентов отклонений строится на основе таблицы 2.2:
.
Для оценки требуемого порядка фильтра в среде Matlab используется функция firpmord.
Функции firpmord позволяет найти приблизительный порядок фильтра, границы полосы частот, на основе входных данных.
Для синтеза фильтра используется функция firpm.
Функции firpm позволяет рассчитать необходимые характеристики фильтров и построить АЧХ фильтра, представленного ниже.
Текст программы Matlab для расчета коэффициентов фильтра и построения графиков на рисунках 2.2. % Расчет коэффициентов фильтра в среде Matlab: fp=60; fs=110; f1=2658; f2=4772; fpl1=f1-fp; fph1=f1+fp; fsl1=fpl1-fs; fsh1=fs+fph1; fpl2=f2-fp; fph2=f2+fp; fsl2=fpl2-fs; fsh2=fs+fph2; As=50; Ap=0.6; sigma_p=(10^(Ap/20)) - 1; sigma_s=10^(-As/20); F=[fsl1 fpl1 fph1 fsh1 fsl2 fpl2 fph2 fsh2]; A = [0 1 0 1 0 ]; D=[sigma_s sigma_p sigma_s sigma_p sigma_s ]; [n, F0, A0, W] = firpmord(F, A, D, 44100); b_filt = firpm(n, F0, A0, W); % Построение графика АЧХ фильтра: freqz(b_filt, 1, 1024, 44100); % Сохранение коэффициентов фильтра: save('b_filt.mat', 'b_filt'); |
АЧХ и ФЧХ фильтра представлены на рисунке 2.2.
Рисунок 2.1 – АЧХ и ФЧХ фильтра
Для построения идеальной характеристики фильтра используются полученные ранее значения векторов F, b. Дополнительно создается вектор Af – имитирует АЧХ идеального фильтра.
Вектор
F = [
];
Вектор Af = [0 0 1 1 0 0 1 1 0];
где fs – начальное значение; fe – значение частоты, превышающее значение fh.
in = load('b_filt.mat'); b_filt = in. b_filt; Af = [0 0 1 1 0 0 1 1 0 0]; F = [fsl1 fpl1 fpl1 fph1 fph1 fpl2 fpl2 fph2 fph2 fsh2]; 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'); title ('Характеристика полосового фильтра'); xlabel ('Частота,Гц'); ylabel ('Коэффициент пропускания'); xlim( [0 5000] ); hold off; legend('Идеальный', 'Результат расчета'); |
Рисунок 2.2 – Характеристика полосового фильтра
Результат фильтрации с помощью функции
s_out =filter(b_filt,1,s_in) представлен на рисунке 2.5, где: b_filt – коэффициенты фильтра; s_in – отсчеты входного сигнала; s_out - результат фильтрации.
Рисунок 2.3 – Результат фильтрации
Текст программы для фильтрации сигнала в среде Matlab и построение графиков на рисунке 2.5. fx=load('Data8.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 60000]); xlabel('Частота, Гц'); ylabel('|Y|'); title ('Спектр отфильтрованного сигнала'); |
По спектру отфильтрованного сигнала определяется значения максимумов. Занести значения в таблицу 2.3.
Таблица 2.3 – Таблица гармоник отфильтрованного сигнала
№ |
Значение, Гц |
Амплитуда |
f1 |
2658 |
0,001265 |
f2 |
4772 |
0,002217 |
Критерием обнаружения полезного сигнала будет одновременное наличие во всех интервалах спектральных составляющих, удовлетворяющих заданному соотношению:
, (3.1)
где:
нижний порог;
верхний порог;
значение гармоники с номером i.
Значения
и
рассчитываются на основании значений
таблицы 2.3:
(3.2)
где
количество
значений частот в таблице 2.3.
Таблица 3.1 –Пороговые значения для поиска
№ |
Центральная частота, Гц |
Интервал поиска, Гц |
Пороговое
значение
|
Пороговое
значение
|
f1 |
2658 |
2558-2758 |
0,0011385 |
0,0013915 |
f2 |
4772 |
4672-4872 |
0,0019953 |
0,0024387 |
Начало
Фильтрация
сигнала
Расчёт
спектра с помощью дискретного
преобразования Фурье
Поиск
максимумов в интервалах
Полезный
сигнал обнаружен
Полезный
сигнал не обнаружен
Да
Нет
Загрузка
данных
Конец
Рисунок 3.1 – Алгоритм обнаружения полезного сигнала
Текст программы для обнаружения полезного сигнала в среде Matlab. Y1l=0.0011385; Y1h=0.0013915; Y2l=0.0019953; Y2h=0.0024387; data = load('fx165.mat'); k = load('b_filt.mat'); fd=44100; s_in = data.fx; s_out =filter(k.b_filt,1,s_in); N = length(s_in); dt=1/fd; T=dt*(N-1); Y = fft(s_out); Y = 2 * abs(Y(1:N/2)) / N; fl1=round(2558*T); fh1=round(2758*T); fl2=round(4672*T); fh2=round(4872*T); Ym1=max(Y(round(2558*T):round(2758*T))); Ym2=max(Y(round(4672*T):round(4872*T))); if Y1l<Ym1 && Ym1<Y1h && Y2l<Ym2 && Ym2<Y2h res = 1; else res=0; end |
Программа обнаружения сигнала тестируется на выборке фрагментов неизвестных сигналов. Результат проверки по всем фрагментам записан в таблице 3.2.
Таблица 3.2 – Сводная таблица результатов тестирования алгоритма
Название фрагмента |
Значения гармоник на интервале |
Решение |
|
f1 |
f2 |
||
Fx165 |
0.0017 |
1.0576e-05 |
0 |
Fx196 |
0.0347 |
3.9334e-04 |
0 |
Fx236 |
3.4981e-04 |
3.5173e-04 |
0 |
Fx385 |
8.6548e-04 |
2.8178e-05 |
0 |
Fx402 |
0.0012 |
5.7420e-04 |
0 |
Fx422 |
2.9091e-04 |
2.6666e-04 |
0 |
Fx757 |
0.0036 |
6.7661e-04 |
0 |
Fx804 |
2.5749e-05 |
1.6421e-05 |
0 |
Fx808 |
0.0022 |
4.9610e-05 |
0 |
Fx823 |
2.2431e-05 |
1.0428e-05 |
0 |
Fx1198 |
3.1755e-06 |
2.5006e-06 |
0 |
Fx1216 |
0.0013 |
0.0022 |
1 |
Fx1292 |
5.7560e-06 |
4.6923e-06 |
0 |
Fx1489 |
3.5012e-05 |
3.8655e-04 |
0 |
Fx1697 |
0.0358 |
8.9879e-04 |
0 |
Fx1749 |
3.1434e-04 |
3.3142e-04 |
0 |
Fx1836 |
0.0096 |
8.8891e-04 |
0 |
Fx1889 |
2.7640e-04 |
7.9296e-04 |
0 |
Fx2420 |
0.0075 |
2.9180e-04 |
0 |
Fx2588 |
0.0135 |
3.5809e-05 |
0 |
Fx3351 |
0.0204 |
2.1202e-04 |
0 |