реклама на сайте
подробности

 
 
> Некогерентный обнаружитель: практика применения
sqrt(2)
сообщение Dec 16 2016, 09:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 20-07-16
Пользователь №: 92 633



Здравствуйте. Есть задача обнаружения сигнала известного по форме, но его фаза и амплитуда - неизвестны. Как я понимаю, в таком случае мне нужен некогерентный приемник.

Отсчеты поступают на два согласованных фильтра - у одного импульсная характеристика это зеркально отраженный во времени сигнал, а у второго - мнимая часть от преобразования Гильберта от импульсной характеристики первого фильтра.

Далее выходы обоих фильтров возводятся в квадрат, вычисляется сумма квадратов выходов СФ и от всего этого берется квадратный корень - т.е., детектор огибающей.

И вот тут начинается непонятное. По идее, надо как раз величину этого корня сравнивать с неким порогом. Поскольку в качестве критерия оптимальности используется критерий Неймана-Пирсона, то порог этот определяется исходя из заданной вероятности ложной тревоги (см. картинку).

вероятность ложной тревоги = exp(-(нормированный порог)^2/2).

Как найти нормированный порог - проблем нет (он на картинке обозначен как h0). Вопрос в том, как найти именно порог обнаружения h. Не совсем понимаю, как зная SNR, структуры фильтров, разрядности и тд (особенности архитектуры приемника у себя) определить то, что на картинке обозначено как No и E1. Видимо нужна еще какая-то априорная информация, но скорее всего я не понимаю какую-то простую вещь.

N0 - очевидно, мощность шума в полосе сигнала. Но вот как посчитать энергию, да еще с учетом некой усредненной амплитуды...

Сообщение отредактировал sqrt(2) - Dec 16 2016, 09:12
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sqrt(2)
сообщение Dec 16 2016, 12:42
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 20-07-16
Пользователь №: 92 633



А так получается очень большой порог. На выходе детектора получается 0.33 , а порог - 1.31.

Код
h = flipud(header);  %ИХ фильтра
h_hilbert = hilbert(h);
Y = length(h);
%прохождение сигнала через согласованный фильтр
mf_origin = filter(h,1,input_signal);
mf_origin = mf_origin./Y;
mf_hilbert = filter(imag(h_hilbert),1,input_signal);
mf_hilbert = mf_hilbert./Y;
%детектор
A = sqrt(mf_origin.^2 + mf_hilbert.^2);




Нашел вот что: http://www.mathworks.com/help/phased/examp...l#zmw57dd0e7431

Вроде о том же самом, но формула в итоге другая (или это я считаю её другой): threshold = sqrt(npower*mfgain*snrthreshold);

snrthreshold - это наш нормированный порог h0.

mfgain - усиление, которое дает согласованный фильтр (как я понял, этот множитель здесь для того, чтобы не нормировать выход СФ)

npower - мощность шума.

В целом, вроде похоже, но не очень.

Цитата(andyp @ Dec 16 2016, 14:36) *
Для Вашего случая
sigma_n^2 = 1/16

Кстати, а почему так? Я всю жизнь считал, что дисперсия шума (во всяком случае дисперсия AWGN, на счет остальных шумов не уверен) = спектральная плотность мощности/2. В отечественной литературе принято обозначение для этого дела N0/2, а SNR = 2E/N0, но здесь E - не амплитуда, а энергетическая величина.

Сообщение отредактировал sqrt(2) - Dec 16 2016, 12:43
Go to the top of the page
 
+Quote Post
andyp
сообщение Dec 16 2016, 13:34
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(sqrt(2) @ Dec 16 2016, 15:42) *
А так получается очень большой порог. На выходе детектора получается 0.33 , а порог - 1.31.


Цитата
Нашел вот что: http://www.mathworks.com/help/phased/examp...l#zmw57dd0e7431

Вроде о том же самом, но формула в итоге другая (или это я считаю её другой): threshold = sqrt(npower*mfgain*snrthreshold);

snrthreshold - это наш нормированный порог h0.

mfgain - усиление, которое дает согласованный фильтр (как я понял, этот множитель здесь для того, чтобы не нормировать выход СФ)

npower - мощность шума.

В целом, вроде похоже, но не очень.


Формула та же, просто сомножители под корнем по другому сгруппированы. Для нормировки проще всего подать на вход повторения Вашего header и подобрать нормировочный множитель так, чтобы максимальные пики на выходе детектора были равны 1.
Ну и да, стоит убедиться еще в одной вещи - mean(h)~=mean(h_hilbert)~=0.

Другими словами, проверить, что на выходе Вы имеете распределение Релея в случае отсутствия полезного сигнала и Райса в пиках при его наличии.

Цитата
Кстати, а почему так? Я всю жизнь считал, что дисперсия шума (во всяком случае дисперсия AWGN, на счет остальных шумов не уверен) = спектральная плотность мощности/2. В отечественной литературе принято обозначение для этого дела N0/2, а SNR = 2E/N0, но здесь E - не амплитуда, а энергетическая величина.


Это все игры вокруг односторонней и двусторонней СПМ. Односторонняя вроде по определению равна удвоенной двусторонней для положительных частот. N_0 - обычно односторонняя СПМ. Я с этими 2 всегда путаюсь. Е и у меня - энергетическая величина.

Сообщение отредактировал andyp - Dec 16 2016, 13:35
Go to the top of the page
 
+Quote Post
sqrt(2)
сообщение Dec 16 2016, 14:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 20-07-16
Пользователь №: 92 633



Цитата(andyp @ Dec 16 2016, 16:34) *
Формула та же, просто сомножители под корнем по другому сгруппированы. Для нормировки проще всего подать на вход повторения Вашего header и подобрать нормировочный множитель так, чтобы максимальные пики на выходе детектора были равны 1.
Ну и да, стоит убедиться еще в одной вещи - mean(h)~=mean(h_hilbert)~=0.

Ну допустим пики будут иметь максимальное значение 1, но ведь порог получился 1.31.

Цитата(andyp @ Dec 16 2016, 16:34) *
Ну и да, стоит убедиться еще в одной вещи - mean(h)~=mean(h_hilbert)~=0.

mean(h) ~= 0
mean(h_hilbert) == 0

Короче, похоже дело вот в чем.

Все полученные формулы - они же для одиночного сигнала, по идее. Но у меня сигнал, который я пытаюсь детектировать - это последовательность их 4х импульсов (они не следуют друг за другом периодически, там чуть более сложная структура).

В связи с этим переписал код так:
Код
h = flipud(header);  %ИХ фильтра
h_hilbert = hilbert(h);
Y = length(h);
%прохождение сигнала через согласованный фильтр
mf_origin = filter(h,1,input_signal);
mf_origin = 4.*(mf_origin./Y);
mf_hilbert = filter(imag(h_hilbert),1,input_signal);
mf_hilbert = 4.*(mf_hilbert./Y);
%детектор
A = sqrt(mf_origin.^2 + mf_hilbert.^2);


С указанным вами ранее способом вычисления порога - заработало.

UPD: рано радовался. Пока величина 1/sigma_n^2 не падает резко, то работает. Потом перестает. И для более-менее большой амплитуды тоже не работает.

Сообщение отредактировал sqrt(2) - Dec 16 2016, 14:37
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 01:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016