- •Исследование параметров случайного процесса
- •Расчет числовых характеристик
- •Спектральный анализ сигнала
- •Выбор метода предварительной обработки сигнала
- •Спецификация требований к фильтрам.
- •Вычисление коэффициентов фильтра.
- •2.3 Реализация фильтра в среде Matlab
- •Разработка алгоритма обнаружения сигнала.
- •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.3.
Рисунок 2.5 – Результат
фильтрации
Программа Matlab для фильтрации сигнала
% Фильтрация сигнала в среде Matlab:
data = load('data9.mat'); % считывание исходного сигнала из файла
s_in = data.X;
fd = data.Fd;
dt =1/fd;
N = length(s_in);
time=0:dt:dt*(N-1);
k = load('b_filt.mat'); % весовые коэффициенты фильтра хранятся в векторе b_filt
%s_out = функция фильтрации; % фильтрация исходного сигнала
k=k.b_filt;
s_out = filtfilt(k,1, s_in);
subplot(2, 1, 1),plot(time, s_in),grid on;
hold on
plot(time, s_out,'color','r')
xlabel('Время,с')
ylabel('Амплитуда,B')
title('Зависимость амплитуда-время');
legend('Исходный сигнал','фильтрованный');
% Фильтрация сигнала в среде Matlab:
data = load('data9.mat'); % считывание исходного сигнала из файла
s_in = data.X;
fd = data.Fd;
dt =1/fd;
T = data.t;
N = length(s_in);
time=0:dt:dt*(N-1);
%T2 = data.T(length(data.T));
f= 1/T * (0:N/2-1);
k = load('b_filt.mat'); % весовые коэффициенты фильтра хранятся в векторе b_filt
k=k.b_filt;
s_out = filtfilt(k,1, s_in); % фильтрация исходного сигнала
Y=fft(s_out);
Y = 2 * abs(Y(1:N/2)) / N;
subplot(2, 1, 2),plot(f, Y),grid on;
xlim([0 9000]);
xlabel('Частота (кГц)');
ylabel('|Y(f)|');
title('Спектр фильтрованного сигнала');
Таблица 2.3 – Таблица гармоник отфильтрованного сигнала
№ |
Значение, Гц |
Амплитуда |Y| |
|
1568 |
0.001309 |
|
2104 |
0.002488 |
|
2734 |
0.002338 |
Разработка алгоритма обнаружения сигнала.
Алгоритм обнаружения сигнала основан на сравнении амплитуд спектральных составляющих отфильтрованного сигнала с пороговыми значениями (метод частотной выборки). Коэффициенты фильтра используются из п. 2.3. Пороговые значения задаются на основании результатов, полученных в п.2.3 (таблица 2.3). Для разработки алгоритма необходимо заполнить таблицу 3.1, где для каждой гармоники полезного сигнала указать значение порога и интервал поиска. Критерием обнаружения полезного сигнала будет одновременное наличие во всех интервалах спектральных составляющих, удовлетворяющих следующему соотношению:
,
(3.1)
где:
-
нижний порог,
- верхний
порог,
- значение
амплитуды гармоники с номером . Значения
и
рассчитываются на основании значений
таблицы 2.3:
,
,
,
(3.2)
где n- количество значений частот в таблице 2.3.
Таблица 3.1 –Пороговые значения для поиска
№ |
Центральная частота, Гц |
Интервал поиска, Гц |
Пороговое значение |
Пороговое значение |
|
1568 |
1398-1738 |
0.0011781 |
0.0014399 |
|
2104 |
1934-2274 |
0.0022392 |
0.0027368 |
|
2734 |
2564-2904 |
0.0021042 |
0.0025718 |
На рисунке 3.1 необходимо изобразить алгоритм обнаружения полезного сигнала на основе анализа амплитудного спектра. Алгоритм должен содержать все этапы обработки сигнала: считывание, фильтрацию, поиск максимумов в интервалах, принятие решения.
Считать
данные из файла массива (fx)
Начало
Загрузить
коэффициент фильтра из файла (b_filt.mat)
Выполнить
фильтрацию сигнала (fx)
на основании коэффициентов b_filt.
Сохранить результат в переменной
fx_filt
Выполнить
прямое преобразование Фурье над сигналом
fx_filt.
Сохранить полученный спектр в переменной
fft_filt
Нет
i<n
Max=Y(i)
X=i
Да
Да
Да
Y>max
Нет
i=i+1
Выполнить
сравнение частот спектра fft_filt
c
заданным набором из табл. 3.1
(частота
и амплитуда)
Нет
Да
X=f
Да
Нет
Не
полезный
Полезный
Конец
Конец
Рисунок 3.1 – Алгоритм обнаружения полезного сигнала
Текст программы для обнаружения полезного сигнала в среде Matlab.
data = load('fx165.mat'); % считывание исходного сигнала из файла
s_in = data.fx;
fd = data.fd;
dt =1/fd;
N = length(s_in);
time=0:dt:dt*(N-1);
T = dt*(N-1)
f = 1/T * (0:N/2-1);
k = load('b_filt.mat'); % весовые коэффициенты фильтра хранятся в векторе b_filt
k=k.b_filt;
s_out = filtfilt(k,1, s_in); % фильтрация исходного сигнала
Y=fft(s_out);
Y = 2 * abs(Y(1:N/2)) / N;
Ymax1=max(Y(fls1*T:fhs1*T));
Ymax2=max(Y(fls2*T:fhs2*T));
Ymax3=max(Y(fls3*T:fhs3*T));
if Ymax1<yh1 && Ymax1>yl1 && Ymax2<yh2 && Ymax2>yl2 && Ymax3<yh3 && Ymax3>yl3
c=('полезный')
else
c=('не полезный')
end
Название фрагмента |
Значение |Y| гармоник на интервале |
Решение |
|||
f1 |
f2 |
f3 |
|||
165 |
0.001072 |
0.002038 |
0.001915 |
+ |
|
196 |
0.02911 |
0.03402 |
0.03893 |
- |
|
236 |
0.000153 |
3.112e-005 |
0.0004241 |
- |
|
385 |
0.001729 |
0.002455 |
0.001514 |
- |
|
402 |
0.0007853 |
0.0003159 |
0.000168 |
- |
|
422 |
0.001874 |
9.539e-005 |
0.0003206 |
- |
|
757 |
0.00368 |
0.006799 |
0.003914 |
- |
|
804 |
3.196e-005 |
2.418e-005 |
2.157e-005 |
- |
|
808 |
0.002814 |
0.002422 |
0.002431 |
- |
|
823 |
4.333e-005 |
2.22e-005 |
2.371e-005 |
- |
|
1198 |
7.063e-006 |
4.425e-006 |
3.611e-006 |
- |
|
1216 |
3.438e-005 |
0.0008435 |
0.001036 |
- |
|
1292 |
1.496e-005 |
1.252e-005 |
5.237e-006 |
- |
|
1489 |
1.1498e-005 |
0.0001619 |
3.833e-005 |
- |
|
1697 |
0.02888 |
0.02535 |
0.03849 |
- |
|
1749 |
0.0003263 |
0.001277 |
0.0003405 |
- |
|
1836 |
0.007239 |
0.01501 |
0.01041 |
- |
|
1889 |
0.0004684 |
3.892e-005 |
0.0006868 |
- |
|
2420 |
0.008507 |
0.01006 |
0.008588 |
- |
|
2588 |
0.02505 |
0.01047 |
0.01538 |
- |
|
3351 |
0.02514 |
0.02002 |
0.0235 |
- |
|
