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

 
 
> Корреляция
inviZ
сообщение Jul 20 2007, 07:48
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 24-02-07
Пользователь №: 25 634



Извиняюсь заранее за глупый вопрос. Опыта в данной сфере - ноль, но так вышло, что необходимо разобраться, и как можно быстрее...
В общем, суть такова - есть BPSK-модулированный сигнал с частотой несущей 4.092Mhz, c частотой дискретизации 40.92 Mhz.
Задача - вычислить корреляцию сигнала с генерируемой псевдошумовой последовательностью (необходимо для "поиска" сигнала).
Проблема в том, что не могу максимально точно отфильтровать постоянную составляющую из соответствующих квадратурных и синфазных составляющих.
Максимум, что у меня получилось - на скриншоте (прямоугольный сигнал - соответствующая последовательность, т.е. в данном случае корреляция должна быть максимальна, но на деле, естественно, этого не происходит, т.к. принятый сигнал искажен). Пробовал разные фильтры - все равно искажения довольно сильные.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
jorikdima
сообщение Jul 20 2007, 08:50
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Может я не особо врубаюсь, но корреляция - это вычисление корреляционного интеграла от 2 последовательностей - опорной и принятой. Вы его вычисляете? Причем тут фильтр и фильтрация постоянной составляющей?
Go to the top of the page
 
+Quote Post
inviZ
сообщение Jul 20 2007, 11:10
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 24-02-07
Пользователь №: 25 634



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

В данном случае, видимо, из-за шума, все значения корреляционной функции очень близки к нулю. Причем без разницы - отфильтровываю ли я значения I и Q или нет - значения корреляционной функции незначительно отличаются при этом. Вот в том и проблема.

Сама реализация корреляции через БПФ правильна - ну тут и не может быть ошибок, три действия...Тем более, что проверялось... Вод код.

Код
clear;
load('signal.mat'); %загружаем сигнал
load('gold.mat');  %загружаем последовательность
fc = 4.092e6; %частота несущей
fs = 10*4.092e6; %частота дискретизации
ts = 1/fs; %время сэмпла
n = fs/1000; %количество сэмплов в одной миллисекунде
nn = [0:n-1]; %номера отсчетов дискр. времени
S = [S(1:n)]; %первая миллисекунда сигнала

expfreq=exp(j*2*pi*fc*ts*nn);
sine = imag(expfreq);        
cosine = real(expfreq);
I = cosine.*S;
Q = sine.*S;

%здесь была фильтрация

IQfreq = fft(I+j*Q);
codefreq = conj(fft(G0));
convcodeIQ = IQfreq.*codefreq';
result = abs(ifft(convcodeIQ))/n;
[peak codephase]=max(result)
codephaseChips = round(1023 - (codephase/40920)*1023)


Сейчас еще нарыл схему (в аттаче). Судя по ней - все верно, в общем-то. Значит проблема все же в фильтрации. До раздела про дискретные фильтры, в общем-то еще не добрался (ЦОС изучаю-то дня три всего)... Если кто подскажет, какой фильтр лучше использовать для этих целей, буду рад. Фильтры вроде фильтров Баттерворта и Чебышева, как я понял, нецелесообразно использовать из-за плохих фазовых, а соответственно и временных характеристик. А дискретного фильтра Бесселя, как я понял, не существует...

Сообщение отредактировал inviZ - Jul 20 2007, 12:08
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
inviZ
сообщение Jul 20 2007, 14:02
Сообщение #4





Группа: Новичок
Сообщений: 7
Регистрация: 24-02-07
Пользователь №: 25 634



UPD.
Скурил раздел учебника по ЦОС про корреляцию, кое что прояснил. Разобрался с корреляцией более-менее теоретически.
Попробовал вычислить корреляцию по традиционной формуле. Все получается нормально, даже на нефильтрованных данных дает результат, очень близкий к ожидаемой оценке.
Не знаю, что и сказать. Почему вычисление корреляции через БПФ и свертку не работает? Где я затупил?
Go to the top of the page
 
+Quote Post
AlexeyT
сообщение Jul 21 2007, 17:42
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-06-07
Пользователь №: 28 207



Камрад, судя по тексту программы (код Голда...), ты работаешь с GPS-сигналами (или я ошибаюсь)? Задачу поиска сигналов конкреных навигационных спутников я в свое время решил, но без преобразования Фурье, а просто временной корреляцией. Если интересно, могу прислать текст программы и оцифрованный файл с GPS-приемника.

Кстати, если не секрет, что у тебя за исходный файл? Каким оборудованием записан?
Go to the top of the page
 
+Quote Post
anton
сообщение Jul 23 2007, 15:28
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 622
Регистрация: 31-07-04
Пользователь №: 422



Сейчас точно не помню но

codefreq = conj(fft(G0)); не нравится попробуй

codefreq = (fft(G0)); если не заработает переверни массив опорной функции codefreq = fft(rot90(rot90(G0)));
Go to the top of the page
 
+Quote Post
shasik
сообщение Jul 24 2007, 06:42
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



1. Точно не помню, но, по-моему, ifft уже нормирует результат на 1/n, поэтому еще раз делить не надо. Это может увеличит амплитуду пика корреляции.

2. Если в процедуре вычисления корреляции Вы абсолютно уверены, значит "сравниваете" разные сигналы. Например, берем N отсчетов двух одинаковых(по форме) сигналов, но у одного период T1, а у другого T2, т.е. сигналы вроде "одинаковые", а на самом деле разные. Проверьте свои сигналы S и G0, одинаковые ли они? Кстати, между делом, если T1=6, а T2=9, то необходимо вычислять корреляцию сигналов длиной 18.

Когда разгадаете эту тайну золотого ключика, расскажите...
Go to the top of the page
 
+Quote Post
Ghost2
сообщение Jul 30 2007, 10:35
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 046



Вот как вычислить ВКФ двух сигналов:

clear all;
close all;

N=512;
%например
signal1=sin((1:N)/(2*pi));
signal2=cos((1:N)/(2*pi+0.5));

corr=xcorr(signal1, signal2);%встроенная в матлаб функция

% то же самое, что и xcorr, только ручками
% результат в 2 раза длиннее исходных сигналов
spectr1=fft(signal1, 2*N);
spectr2=conj(fft(signal2, 2*N));

corr_my=real(ifft(spectr1.*spectr2));
corr_my=[corr_my(N+2:2*N) corr_my(1:N)];

figure(1);
plot(corr);

figure(2);
plot(corr_my);

Сообщение отредактировал Ghost2 - Jul 30 2007, 10:37
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 23:37
Рейтинг@Mail.ru


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