Материал: курсач ОиФС НК (чистовик)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рисунок 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 – Характеристика полосового фильтра

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

Основными функциями для осуществления одномерной линейной дискретной фильтрации в 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

3 Разработка алгоритма обнаружения сигнала

Алгоритм обнаружения сигнала основан на сравнении амплитуд спектральных составляющих отфильтрованного сигнала с пороговыми значениями (метод частотной выборки). Коэффициенты фильтра используются из п. 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

Не полезный

Источник: https://studfile.net/preview/16692680/