Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/65: Рейтинг темы: голосов - 65, средняя оценка - 4.74
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
05.03.2019, 23:22  [ТС]
Студворк — интернет-сервис помощи студентам
АлександрКом,
Здравствуйте, АлександрКом!
Мне нужна Ваша помощь!
Я реализовал квадратурный демодулятор для 8-PSK, то есть использовал arctg(Q/I). Если arctg(Q/I)=0 то распознавать переданные биты 0 0 0, arctg(Q/I)=pi/4 то биты 1 0 0.....
Вы можете посмотреть мою программу, где не правильно написал?
или так не правильно понимал.
Я закрепляю схему квадратурного демодулятора и программу.
С уважением, Зунг.
Кликните здесь для просмотра всего текста
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
127
128
129
130
clc
close all
clear all
A0=1;
N=24;
fc = 10800; 
fz = 1; 
fd = 20*fc; 
td = 1/fd; 
b=randint(1,N);
for n=1:length(b)/3
p1=b(3*n-2);
p2=b(3*n-1);
p3=b(3*n);
if p1==0 && p2==0 && p3==0
        I(n)=1;
        Q(n)=0;
elseif p1==1 && p2==0 && p3==0
        I(n)=sqrt(2)/2;
        Q(n)=sqrt(2)/2;
elseif p1==1 && p2==0 && p3==1
        I(n)=0;
        Q(n)=1;
elseif p1==1 && p2==1 && p3==1
        I(n)=-sqrt(2)/2;
        Q(n)=sqrt(2)/2;
elseif p1==1 && p2==1 && p3==0
        I(n)=-1;
        Q(n)=0;
elseif p1==0 && p2==1 && p3==0
        I(n)=-sqrt(2)/2;
        Q(n)=-sqrt(2)/2;
elseif p1==0 && p2==1 && p3==1
        I(n)=0;
        Q(n)=-1;
elseif p1==0 && p2==0 && p3==1
        I(n)=sqrt(2)/2;
        Q(n)=-sqrt(2)/2;
end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I,3*M,1); % повторяем последовательность по строкам
Q = repmat(Q,3*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))/ 60000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать информационные сигналы
S4=cos(2*pi*fc*t);
S5=sin(2*pi*fc*t);
 
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
 
% Создать массив 
S31 = reshape(S3, 3*fd, N/3)';
S41 = reshape(S4, 3*fd, N/3)';
S51 = reshape(S5, 3*fd, N/3)';
 
% Накопить сигнал
for n=1:N/3
    SS44(n)=0;
    SS55(n)=0;
    
    for ii=1:3*fd
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
        u(n)=atan2(SS44(n),SS55(n));
        u1(n)=u(n)*(180/pi);
        
   if u1(n)==0;
       d(3*n-2)=0;
       d(3*n-1)=0;
       d(3*n)=0;
   elseif u1(n)==45;
       d(3*n-2)=1;
       d(3*n-1)=0;
       d(3*n)=0;
   elseif u1(n)==90;
       d(3*n-2)=1;
       d(3*n-1)=0;
       d(3*n)=1;
   elseif u1(n)==135;
       d(3*n-2)=1;
       d(3*n-1)=1;
       d(3*n)=1;
   elseif u1(n)==180;
       d(3*n-2)=1;
       d(3*n-1)=1;
       d(3*n)=0;
   elseif u1(n)==225;
       d(3*n-2)=0;
       d(3*n-1)=1;
       d(3*n)=0;
   elseif u1(n)==270;
       d(3*n-2)=0;
       d(3*n-1)=1;
       d(3*n)=1;
   elseif u1(n)==315;
       d(3*n-2)=0;
       d(3*n-1)=0;
       d(3*n)=1;    
   end     
   end           
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
Миниатюры
Формирование сигнала QPSK  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2019, 23:22
Ответы с готовыми решениями:

Формирование сигнала с t=0
Вроде все понятно, но из-за того что t от 0, то все ломается, подскажите что не так. Сформировать исходный сигнал используя следующую...

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

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

