Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 28.10.2013
Сообщений: 36
1

квадратуры и построение корреляционной функции

08.12.2013, 19:13. Показов 3632. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте)
У меня такое задание: мне дали бинарный файл, в котором записан сигнал gps, в котором содержатся сигналы от перечисленных на картинке спутников. Каждая квадратура - 16 бит. Пара квадратур - это одна точка.

Мне нужно построить корреляционную функцию с/а-кода i-ого спутника(сигнал,которого содержится в файле) и сигнала из файла.

Я скачиваю данные из файла таким образом:
Matlab M
1
2
3
file=fopen('rawData.dat','r');
A = fread(file,[1,4092],'int16'); 
fclose(file);
Получается, что каждая ячейка массива А - это одна квадратура, как объединить квадратуры в одну точку? По формуле
https://www.cyberforum.ru/cgi-bin/latex.cgi?A(i)=sqrt({I}^{2}+{Q}^{2})??

Если, да, то в итоге у меня получаются графики, на которых нет четко выделяющегося пика, который я ожидала увидеть

Вопрос: правильно ли я работаю с квадратурным сигналом?


Функция генерации с/а-кода
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function cakod=generatekod(m,n)
nul=zeros(1,1023); 
i=[1 1 1 1 1 1 1 1 1 1]; % исходный код на регистрах
G1=[nul i];% создаю три вектора для будущих последовательностей
G2=[nul i];
m1=zeros(1,1023); 
for t = 1023:-1:1 % в цикле формирую три последовательности длиной 1023: 
   %м-последовательность первого регистра
   % м-последовательность второго регистра, и последовательность - задержка
   % последовательности второго регситра
 d=(G1(t+3)+G1(t+10)); 
 d=mod(d,2);
 G1(t)=d;
 z=G2(t+m)+G2(t+n);
 m1(t)=mod(z,2);
 q=(G2(t+2)+G2(t+3)+G2(t+6)+G2(t+8)+G2(t+9)+G2(t+10));   
 q=mod(q,2);
 G2(t)=q;
end
G1=G1(11:1033);
cakod=mod((m1+G1),2);%получаю код голда сложением двух последовательностей
for i=1:1:1023
    if cakod(i)==0
        cakod(i)=1;
    elseif cakod(i)==1
        cakod(i)=-1;
    end
end
end

Сам скрипт:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear;
clc;
file=fopen('rawData.dat','r');
A = fread(file,[1,4092],'int16'); 
fclose(file);
 
B=zeros(1,2046);
C=zeros(1,2046);
for i=1:1:2046
    B(i)=A(2*i-1);
    C(i)=A(2*i);
    
end
A=sqrt((B.^2)+(C.^2));
 
sp1=generatekod(2,6);
sp11=generatekod(3,4);
sp14=generatekod(7,8);
 
sp1=[sp1 sp1];
q=xcorr(A,sp1);
plot(q)

ссылка на файл: http://anonymousdelivers.us/93759
Миниатюры
квадратуры и построение корреляционной функции   квадратуры и построение корреляционной функции  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2013, 19:13
Ответы с готовыми решениями:

Построение фазового портрета корреляционной функции в Matlab
Здравствуйте! Кто-нибудь может подсказать как для корреляционной функции δх2...

Построить график корреляционной функции
Добрый день! Я только начинаю осваивать матлаб. Надо построить график корреляционной функции Ba(t):...

дисперсия и корреляционной функции
Скажите пожалуйста в каком случае они будут равны

Расчет взаимной корреляционной функции (ВКФ)
Здравствуйте, уважаемые форумчане! Появляется ошибка "Индекс массива является недопустимым для...

3
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
09.12.2013, 11:31 2
Ну у тебя здесь по сути квадратурная модуляция или I/Q data идёт. Суть такова, что твой сигнал дополняют квадратурой, которая есть сигнал, смещенный на 90 градус по фазе. Такие данные обычно идут в пакете последовательно отсчётами сигнал-квадратура. То есть один отсчёт сигнала есть : https://www.cyberforum.ru/cgi-bin/latex.cgi?S = I +i*Q,  Ampl = \sqrt{{I}^{2}+{Q}^{2}}
Надо только понять, какие точно данные записаны в массиве,я взял знакопостоянные инты:
Matlab M
1
2
3
4
5
6
7
8
clear all; close all;
id = fopen('rawData.dat');
Signal = fread(id,'uint16');
Signal = complex(Signal(1:2:end),Signal(2:2:end));
fclose(id);
fft_sig = fft(Signal,8192);
w = -1/2:1/8191:1/2;
plot(w,20.*log10((fftshift(abs(fft(Signal,8192))))))
квадратуры и построение корреляционной функции
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
09.12.2013, 17:10 3
TheMozddra, вы слишком просто представляете себе задачу) На самом деле все несколько сложнее. Вот схема сигнала gps:
квадратуры и построение корреляционной функции

Во первых, ваш сигнал на несущей(даже на двух) значит нужна демодуляция. Я примерно представляю это так(могу ошибаться, не пробовал): умножаете на несущую L1, фильтруете, получаете огибающую. Вам нужна синфазная (действительная) часть, в квадратурной будет P-код. Полученная огибающая содержит навигационные данные, в каждом бите которых содержится 20 чипов C/A кода. Только потом строите свои корреляции.
1
3 / 3 / 0
Регистрация: 28.10.2013
Сообщений: 36
16.12.2013, 13:42  [ТС] 4
добрый вечер спасибо за ответы)
vital792, мне тоже казалось, что так просто все сделать не возможно, я уточнила у преподавателя, он сказал искать корреляцию по теореме о быстрой корреляции через оббратное преобразование Фурье, вот что в итоге получиолось
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clear;
clc;
file = fopen('rawData.dat');
Signal = fread(file,[1,4092],'uint16');
Signal = complex(Signal(1:2:end),Signal(2:2:end));
fclose(file);
 
Signal=[Signal Signal 0 0 0 0];
fft_sig = fft(Signal);
 
sp=generatekod(1,4);
PSP=zeros(1,3073);
PSP=[sp PSP];
fft_PSP=fft(PSP);
 
z_fft=zeros(1,4096);
for i=1:1:4096
z_fft(i) = fft_sig(i).*conj(fft_PSP(i));
end
 
X = ifft(z_fft);
X=abs(X);
plot(X);

Получила какие-то пики теперь с ними нужно разбираться, то ли это, что мне нужно) еще по частоте отстраивать вроде как нужно)
Миниатюры
квадратуры и построение корреляционной функции  
0
16.12.2013, 13:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2013, 13:42
Помогаю со студенческими работами здесь

Реализация случайной последовательности и формирование заданной корреляционной функции.
Здравствуйте, очень нужна ваша помощь! Подскажите, пожалуйста, как в MathLab написать программу,...

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

Демодуляция ЧМ сигнала через квадратуры
Здравствуйте! Куда можно написать свой вопрос по поводу кода, написанного в Xilinx ISE? ...

Алгоритм квадратуры Гаусса–Лежандра
Здравствуйте! Не подскажете алгоритм Квадратуры Гаусса–Лежандра для написания программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru