Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
1

Формирование сигнала QPSK

22.02.2019, 10:06. Просмотров 6338. Ответов 57
Метки нет (Все метки)

Здравствуйте, коллеги!
У меня bpsk все получилось.
Хотел переход на сигнал qpsk.
Как Я понимал задачу следующим образом. cигнал qpsk имеет вид:
Matlab M
1
=Acos(2*pi*f*t+phi)=Acos(phi)cos(2*pi*f*t)-Asin(phi)sin(2*pi*f*t)=ichanel+qchanel
Зададим данные (биты), делить на I и Q канал, I нечетные, Q четные. Потом формировать I*cos и Q*sin. Конец сумма двух каналов.
Результаты не как скажется.
Скажите, пожалуйста!
Где Я не понимал до конца.
В программа где была ошибка?
Спасибо Вам!
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
clc
clear all
close all
N = 10000; % длина последовательности
a= randint(1,N); % случайные данные биты
I = a(1:2:end);% нечетные биты
Q = a(2:2:end);% четные биты
fc = 10; % часота несущего колебания
fz = 2; % частота символов 
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
M = fd/fz; % количество отсчетов на бит
I = repmat(I,1,M); % повторяем последовательность по строкам
Q=repmat(Q,1,M); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0:td:(N/fz-td)/2; % массив времени
ichanel=I.*cos(2*pi*fc*t); %I канал
qchanel=-Q.*sin(2*pi*fc*t); %Q канал
s=ichanel+qchanel;%сумма I канал+Q канал
figure
subplot(2,1,1);
plot(t,I,'linew',1);
title('I(t)');
ylim([-0.1 1.1])
hold on
subplot(2,1,2);
plot(t,Q,'linew',1);
title('Q(t)');
ylim([-0.1 1.1])
grid on
figure
subplot(2,1,1);
plot(t,ichanel);
title('ichanel');
hold on
subplot(2,1,2);
plot(t,qchanel);
title('qchanel');
grid on
figure
plot(t,s);
title('Signal QPSK');
grid on
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2019, 10:06
Ответы с готовыми решениями:

Формирование сигнала с t=0
Вроде все понятно, но из-за того что t от 0, то все ломается, подскажите что не так. ...

Формирование Фмн сигнала,выручайте
clear; clc; x = ; % начальная комбинация M15 = x; n = length(x); N = 2^n - 1; for i= n+1:N...

Формирование ФМ2 сигнала
.Добрый день. Знаю, что вопрос избитый, но все равно не могу разобраться. Помогите, пожалуйста....

Вычисление максимума амплитудного спектра QPSK-сигнала
Подскажите как вычсилить максимум амплитудного спектра сигнала, после QPSK/BPSK модуляции?

57
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
22.02.2019, 12:30 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
clear; clc;
 
N = 10000; % длина последовательности
a = randi([0 1],[1 N]); % случайные данные биты
I = a(1:2:end);% нечетные биты
Q = a(2:2:end);% четные биты
fc = 10; % часота несущего колебания
fz = 2; % частота символов 
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2 * M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2 * M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
I(I == 0) = -1;
Q(Q == 0) = -1;
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I .* cos(2 * pi * fc * t); % I канал
qchanel = -Q .* sin(2 * pi * fc * t); % Q канал
s = ichanel + qchanel; % сумма I канал+Q канал
 
a = repmat(a, M, 1);
figure
subplot(3, 1, 1);
plot(t, a(:), 'linew', 1);
title('a');
ylim([-0.1 1.1])
hold on
grid on
subplot(3, 1, 2);
plot(t, I, 'linew', 1);
title('I(t)');
ylim([-1.1 1.1])
hold on
grid on
subplot(3, 1, 3);
plot(t, Q, 'linew', 1);
title('Q(t)');
ylim([-1.1 1.1])
grid on
 
figure
subplot(2, 1, 1);
plot(t, ichanel);
title('ichanel');
hold on
subplot(2, 1, 2);
plot(t, qchanel);
title('qchanel');
grid on
 
figure
plot(t, s);
title('Signal QPSK');
grid on
2
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
22.02.2019, 12:50  [ТС] 3
АлександрКом,
Большое спасибо Вам за помощь!
Я студент Вьетнама. Учусь в МИРЭА. Хочу начинать моделировать на Матлабе. но у меня мало опыта. Буду стараться.
Желаю Вам всего хорошего!
С уважением, Зунг.