57
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
06.03.2019, 12:29
Нгуен Ван Зунг, посмотрите:
Кликните здесь для просмотра всего текста
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
clc
close all
clear all
A0=1;
N=10800;
fc = 10;
fz = 1;
fd = 20*fc;
td = 1/fd;
b=randi([0 1], 1, N);
for n=1:length(b)/3
    p1=b(3*n-2);
    p2=b(3*n-1);
    p3=b(3*n);
    if p1==0 && p2==0 && p3==0
        I(n)=1;
        Q(n)=0;
    elseif p1==1 && p2==0 && p3==0
        I(n)=sqrt(2)/2;
        Q(n)=sqrt(2)/2;
    elseif p1==1 && p2==0 && p3==1
        I(n)=0;
        Q(n)=1;
    elseif p1==1 && p2==1 && p3==1
        I(n)=-sqrt(2)/2;
        Q(n)=sqrt(2)/2;
    elseif p1==1 && p2==1 && p3==0
        I(n)=-1;
        Q(n)=0;
    elseif p1==0 && p2==1 && p3==0
        I(n)=-sqrt(2)/2;
        Q(n)=-sqrt(2)/2;
    elseif p1==0 && p2==1 && p3==1
        I(n)=0;
        Q(n)=-1;
    elseif p1==0 && p2==0 && p3==1
        I(n)=sqrt(2)/2;
        Q(n)=-sqrt(2)/2;
    end
end
M = fd/fz; % количество отсчетов на бит
I = repmat(I,3*M,1); % повторяем последовательность по строкам
Q = repmat(Q,3*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.1;
S2 = m.*A0.*sin(2*pi*(fc)*t + (2*pi/360) * fix((1:numel(S1))/ 60000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать информационные сигналы
S4=cos(2*pi*fc*t);
S5=-sin(2*pi*fc*t);
 
 
% Когерентный приемник
SS4=S3.*S4;
SS5=S3.*S5;
 
 
% Создать массив
S31 = reshape(S3, 3*M, N/3)';
S41 = reshape(S4, 3*M, N/3)';
S51 = reshape(S5, 3*M, N/3)';
 
angle = [0 45 90 135 180 -135 -90 -45 -180];
 
% Накопить сигнал
for n=1:N/3
    SS44(n)=0;
    SS55(n)=0;
    
    for ii=1:3*M
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
    end
    
    u(n)=atan2(SS55(n),SS44(n));
    u1(n)=u(n)*(180/pi);
    
    [~, ww] = min(abs(angle - u1(n)));
    
    switch ww
        case 1
            d(3*n-2)=0;
            d(3*n-1)=0;
            d(3*n)=0;
        case 2
            d(3*n-2)=1;
            d(3*n-1)=0;
            d(3*n)=0;
        case 3
            d(3*n-2)=1;
            d(3*n-1)=0;
            d(3*n)=1;
        case 4
            d(3*n-2)=1;
            d(3*n-1)=1;
            d(3*n)=1;
        case 5
            d(3*n-2)=1;
            d(3*n-1)=1;
            d(3*n)=0;
        case 6
            d(3*n-2)=0;
            d(3*n-1)=1;
            d(3*n)=0;
        case 7
            d(3*n-2)=0;
            d(3*n-1)=1;
            d(3*n)=1;
        case 8
            d(3*n-2)=0;
            d(3*n-1)=0;
            d(3*n)=1;
        case 9
            d(3*n-2)=1;
            d(3*n-1)=1;
            d(3*n)=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
Сообщений: 165
06.03.2019, 12:39  [ТС]
АлександрКом,
Большое спасибо Вам за помощь и поддержку!
Хочу сказать слово СПАСИБО Вам.
Желаю Вам всего хорошего!
С уважением, Зунг.

АлександрКом,
Здравствуйте, АлександоКом!
Мне нужна Ваша помощь!
По вашей программе, Я писал программу для сигнала bpsk и qpsk (аналогично).
Я сомневаюсь, что все писал правильно или нет?
Попрошу Вас, посмотрите, поправите, пожалуйста!
Вы можете поправить программу как можно проще.
С уважением, Зунг.
Для сигнала bpsk/
Кликните здесь для просмотра всего текста
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
% cигнал М-ФМ
A0=1;
N = 6; % длина последовательности
b = [1 0 1 0 1 0]; % случайные данные 
fc = 2; % часота несущего колебания
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=0;
noise=sigma.*randn(1,length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m=0;
S2 = m.*A0.*sin(2*pi*(fc)*t + (2*pi/360) * fix((1:numel(S1))/ 60000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать информационные сигналы
S4=cos(2*pi*fc*t);
S5=-sin(2*pi*fc*t);
 
% Перемножение
S6=(S1.*S4);
S7=(S1.*S5);
 
angle = [0 180];
 
%сравнить результат после интегратора с порогом
S11 = reshape(S1,fd,N)';
S41 = reshape(S4,fd,N)';
S51 = reshape(S5,fd,N)';
 
for n=1:N;
        SS(n)=0;
        for ii=1:fd;
             SS(n)=SS(n)+S11(n,ii).*S41(n,ii);
             SSS(n)=SS(n)+S11(n,ii).*S51(n,ii);
        end
        u(n)=atan2(SS(n),SSS(n));
        u1(n)=u(n)*(180/pi);
    
    [val(n), index(n)] = min(abs(angle - u1(n)));
    val(n);
    index(n);
    
    switch index(n)
        case 1
            d(n)=1;
        case 2
            d(n)=0;    
        end        
end
 
% Вероятность ошибки
error=0;
for(i=1:1:N)
    if b(i)==d(i)
    else
        error=error+1;
    end
end
error=error/N;
Для сигнала qpsk/
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
A0=1;
N=8;
fc = 10;
fz = 1;
fd = 20*fc;
td = 1/fd;
b=[0 0 0 1 1 1 1 0];
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))/ 60000));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3=S1+S2+noise;
 
% Формировать информационные сигналы
S4=cos(2*pi*fc*t);
S5=-sin(2*pi*fc*t);
 
% Перемножение
SS4=S3.*S4;
SS5=S3.*S5;
 
% Создать массив
S31 = reshape(S3, 2*M, N/2)';
S41 = reshape(S4, 2*M, N/2)';
S51 = reshape(S5, 2*M, N/2)';
 
angle = [0 90 180 -90];
 
% Накопить сигнал
for n=1:N/2
    SS44(n)=0;
    SS55(n)=0;
    
    for ii=1:2*M
        SS44(n)=SS44(n)+S31(n,ii).*S41(n,ii);
        SS55(n)=SS55(n)+S31(n,ii).*S51(n,ii);
    end
    
    u(n)=atan2(SS55(n),SS44(n));
    u1(n)=u(n)*(180/pi);
    
    [val(n), index(n)] = min(abs(angle - u1(n)));
     val(n);
     index(n);
    
    switch index(n)
        case 1
            d(2*n-1)=0;
            d(2*n)=0;
        case 2
            d(2*n-2)=0;
            d(2*n)=1;
        case 3
            d(2*n-1)=1;
            d(2*n)=1;
        case 4
            d(2*n-1)=1;
            d(2*n)=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
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
07.03.2019, 12:04
Нгуен Ван Зунг, посмотрите:
bpsk:
Кликните здесь для просмотра всего текста
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
% cигнал М-ФМ
clear; clc;
A0 = 1;
N = 10800; % длина последовательности
b = randi([0, 1], 1, N); % случайные данные
fc = 2; % часота несущего колебания
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 = 0;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Формировать информационные сигналы
S4 = cos(2*pi*fc*t);
S5 = sin(2*pi*fc*t);
 
% Перемножение
S6 = (S1.*S4);
S7 = (S1.*S5);
 
angle = [180 0 -180];
 
%сравнить результат после интегратора с порогом
S11 = reshape(S1,M,N)';
S41 = reshape(S4,M,N)';
S51 = reshape(S5,M,N)';
 
SS = zeros(1, N);
SSS = SS;
d = SS;
u = SS;
u1 = SS;
index = SS;
 
for n = 1:N
    for ii = 1:M
        SS(n) = SS(n)+S11(n,ii).*S41(n,ii);
        SSS(n) = SS(n)+S11(n,ii).*S51(n,ii);
    end
    
    u(n) = atan2(SS(n), SSS(n));
    u1(n) = u(n) * (180/pi);
    
    [~, index(n)] = min(abs(angle - u1(n)));
    
    switch index(n)
        case 1
            d(n) = 1;
        case 2
            d(n) = 0;
        case 3
            d(n) = 1;
    end
end
 
% Вероятность ошибки
error = sum(b ~= d) / N;


qpsk:
Кликните здесь для просмотра всего текста
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
clear;
clc;
 
A0 = 1;
N = 10800;
fc = 10;
fz = 1;
fd = 20*fc;
td = 1/fd;
b = randi([0 1], 1, N);
I = zeros(1, N/2);
Q = I;
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) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Формировать информационные сигналы
S4 = cos(2*pi*fc*t);
S5 = -sin(2*pi*fc*t);
 
% Перемножение
SS4 = S3 .* S4;
SS5 = S3 .* S5;
 
% Создать массив
S31 = reshape(S3, 2*M, N/2)';
S41 = reshape(S4, 2*M, N/2)';
S51 = reshape(S5, 2*M, N/2)';
 
angle = [0 90 180 -90 -180];
 
SS44 = zeros(1, N/2);
SS55 = SS44;
u = SS44;
u1 = SS44;
index = SS44;
d = zeros(1, N);
 
% Накопить сигнал
for n = 1 : N/2    
    for ii = 1 : 2*M
        SS44(n) = SS44(n) + S31(n,ii).*S41(n,ii);
        SS55(n) = SS55(n) + S31(n,ii).*S51(n,ii);
    end
    
    u(n) = atan2(SS55(n), SS44(n));
    u1(n) = u(n) * (180/pi);
    
    [~, index(n)] = min(abs(angle - u1(n)));
    
    switch index(n)
        case 1
            d(2*n-1) = 0;
            d(2*n) = 0;
        case 2
            d(2*n-1) = 0;
            d(2*n) = 1;
        case 3
            d(2*n-1) = 1;
            d(2*n) = 1;
        case 4
            d(2*n-1) = 1;
            d(2*n) = 0;
        case 5
            d(2*n-1) = 1;
            d(2*n) = 1;            
    end
end
 
% Вероятность ошибки
error = sum(b ~= d) / N;
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
07.03.2019, 20:50  [ТС]
АлександрКом,
АлександрКом!
Я благодарю Вас за помощь!
Ваша программа более красивая и более понятно.
Экспериментальные результаты по когерентному приему сигналов 2-ФМ, 4-ФМ, 8-ФМ при наличии гармонической и ретранслированной помехи хорошее совпадают с теорией.
С Вашей помощью, Я закончил схему когерентного приема.
Я перехожу на некогерентный прием.
Я пишу и попрошу Вас, проверите, пожалуйста!
Желаю Вам всего доброго!
С уважением, Зунг.

АлександрКом,
Здравствуйте, АлександрКом!
При наличии ретранслированной помехе (это тот же сигнал 2-ФМ, но задержал на тактовой интервал сигнал Ts).
Для получение задержанный сигнал, Мы написал команду:
Matlab M
1
2
3
4
5
S2 = [zeros(1, 1 * M) S1(1 : end - 1 * M)];
subplot(2, 1, 1)
plot(t, S1)
subplot(2, 1, 2)
plot(t, S2)
Но сегодня, заметил, что действительно сигнал задержал на Ts, но отсутствует сигнал на один тактовой интервале.
То есть пример, у нас есть 10 тактовых интервалов. то оси время сигнал 2-ФМ S1 от 0 до 10. А задержанный сигнал S2 от 1 до 11.
Подскажите, правильно Я понимал нашу ошибку, пожалуйста!
С уважением, Зунг.
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
% сигнал 2-ФМ
A0=1;
N = 10; % длина последовательности
z = randi([0,1],1,N); % случайные данные 
fc =2; % часота несущего колебания
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); % сигнал с БФМ
 
% задержанный сигнал на один тактовой интеврал сигнала Ts
S2 = [zeros(1, 1 * M) S1(1 : end - 1 * M)]; % сигнал с БФМ
figure 
subplot(2, 1, 1)
plot(t, S1)
axis([0 11 -1.1 1.1]);
title('Сигнал 2-ФМ');
grid on
subplot(2, 1, 2)
plot(t, S2)
axis([0 11 -1.1 1.1]);
title('Задержанный сигнал 2-ФМ на Ts');
grid on
0
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
11.03.2019, 00:23  [ТС]
АлександрКом,
Здраствуйте, АлександрКом!
Мне нужна Ваша помощь!
Я переходил на схему некогерентного приема.
Как Я понимаю для когерентного приема то формировать сигнал BPSK, а для некогерентного приема надо формировать сигнал DPSK.
сигнал DPSK: первый элемент в массиве фаза=0. Если следующий элемент 0, то фаза следующей посылки изменяется на пи по сравнению с предыдущей. Если 1, то фаза остается такой же как в предыдущей.
Потом накопить сигнал с второго элемента и сравнить с порогом 0.
Так Я понимаю, но реализовать чуть затрудняюсь.
Вы можете посмотреть мой код программу? Подскажите, как поправить программу?
Помогите Мне, пожалуйста!
C уважением, Зунг.
Кликните здесь для просмотра всего текста
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=11;
b=[0 0 0 1 1 1 0 0 1 1 1];
for n=2:length(b)
   phi(1)=0;
   if b(n)==1
       phi(n)=phi(n-1);
   elseif b(n)==0;
       phi(n)=phi(n-1)+pi;
   end