АлександрКом,
Я подумал и посмотрел наш результат.
Думаю, правильно надо формировать сигнал QPSK c кодированием по Грею. и в требовании так надо.
например, Кодирование Грея - это соответствие по фазе: данные 00 - фаза 0, данные 01 - фаза пи/2. данные 11 - фаза пи, данные 10 - фаза 3пи/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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
clc
close all
clear all
 
N = 10; % длина последовательности
a = randi([0 1],[1 N]); % случайные данные биты
I = a(1:2:end);% нечетные биты
Q = a(2:2:end);% четные биты
fc = 10; % часота несущего колебания
fz = 2; % частота символов 
fd = 10*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2 * M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2 * M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
for n=1:2:length(a);
    if a(n)==1 && a(n+1)==1;
        I=sqrt(2)/2*ones(1,500);
        Q=sqrt(2)/2*ones(1,500);
    end
    if a(n)==0 && a(n+1)==1;
        I=-sqrt(2)/2*ones(1,500);
        Q=-sqrt(2)/2*ones(1,500);
    end
     if a(n)==1 && a(n+1)==0;
        I=-sqrt(2)/2*ones(1,500);
        Q=sqrt(2)/2*ones(1,500);
     end
     if a(n)==0 && a(n+1)==0;
        I=-sqrt(2)/2*ones(1,500);
        Q=-sqrt(2)/2*ones(1,500);
     end
     if a(n)==1 && a(n+1)==0;
        I=sqrt(2)/2*ones(1,500);
        Q=-sqrt(2)/2*ones(1,500);
     end
end
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel = -Q .* sin(2 * pi * fc * t); % Q канал
s = ichanel + qchanel; % сумма I канал+Q канал
 
a = repmat(a, M, 1);
figure
subplot(3, 1, 1);
plot(t, a(:), 'linew', 1);
title('a');
ylim([-0.1 1.1])
hold on
grid on
subplot(3, 1, 2);
plot(t, I, 'linew', 1);
title('I(t)');
ylim([-1.1 1.1])
hold on
grid on
subplot(3, 1, 3);
plot(t, Q, 'linew', 1);
title('Q(t)');
ylim([-1.1 1.1])
grid on
 
figure
subplot(2, 1, 1);
plot(t, ichanel);
title('ichanel');
ylim([-1.1 1.1])
hold on
grid on
subplot(2, 1, 2);
plot(t, qchanel);
title('qchanel');
ylim([-1.1 1.1])
grid on
 
figure
plot(t, s);
title('Signal QPSK');
ylim([-2 2])
grid on


АлександрКом,
Я старался писать и получил результаты.
Надо ли что изменить в программе?
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
clc
close all
clear all
A0=1;
N=8;
N_symbols=N/2;
b=[0 0 0 1 1 1 1 0];
fc = 2; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
s = ichanel + qchanel; % сумма I канал+Q канал
figure
plot(t,s);
grid on
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
25.02.2019, 12:03 4
Лучший ответ Сообщение было отмечено Нгуен Ван Зунг как решение

Решение

Нгуен Ван Зунг, вроде бы, нет, всё правильно
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
25.02.2019, 12:14  [ТС] 5
АлександрКом,
Спасибо Вам!
С уважением, Зунг.

АлександрКом,
Здравствуйте, АлександрКом!
Я старался писать программу когерентного демодулятора для QPSK. Я писал, как Я понимал, это легче.
Формировал 4 опорных сигналов cos(omega*t), cos(omega*t+pi/2), cos(omega*t+pi), cos(omega*t+3*pi/2).
Осуществил умножение каждого опорного сигнала с формированным сигналом.
Осуществил накопление, найти максимум из 4 умножения в каждом канального символа.
и если максимум на первом опорном сигнале, то соответствуют биты 0 0, на втором опорном сигнале то 0 1,...
В программе Я выключил шум и помеху, то есть шум и помеха на влияют на ошибку приема данных.
Но результат не кажется.
Вы можете посмотреть мою программу?
Подскажите, пожалуйста! Где не правильно писать в программе?
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
clc
close all
clear all
A0=1;
N = 8; % длина последовательности
b = [0 0 0 1 1 1 1 0]; % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=0;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/ 6000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
% 
for i=1:N.*fd;
    n=fix(i/fd)+1;
    ii=i-fix(i/fd).*fd+1;
    S31(n,ii)=S3(i);
    S41(n,ii)=S4(i);
    S51(n,ii)=S5(i);
    S61(n,ii)=S6(i);
    S71(n,ii)=S7(i);
end
for n=1:length(b)/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:fd;
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        SS66(n)=SS66(n)+S31(n,ii).*S61(n,ii);
        SS77(n)=SS77(n)+S31(n,ii).*S71(n,ii);
        j=(n-1).*fd+ii;
        Sp4(j)=SS44(n);
        Sp5(j)=SS55(n);
        Sp6(j)=SS66(n);
        Sp7(j)=SS77(n);     
    end  
    d1=b(2*n);
    d2=b(2*n-1);
    
    % Выбрать максимума в каждом символе и какие биты на выходе
    if SS44(n)>SS55(n) & SS44(n)>SS66(n) & SS44(n)>SS77(n);
    d1(n)=0;
    d2(n)=0;
    elseif SS55(n)>SS44(n) & SS55(n)>SS66(n) & SS55(n)>SS77(n);
     d1(n)=0;
     d2(n)=1;  
    elseif SS66(n)>SS44(n) & SS66(n)>SS55(n) & SS66(n)>SS77(n);
     d1(n)=1;
     d2(n)=1; 
    elseif SS77(n)>SS44(n) & SS77(n)>SS55(n) & SS77(n)>SS66(n);
     d1(n)=1;
     d2(n)=0;   
    end
end
 figure
 subplot(4,1,1);
 plot(Sp4);
 title('опорный сигнал cos(2*pi*fc*t)');
 grid on
 hold on
 subplot(4,1,2);
 plot(Sp5);
 title('опорный сигнал cos(2*pi*fc*t+pi/2)');
 grid on
 hold on
 subplot(4,1,3);
 plot(Sp6);
 title('опорный сигнал cos(2*pi*fc*t+pi)');
 grid on
 hold on
 subplot(4,1,4);
 plot(Sp7);
 title('опорный сигнал cos(2*pi*fc*t+3*pi/2)');
 grid on
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
27.02.2019, 11:55 6
Лучший ответ Сообщение было отмечено Нгуен Ван Зунг как решение

Решение

Нгуен Ван Зунг, посмотрите:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
clear; clc;
 
A0 = 1;
N = 8; % длина последовательности
b = [0 0 0 1 1 1 1 0]; % случайные данные 
fc = 10; 
fz = 1; 
fd = 20 * fc; 
td = 1 / fd; 
 
for n = 1 : length(b)/2
    p = b(2 * n);
    imp = b(2 * n - 1);
    if imp == 0 && p == 0
        I(n) = 1;
        Q(n) = 0;
    elseif imp == 0 && p == 1
        I(n) = 0;
        Q(n) = 1;
     elseif imp == 1 && p == 1
        I(n) = -1;
        Q(n) = 0;
     elseif imp == 1 && p == 0
        I(n) = 0;
        Q(n) = -1;
    end
end
 
M = fd / fz; % количество отсчетов на бит
I = repmat(I, 2 * M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2 * M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel = -Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma = 5;
noise = sigma .* randn(1, length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0.5;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/ 6000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Формировать опорные сигналы
S4 = cos(2*pi*fc*t);
S5 = cos(2*pi*fc*t + pi/2);
S6 = cos(2*pi*fc*t + pi);
S7 = cos(2*pi*fc*t + 3*pi/2);
 
% Когерентный приемник
SS4 = S3 .* S4;
SS5 = S3 .* S5;
SS6 = S3 .* S6;
SS7 = S3 .* S7;
 
for i = 1 : numel(b)/2
    SS44 = sum(SS4( (i - 1) * 2 * M + 1 : i * 2 * M ));
    SS55 = sum(SS5( (i - 1) * 2 * M + 1 : i * 2 * M ));
    SS66 = sum(SS6( (i - 1) * 2 * M + 1 : i * 2 * M ));
    SS77 = sum(SS7( (i - 1) * 2 * M + 1 : i * 2 * M ));
    
    [~, ww] = max([SS44 SS55 SS66 SS77]);
    switch ww
        case 1
            d( i * 2 - 1 : i * 2 ) = [0 0];
        case 2
            d( i * 2 - 1 : i * 2 ) = [0 1];
        case 3
            d( i * 2 - 1 : i * 2 ) = [1 1];
        case 4
            d( i * 2 - 1 : i * 2 ) = [1 0];
    end         
end


Добавлено через 28 минут
Для вашего случая (с кодированием по Грею) можно сделать ещё так:
Кликните здесь для просмотра всего текста
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
% Формировать опорные сигналы
SI = cos(2*pi*fc*t);
SQ = -sin(2*pi*fc*t);
 
% Когерентный приемник
SSI = S3 .* SI;
SSQ = S3 .* SQ;
 
for i = 1 : numel(b)/2
    SSII = sum(SSI( (i - 1) * 2 * M + 1 : i * 2 * M ));
    SSQQ = sum(SSQ( (i - 1) * 2 * M + 1 : i * 2 * M ));
    
    [~, ww] = max(abs([SSII SSQQ]));
    
    switch ww
        case 1
            if round(SSII) > 0
                c( i * 2 - 1 : i * 2 ) = [0 0];
            elseif round(SSII) < 0
                c( i * 2 - 1 : i * 2 ) = [1 1];
            end
        case 2
            if round(SSQQ) > 0
                c( i * 2 - 1 : i * 2 ) = [0 1];
            elseif round(SSQQ) < 0
                c( i * 2 - 1 : i * 2 ) = [1 0];
            end
    end
end
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
27.02.2019, 17:00  [ТС] 7
АлександрКом,
Я благодарю Вас за помощь!
Все так, как мне нужно. ваша программа очень красивая и более понятно.
Желаю Вам всего хорошего!
С уважением, Зунг.

Добавлено через 5 часов 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
clc
close all
clear all
A0=1;
N = 1080; % длина последовательности
b = randint(1,N); % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=5;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/1200));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
 
% Создать массив 
for i=1:N.*fd;
    n=fix(i/fd/2)+1;
    ii=i-fix(i/fd).*fd+1;
    S31(n,ii)=S3(i);
    S41(n,ii)=S4(i);
    S51(n,ii)=S5(i);
    S61(n,ii)=S6(i);
    S71(n,ii)=S7(i);
end
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:fd;
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        SS66(n)=SS66(n)+S31(n,ii).*S61(n,ii);
        SS77(n)=SS77(n)+S31(n,ii).*S71(n,ii);
        j=(n-1).*fd+ii;
        Sp4(j)=SS44(n);
        Sp5(j)=SS55(n);
        Sp6(j)=SS66(n);
        Sp7(j)=SS77(n);     
    end  
    % Максимальное значение и индекс канального символа
    [val(n),index(n)] = max([SS44(n) SS55(n) SS66(n) SS77(n)]);
    val(n);
    index(n);
    switch index(n)
        case 1
            d(n*2-1:n*2)=[0 0];
        case 2
            d(n*2-1:n*2)=[0 1];
        case 3
            d(n*2-1:n*2)=[1 1];
        case 4
            d(n*2-1:n*2)=[1 0];
    end
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
27.02.2019, 18:44 8
Нгуен Ван Зунг, поправил кое-что (если только правильно понял, что вы имели в виду)
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
clc
close all
clear all
A0=1;
N = 1080; % длина последовательности
b = randi(1,1,N); % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=5;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/1200));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
 
% Создать массив 
S31 = reshape(S3, 2*fd, N/2)';
S41 = reshape(S4, 2*fd, N/2)';
S51 = reshape(S5, 2*fd, N/2)';
S61 = reshape(S6, 2*fd, N/2)';
S71 = reshape(S7, 2*fd, N/2)';
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:2*fd
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        SS66(n)=SS66(n)+S31(n,ii).*S61(n,ii);
        SS77(n)=SS77(n)+S31(n,ii).*S71(n,ii);   
    end  
    % Максимальное значение и индекс канального символа
    [val(n),index(n)] = max([SS44(n) SS55(n) SS66(n) SS77(n)]);
    val(n);
    index(n);
    switch index(n)
        case 1
            d(n*2-1:n*2)=[0 0];
        case 2
            d(n*2-1:n*2)=[0 1];
        case 3
            d(n*2-1:n*2)=[1 1];
        case 4
            d(n*2-1:n*2)=[1 0];
    end
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
27.02.2019, 18:59  [ТС] 9
АлександрКом,
Большое спасибо Вам!
Как так Я хотел получить.
Только один вопрос, Как написать вывода на графиках многократное накопление сигнала в обоих программах? (пример рисунок снизу)
Помогите, пожалуйста!
С уважением, Зунг.

АлександрКом,
Я писал цикл для накопления сигналов.
Попрошу Вас, посмотрите, пожалуйста! все правильно или нет?
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
clc
close all
clear all
A0=1;
N = 1080; % длина последовательности
b = randint(1,N); % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=0;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/1200));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
 
% Создать массив 
S31 = reshape(S3, 2*fd, N/2)';
S41 = reshape(S4, 2*fd, N/2)';
S51 = reshape(S5, 2*fd, N/2)';
S61 = reshape(S6, 2*fd, N/2)';
S71 = reshape(S7, 2*fd, N/2)';
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:2*fd
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        SS66(n)=SS66(n)+S31(n,ii).*S61(n,ii);
        SS77(n)=SS77(n)+S31(n,ii).*S71(n,ii); 
        m=2.*(n-1).*fd+ii;
        Sp4(m)=SS44(n);
        Sp5(m)=SS55(n);
        Sp6(m)=SS66(n);
        Sp7(m)=SS77(n);
    end  
    % Максимальное значение и индекс канального символа
    [val(n),index(n)] = max([SS44(n) SS55(n) SS66(n) SS77(n)]);
    val(n);
    index(n);
    switch index(n)
        case 1
            d(n*2-1:n*2)=[0 0];
        case 2
            d(n*2-1:n*2)=[0 1];
        case 3
            d(n*2-1:n*2)=[1 1];
        case 4
            d(n*2-1:n*2)=[1 0];
    end
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
figure
subplot(4,1,1);
plot(Sp4);
grid on
hold on
subplot(4,1,2);
plot(Sp5);
grid on
hold on
subplot(4,1,3);
plot(Sp6);
grid on
hold on
subplot(4,1,4);
plot(Sp7);
grid on
0
Миниатюры
Формирование сигнала QPSK  
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
28.02.2019, 11:10 10
Цитата Сообщение от Нгуен Ван Зунг Посмотреть сообщение
Попрошу Вас, посмотрите, пожалуйста! все правильно или нет?
Да, правильно. Вот другой вариант:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
clc
close all
clear all
A0=1;
N = 10; % длина последовательности
b = randi([0 1],1,N); % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=0;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*fc*t + (2*pi/360) * fix((1:numel(S1))/1200));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
 
% Создать массив 
S31 = reshape(S3, 2*fd, N/2)';
S41 = reshape(S4, 2*fd, N/2)';
S51 = reshape(S5, 2*fd, N/2)';
S61 = reshape(S6, 2*fd, N/2)';
S71 = reshape(S7, 2*fd, N/2)';
 
SS44 = zeros(2*fd, N/2);
SS55 = SS44;
SS66 = SS44;
SS77 = SS44;
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:2*fd
        SS44(ii, n) = S31(n,ii) .* S41(n,ii);
        SS55(ii, n) = S31(n,ii) .* S51(n,ii);
        SS66(ii, n) = S31(n,ii) .* S61(n,ii);
        SS77(ii, n) = S31(n,ii) .* S71(n,ii);   
    end  
    % Максимальное значение и индекс канального символа
    [val(n),index(n)] = max([sum(SS44(:, n)) sum(SS55(:, n)) sum(SS66(:, n)) sum(SS77(:, n))]);
    val(n);
    index(n);
    switch index(n)
        case 1
            d(n*2-1:n*2)=[0 0];
        case 2
            d(n*2-1:n*2)=[0 1];
        case 3
            d(n*2-1:n*2)=[1 1];
        case 4
            d(n*2-1:n*2)=[1 0];
    end
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
 
SS44 = cumsum(SS44);
SS55 = cumsum(SS55);
SS66 = cumsum(SS66);
SS77 = cumsum(SS77);
 
subplot(4,1,1);
plot(t, SS44(:));
 