end
A0=1;
N = 10; % длина последовательности
b = randint(1,N); % случайные данные 
fc =2; % часота несущего колебания
fz = 1; % частота символов 
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации 
t = 0:td:11-td; % массив времени
M = fd/fz; % количество отсчетов на бит
phi = repmat(phi,M,1); % повторяем последовательность по строкам
phi = phi(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + phi); % сигнал с БФМ
 
% белый гауссовский шум
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;
 
% Задержанный принимаемый сигнала на тактовой интервал сигнал Ts
 
S4=[zeros(1, 1 * M) S3(1 : end - 1* M)]; 
 
% перемножение принимаемого и задержанного принимаемого сигнала
S14=S1.*S4;
 
% создать массив (была ошибка)
S11 = reshape(S1,fd,N)';
S41 = reshape(S4,fd,N)';
 
 
% создать массив
for j=1:N.*fd;
    i=fix(j/fd)+1;
    jj=j-fix(j/fd).*fd+1;
    s11(i,jj)=S1(j);
    s41(i,jj)=S4(j);
 
end
 
%сравнить результат после интегратора с порогом
 
for i=1:N;
        SS(i)=0;
        for jj=1:fd;
             SS(i)=SS(i)+s11(i,jj).*s41(i,jj);
             j=(i-1).*fd+jj;
             Sp(j)=SS(i);
    end
             if SS(i)>0 
        d(i)=1;
    else
        d(i)=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
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
11.03.2019, 13:25
Цитата Сообщение от Нгуен Ван Зунг Посмотреть сообщение
сигнал DPSK: первый элемент в массиве фаза=0. Если следующий элемент 0, то фаза следующей посылки изменяется на пи по сравнению с предыдущей. Если 1, то фаза остается такой же как в предыдущей.
Не совсем так: при передаче 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
clc;
close all;
clear all;
A0 = 1;
N = 10800;
 
b = randi([0, 1], 1, N);
d = zeros(1, N);
d(1) = b(1);
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
 
fc = 2; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 0;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Формировать информационные сигналы
S4 = cos(2*pi*fc*t);
S5 = sin(2*pi*fc*t);
 
% Перемножение
S6 = (S1.*S4);
S7 = (S1.*S5);
 
angle = [180 0 -180];
 
%сравнить результат после интегратора с порогом
S11 = reshape(S1,M,N)';
S41 = reshape(S4,M,N)';
S51 = reshape(S5,M,N)';
 
SS = zeros(1, N);
SSS = SS;
d = SS;
u = SS;
u1 = SS;
index = SS;
result = SS;
 
for n = 1:N
    for ii = 1:M
        SS(n) = SS(n)+S11(n,ii).*S41(n,ii);
        SSS(n) = SS(n)+S11(n,ii).*S51(n,ii);
    end
    
    u(n) = atan2(SS(n), SSS(n));
    u1(n) = u(n) * (180/pi);
    
    [~, index(n)] = min(abs(angle - u1(n)));
    
    switch index(n)
        case 1
            d(n) = 1;
        case 2
            d(n) = 0;
        case 3
            d(n) = 1;
    end
end
 
result(1) = d(1);
for i = 2:N
    result(i) = xor(d(i-1), d(i));
end
 