subplot(4,1,2);
plot(t, SS55(:));
 
subplot(4,1,3);
plot(t, SS66(:));
 
subplot(4,1,4);
plot(t, SS77(:));
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
28.02.2019, 13:16  [ТС] 11
АлександрКом,
Большое спасибо Вам!
Благодаря Вашей помощи, Я закончил и получил с сигналом BPSK и QPSK.
Я перехожу на сигнал 8-PSK, Я стараюсь все писать для формирования и приема 8-PSK.
Потом, попрошу Вас, проверите, пожалуйста!
С уважением, Зунг.

АлександрКом,
Здравствуйте, АлександрКом!
Прием сигналов 2-ФМ, 4-ФМ и 8-ФМ при наличии гармонической помехи. все получил красивые графики вероятности ошибки.
Я перехожу на прием сигналов 2-ФМ, 4-ФМ и 8-ФМ при наличии ретранслированной помехи.
Ретранслированная помеха - это тоже зондирующий сигнал (сигнал 2-ФМ, 4-ФМ и 8-ФМ ) на задержать на времени с случайной фазой.
У нас есть длительность символа Ts. Я хочу задержать сигнал на 0.1Ts и 0.5Ts.
Скажите, пожалуйста! Как это осуществить?
Я закрепляю Вам программу прием 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
clear all
clc
close all 
% cигнал М-ФМ
A0=1;
N = 108000; % длина последовательности
z = randint(1,N); % случайные данные 
fc =10; % часота несущего колебания
fz = 1; % частота символов 
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
t = 0:td:N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(z,M,1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma=5;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0.1;
S2 = m.*A0.*sin(2*pi*(fc+2.866)*t + (2*pi/360) * fix((1:numel(S1))/ 60000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% когерентный приемник
S4=sin(2*pi*fc*t + 0);
S5=sin(2*pi*fc*t + pi);
S6=(S3.*S4);
S7=(S3.*S5);
 
%сравнить результат после интегратора с порогом
S31 = reshape(S3,fd,N)';
S41 = reshape(S4,fd,N)';
 
for n=1:N;
        SS(n)=0;
        for ii=1:fd;
             SS(n)=SS(n)+S31(n,ii).*S41(n,ii);
             m=(n-1).*fd+ii;
             Sp(m)=SS(n);
    end
             if SS(n)>0 
        d(n)=0;
    else
        d(n)=1;
             end
end
 
error=0;
for(i=1:1:N)
    if z(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N; 
figure
plot(t,S1);
0
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
03.03.2019, 23:16  [ТС] 12
АлександрКом,
Конкретный мой вопрос.
Как задержать сигнал bpsk на 0.5Ts.
C уважением, Зунг.
Matlab M
1
S1 = A0.*sin(2*pi*fc*t + Z*pi);
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
04.03.2019, 11:15 13
Нгуен Ван Зунг,
Matlab M
1
2
3
4
5
S2 = [zeros(1, 0.5 * M) S1(1 : end - 0.5 * M)]; % сигнал с БФМ
subplot(2, 1, 1)
plot(t, S1)
subplot(2, 1, 2)
plot(t, S2)
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
04.03.2019, 12:22  [ТС] 14
АлександрКом,
Большое спасибо Вам!
Я добавил случайную фазу на один символ изменяется один градус.
Matlab M
1
2
S2 = m.*A0.*sin(2*pi*fc*t + Z*pi+(2*pi/360) * fix((1:numel(S1))/ 60000));
S22 = [zeros(1, 0.5 * M) S2(1 : end - 0.5 * M)];
Экспериментальные результаты много больше тем теоретические.
Попрошу Вас, посмотрите, правильно ли добавить случайную фазу?
С уважением, Зунг.
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
04.03.2019, 12:45 15
Нгуен Ван Зунг, откуда появилось число 60000? У вас на один символ приходится М отсчетов, поэтому и делить на М надо. Лучше запишите так:
Matlab M
1
2
S2 = m.*A0.*sin(2*pi*fc*t + Z*pi+(2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
S22 = [zeros(1, 0.5 * M) S2(1 : end - 0.5 * M)];
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
04.03.2019, 13:04  [ТС] 16
АлександрКом,
Как Я понимаю, у нас длина последовательности (битов) =108000.
У каждого бита (символа)=200.
Тогда количество=108000*200=21600000.
Мы хотим,что фаза помехи изменяется на один градус через бит. то 21600000/360=60000.
Хочу спросить Вас, правильно ли все Я понимаю?
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
clear all
clc
close all 
% cигнал М-ФМ
A0=1;
N = 108000; % длина последовательности
b = randint(1,N); % случайные данные 
fc = 10; % часота несущего колебания
fz = 1; % частота символов 
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
t = 0:td:N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(b,M,1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
 
% белый гауссовский шум
sigma=2.51;
noise=sigma.*randn(1,length(t));
 
% ретранслированная помеха с случайной фазой в каждом тактовом интервале
m=0.5;
S2 = m.*A0.*sin(2*pi*fc*t + Z*pi+(2*pi/360) * fix((1:numel(S1))/ 60000));
S22 = [zeros(1, 0.5 * M) S2(1 : end - 0.5 * M)]; % сигнал с БФМ
 
% Сумма сигнала М-ФМ + ретранслированная помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% когерентный приемник
S4=sin(2*pi*fc*t + 0);
S5=sin(2*pi*fc*t + pi);
S6=(S3.*S4);
S7=(S3.*S5);
 
%сравнить результат после интегратора с порогом
S31 = reshape(S3,fd,N)';
S41 = reshape(S4,fd,N)';
 
for n=1:N;
        SS(n)=0;
        for ii=1:fd;
             SS(n)=SS(n)+S31(n,ii).*S41(n,ii);
             m=(n-1).*fd+ii;
             Sp(m)=SS(n);
    end
             if SS(n)>0 
        d(n)=0;
    else
        d(n)=1;
             end
end
 
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N; 
figure
plot(t,S22);
grid on
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
04.03.2019, 13:11 17
Цитата Сообщение от Нгуен Ван Зунг Посмотреть сообщение
Мы хотим,что фаза помехи изменяется на один градус через бит
Сейчас у вас фаза остаётся одной и той же на протяжении 60000 точек, а это 60000/200 = 300 бит. То есть у вас первые 300 бит фаза 0, следующие 300 бит фаза 1 и т.д. Если вы так и хотели, то всё ОК. Если вы хотели, чтобы первый бит была фаза 0, второй бит фаза 1, ..., 361 бит - фаза 360, 362 бит - фаза снова 0, 363 бит - фаза снова 1 и т.д., то надо править код.
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
04.03.2019, 13:22  [ТС] 18
АлександрКом,
Большое спасибо Вам за помощь!
Да. Я не правильно думал.
Я посмотрю еще раз, правильно ли теоретические результаты.
Желаю Вам всего хорошего!
С уважением, Зунг.

АлександрКом,
Здравствуйте, АлександрКом[!
Я не внимательно сделал. Все совпадают с теорией, ошибка была в том, что надо суммировать S22, а не S2.
Хочу спросить Вас, для М=4, хочу исследовать как М=2.
1. М=4 есть два канала I и Q, если добавить случайную фазу, то надо добавить в обоих каналах?
2. Для М=4, то длительность символа=2. то если хочу задержать сигнал на 0.1Ts то 0.1*2*M, на 0.5Ts то 0.5*2*M.
Подскажите, пожалуйста!
Правильно ли все Я понимаю.
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
clc
close all
clear all
A0=1;
N = 108000; % длина последовательности
b = randint(1,N); % случайные данные 
fc = 10; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
for n=1:length(b)/2
    p=b(2*n);
    imp=b(2*n-1);
    if (imp==0)&(p==0)
        I(n)=1;
        Q(n)=0;
    elseif (imp==0)&(p==1)
        I(n)=0;
        Q(n)=1;
     elseif (imp==1)&(p==1)
        I(n)=-1;
        Q(n)=0;
     elseif (imp==1)&(p==0)
        I(n)=0;
        Q(n)=-1;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I, 2*M, 1); % повторяем последовательность по строкам
Q = repmat(Q, 2*M, 1); % повторяем последовательность по строкам
I = I(:)'; % вытягиваем по столбцам
Q = Q(:)'; % вытягиваем по столбцам
t = 0 : td : (N * M - 1) * td; % массив времени
ichanel = I.* cos(2 * pi * fc * t); % I канал
qchanel =-Q .* sin(2 * pi * fc * t); % Q канал
S1 = ichanel + qchanel; % сумма I канал+Q канал
 
% белый гауссовский шум
sigma=7.96;
noise=sigma.*randn(1,length(t));
 
%гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0.1; % интенсивность помехи
S2 =m.*(I.* cos(2 * pi * fc * t+(2*pi/360) * fix((1:numel(S1))/ 60000))-Q .* sin(2 * pi * fc * t+(2*pi/360) * fix((1:numel(S1))/ 60000)));
S22 = [zeros(1, 0.2*M) S2(1 : end - 0.2*M)]; 
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S22+noise;
 
% Формировать опорные сигналы
S4=cos(2*pi*fc*t);
S5=cos(2*pi*fc*t+pi/2);
S6=cos(2*pi*fc*t+pi);
S7=cos(2*pi*fc*t+3*pi/2);
 
% Когерентный приемник
SS4=S3 .* S4;
SS5=S3.*S5;
SS6=S3.*S6;
SS7=S3.*S7;
 
% Создать массив 
S31 = reshape(S3, 2*fd, N/2)';
S41 = reshape(S4, 2*fd, N/2)';
S51 = reshape(S5, 2*fd, N/2)';
S61 = reshape(S6, 2*fd, N/2)';
S71 = reshape(S7, 2*fd, N/2)';
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    SS66(n)=0;
    SS77(n)=0;
    for ii=1:2*fd
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        SS66(n)=SS66(n)+S31(n,ii).*S61(n,ii);
        SS77(n)=SS77(n)+S31(n,ii).*S71(n,ii); 
        m=2.*(n-1).*fd+ii;
        Sp4(m)=SS44(n);
        Sp5(m)=SS55(n);
        Sp6(m)=SS66(n);
        Sp7(m)=SS77(n);
    end  
    % Максимальное значение и индекс канального символа
    [val(n),index(n)] = max([SS44(n) SS55(n) SS66(n) SS77(n)]);
    val(n);
    index(n);
    switch index(n)
        case 1
            d(n*2-1:n*2)=[0 0];
        case 2
            d(n*2-1:n*2)=[0 1];
        case 3
            d(n*2-1:n*2)=[1 1];
        case 4
            d(n*2-1:n*2)=[1 0];
    end
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
0
712 / 530 / 240
Регистрация: 21.10.2012
Сообщений: 1,725
05.03.2019, 10:45 19
Цитата Сообщение от Нгуен Ван Зунг Посмотреть сообщение
1. М=4 есть два канала I и Q, если добавить случайную фазу, то надо добавить в обоих каналах?
Думаю, что да. Если вы делаете это в 44 строке кода, то думаю, что это неверно. Возможно, что фазу нужно добавлять в строках 34 и 35.

Цитата Сообщение от Нгуен Ван Зунг Посмотреть сообщение
Для М=4, то длительность символа=2. то если хочу задержать сигнал на 0.1Ts то 0.1*2*M, на 0.5Ts то 0.5*2*M.
Всё зависит от того, рассматриваете вы длительность бита или длительность символа (которая в 2 раза больше).
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 137
05.03.2019, 11:29  [ТС] 20
АлександрКом,
Большое спасибо Вам!
Мне все понятно.
У нас есть три схемы приема сигнала.
1. когерентный демодулятор.
2. Демодулятор сигналов с схемой арктангенса.
3. автокогерентный демодулятор сигнала.
Я перехожу на 2 метод.
Я делаю и Мне нужна Ваша помощь, чтобы проверить ли правильно делать?
Желаю Вам всего хорошего!
С уважением, Зунг.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2019, 11:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определение частотного сдвига сигнала после QPSK модуляции
Здравствуйте! Нужна очень ваша помощь. Я начинаю только ознакомление с дисциплиной &quot;цифровая...

Формирование сигнала R2R
Здравствуйте. Разбираюсь с принципом формирования сигнала R2R. Прочитал статью про цап и не...

Формирование входного сигнала
Дорогие форумчане, выручайте. Помогите написать программу для входного сигнала.

Формирование сигнала виде пачек радиоимпульса
Ребят такой вопрос может кто поможет разобраться, сформировал сигнал виде пачки радиоимпульсов...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.