% Вероятность ошибки
error = sum(b ~= result) / N;
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
11.03.2019, 13:40  [ТС]
АлександрКом,
Большое спасибо Вам за помощь!
Я посмотрел вашу программу.
Как Я понимаю, для DQPSK и 8DPSK, надо реализовать квадратурный приемник arctg.
Но для DBSPK, аrctg не существует, потому что arctg(Q/I), i=0;
У меня большая просьба к Вам!
Помогите, пожалуйста!
Вы можете реализовать алгоритм сравнения с порогом, сравнить надо с второго элемента массива, если >0 или <0.
Требовать так надо выполнить в задании.
С уважением, Зунг.
0
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
11.03.2019, 13:47  [ТС]
АлександрКом,
и второй, хочу сказать Мы используем некогерентный прием.
Поэтому, не надо формировать опорные и информационные колебания.
Опорные сигналы будет, принимаемый сигнал задержать на тактовой интервал Ts.
Я посылаю Вам схему некогерентный приема сигнала DPSK.
Попрошу Вас, посмотрите, пожалуйста!
С уважением, Зунг.
Миниатюры
Формирование сигнала QPSK  
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
11.03.2019, 14:03
Нгуен Ван Зунг,
Кликните здесь для просмотра всего текста
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
clc;
close all;
clear all;
A0 = 1;
N = 10800;
 
b = randi([0, 1], 1, N);
d = zeros(1, N);
d(1) = b(1);
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
 
fc = 2; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 0;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Формировать информационные сигналы
S4 = cos(2*pi*fc*t);
S5 = sin(2*pi*fc*t);
 
% Перемножение
S6 = (S1.*S4);
S7 = (S1.*S5);
 
angle = [180 0 -180];
 
%сравнить результат после интегратора с порогом
S11 = reshape(S1,M,N)';
 
SS = zeros(1, N);
d = SS;
 
for n = 2:N
    
    for ii = 1:M
        SS(n) = SS(n)+S11(n,ii).*S11(n-1,ii);
    end
    
    if SS(n) < 0
        d(n) = 1;
    else
        d(n) = 0;
    end
end
 
% Вероятность ошибки
error = sum(b(2:end) ~= d(2:end)) / (N-1);
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
11.03.2019, 14:14  [ТС]
АлександрКом,
Я благодарю Вас за помощь и поддержку.
Я хотел задержать весь принимаемый сигнал (сигнал+шум+гармоническая помеха) на Тs, это опорный сигнал.
Как Я чуть чуть поправил программу.
Попрошу Вас, посмотрите, пожалуйста!
С уважением, Зунг.
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
clc;
close all;
clear all;
A0 = 1;
N = 10;
b = randi([0, 1], 1, N);
d = zeros(1, N);
d(1) = b(1);
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
fc = 2; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 0;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала DPSK + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Задержанный принимаемый сигнала на тактовой интервал сигнал Ts
 
S4=[zeros(1, 1 * M) S3(1 : end - 1* M)]; 
 
%сравнить результат после интегратора с порогом
S11 = reshape(S1,M,N)';
S41 = reshape(S4,M,N)';
 
SS = zeros(1, N);
d = SS;
 
for n = 2:N
    for ii = 1:M
        SS(n) = SS(n)+S11(n,ii).*S41(n,ii);
    end
    
    if SS(n) < 0
        d(n) = 1;
    else
        d(n) = 0;
    end
end
 
% Вероятность ошибки
error = sum(b(2:end) ~= d(2:end)) / (N-1);
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
11.03.2019, 14:56
Нгуен Ван Зунг, да, верно
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
11.03.2019, 16:38  [ТС]
АлександрКом,
Большое спасибо Вам!
С Вашей помощью, у меня все получается.
Мы закончили с DPSK.
Я перехожу на DQPSK.
Я стараюсь писать. Потом попрошу Вас, посмотрите, поправите, пожалуйста!
С уважением, Зунг.

Добавлено через 1 час 29 минут
АлександрКом,
АлександрКом!
Как Я знаю, что для некогерентного приема, вероятность битовой ошибки хуже чем когерентный прием, например, на 1 дБ хуже.
Я исследовал при наличии шума, вероятность битовой ошибки в двоих случаях, одинаковая.
Вы можете подсказать, где была наша ошибка?
С уважением, Зунг.

АлександрКом,
Простите, пожалуйста!
Я обнаружил мою большую ошибку. Надо умножить принимаемый и задержанный принимаемый сигналы, то есть S31*S41, а не S11*S41.
Но получил большие вероятности битовой ошибки. Так не может быть. Пример должно получить кривые как график снизу.
Попрошу Вас, еще раз, проверите программу, пожалуйста!
С уважением, Зунг.
Я прикрепляю график, так должно получить вероятности битовой ошибки. и какие sigma соответствуют отношению сигнал/шум.
Кликните здесь для просмотра всего текста
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
clc;
close all;
clear all;
A0 = 1;
N = 108000;
b = randi([0, 1], 1, N);
d = zeros(1, N);
d(1) = b(1);
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
fc = 10; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 7.07;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала DPSK + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Задержанный принимаемый сигнала на тактовой интервал сигнал Ts
 
S4=[zeros(1, 1 * M) S3(1 : end - 1* M)]; 
 
%сравнить результат после интегратора с порогом
S31 = reshape(S3,M,N)';
S41 = reshape(S4,M,N)';
 
SS = zeros(1, N);
d = SS;
 
for n = 2:N
    for ii = 1:M
        SS(n) = SS(n)+S31(n,ii).*S41(n,ii);
    end
    
    if SS(n) < 0
        d(n) = 1;
    else
        d(n) = 0;
    end
end
 
% Вероятность ошибки
error = sum(b(2:end) ~= d(2:end)) / (N-1);
Миниатюры
Формирование сигнала QPSK  
Изображения
 
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
12.03.2019, 14:39
Нгуен Ван Зунг, пока что не могу подсказать
0
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
12.03.2019, 15:51  [ТС]
АлександрКом,
Спасибо Вам!
Я думаю, так Мы используем задержанный сигнал для опорного.
Задерженный сигнал в итоге сигнал и шум. поэтому шум много влияет на отношение сигнал/шум.
Нам надо поставить фильтр, что резать спектр шума.
Вы можете подсказать, как написать программу для фильтра?
Помогите, пожалуйста!
С уважением, Зунг.
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
12.03.2019, 17:34
Нгуен Ван Зунг, для построения фильтров очен удобно использовать fdatool. Создаёте там фильтр с нужными характеристиками, получаете коэффициенты числителя и знаменателя передаточной функции (например, b и a), а потом фильтруете сигнал: y = filter(b, a, x)
1
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
13.03.2019, 01:08  [ТС]
АлександрКом,
Спасибо Вам, АлександрКом!
Я старался писать программу для полосового фильтра.
Разрешите задать вопрос, как подбирать параметры фильтра, например, порядок фильтра, какие ограничения частоты, чтобы получить оптимальный фильтр максимально подавить шум.
Я посылаю Вам программу.
Попрошу Вас, посмотрите, поправите, пожалуйста!
С уважением, Зунг.
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
clc;
close all;
clear all;
A0 = 1;
N = 108000;
c = randi([0, 1], 1, N);
d = zeros(1, N);
d(1) = c(1);
for n = 2:length(c)
   d(n) = xor(c(n), d(n-1));
end
fc = 10; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
S1 = A0.*sin(2*pi*fc*t + Z*pi); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 7.07;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
m = 0;
S2 = m*A0.*sin(2*pi*fc*t + Z*pi+(2*pi/360) * fix((1:numel(S1))/ 60000));
 
% Сумма сигнала DPSK + гармоническая помеха + белый гауссовский шум
S3 = S1 + S2 + noise;
 
% Фильтрация шума
[b,a] = butter(2,[fc-2 fc+2]/(fd/2)); 
SS3 = filtfilt(b,a,S3);
 
% Задержанный принимаемый сигнала на тактовой интервал сигнал Ts
S4=[zeros(1, 1 * M) SS3(1 : end - 1* M)]; 
 
%сравнить результат после интегратора с порогом
S31 = reshape(SS3,M,N)';
S41 = reshape(S4,M,N)';
 
for n = 2:N
    SS(n) = 0;
    for ii = 1:M
        SS(n) = SS(n)+S31(n,ii).*S41(n,ii);
    end
    
    if SS(n) <0
        d(n) = 1;
    else
        d(n) = 0;
    end
end
 
% Вероятность ошибки
error = sum(c(2:end) ~= d(2:end)) / (N-1);
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
13.03.2019, 13:15
Нгуен Ван Зунг, нашёл немного другой способ приёма DPSK, в котором как раз используют фильтр. Сравните вероятности ошибок при использовании двух методов:
Кликните здесь для просмотра всего текста
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
% cигнал М-ФМ
clear; clc;
A0 = 1;
N = 5e3; % длина последовательности
% p = 0.5;
b = randi([0, 1], 1, N); % случайные данные
d = zeros(1, N);
d(1) = b(1);
 
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
 
fc = 2; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
Z(Z == 1) = -1;
Z(Z == 0) = 1;
S1 = Z.*sin(2*pi*fc*t); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 2.81;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
% m = 0;
% S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + noise;
 
s0 = S3 .* exp(-2i*pi*fc*td*(0:length(S3)-1)); % перенос на нулевую частоту
s1 = intdump(s0, M); % фильтр (интегратор со сбросом) 
s2 = s1(1:end-1) .* conj(s1(2:end)); % некогерентный прием
rec_bit_arr = real(s2) < 0; % преобразование в биты
 
% Вероятность ошибки
error = sum(b(2:end) ~= rec_bit_arr) / (N-1);
 
 
%сравнить результат после интегратора с порогом
S11 = reshape(S3,M,N)';
d = zeros(1, N-1);
 
SSS = S11(2:end, :) .* S11(1:end-1, :);
SSS = sum(SSS, 2);
d(SSS < 0) = 1;
 
% Вероятность ошибки
error1 = sum(b(2:end) ~= d) / (N-1);
0
7 / 6 / 1
Регистрация: 13.04.2018
Сообщений: 165
13.03.2019, 13:34  [ТС]
АлександрКом,
Спасибо Вам большое. Вы всегда помогаете Мне.
Видно, что вероятности меньше, чем предыдущую программу.
Вы можете подсказать, в предыдущей программе что надо сделать,что улучшить вероятности ошибки.
Как правильно задать параметры полосового фильтра, чтобы максимально подавить шум.
Объясните, пожалуйста! в задании так надо выполнить, есть другие способы уйти.Но наука надо объяснить.
С уважением, Зунг.
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
13.03.2019, 13:51
Нгуен Ван Зунг, не подскажу, как лучше задавать параметры фильтра. Посмотрите на спектры вашего сигнала без шума и с ним. Может, поможет подобрать параметры. В предыдущем примере, что я скинул, происходит накопление сигнала и его усреднение на длительности бита, что тоже является фильтрацией. Можно написать ещё по-другому, тогда вероятность ошибки будет ещё меньше:
Кликните здесь для просмотра всего текста
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
% cигнал М-ФМ
clear; clc;
A0 = 1;
N = 5e3; % длина последовательности
% p = 0.5;
b = randi([0, 1], 1, N); % случайные данные
d = zeros(1, N);
d(1) = b(1);
for n = 2:length(b)
   d(n) = xor(b(n), d(n-1));
end
% b = binornd(1, p * ones(1, N));
fc = 2; % часота несущего колебания
fz = 1; % частота символов
fd = 20*fc; % чатоста дискретизации
td = 1/fd; % период дискретизации
t = 0 : td : N/fz-td; % массив времени
M = fd/fz; % количество отсчетов на бит
Z = repmat(d, M, 1); % повторяем последовательность по строкам
Z = Z(:)'; % вытягиваем по столбцам
Z(Z == 1) = -1;
Z(Z == 0) = 1;
S1 = Z.*sin(2*pi*fc*t); % сигнал с БФМ
 
% белый гауссовский шум
sigma = 2.81;
noise = sigma .* randn(1, length(t));
 
% гармоническая помеха с случайной фазой в каждом тактовом интервале
% m = 0;
% S2 = m .* A0 .* sin(2*pi*fc*t + (2*pi/360) * (ceil((1:numel(S1)) / M) - 1));
 
% Сумма сигнала М-ФМ + гармоническая помеха + белый гауссовский шум
S3 = S1 + noise;
 
s0 = S3 .* ( -sin(2*pi*fc*td*(0:length(S3)-1)) ); % перенос на нулевую частоту
s1 = intdump(s0, M); % фильтр (интегратор со сбросом) 
s2 = s1(1:end-1) .* conj(s1(2:end)); % некогерентный прием
rec_bit_arr = real(s2) < 0; % преобразование в биты
 
% Вероятность ошибки
error = sum(b(2:end) ~= rec_bit_arr) / (N-1);
 
 
%сравнить результат после интегратора с порогом
S11 = reshape(S3,M,N)';
d = zeros(1, N-1);
 
SSS = S11(2:end, :) .* S11(1:end-1, :);
SSS = sum(SSS, 2);
d(SSS < 0) = 1;
 
% Вероятность ошибки
error1 = sum(b(2:end) ~= d) / (N-1);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2019, 13:51

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru