Перейти к содержанию
    

Демодулятор GMSK

В процессе программной реализации в MATLAB алгоритма GMSK демодуляции (демодулятор с перекрёстной связью) столкнулся с проблемой: при демодуляции входного сигнала, всё разваливается.Полаю, что проблема заключается в неправильном использовании фильтра. Буду благодарен за любые советы.

%%
clear
clc
close all

%% модулятор
bit = [1,0,1,0,1,0,randi([0,1],1,60)];%информационные биты
%bit = [1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0];
R = 4800;%символьная скорость
Fs = 2*R;%центральная частота
Fadc = 96e4;%частота дискретизации
m = 0.5;%индекс модуляции
Nfft = 2^14;
Ng = 4; %число символов на графике
BT = 0.5;%полоса по уровню -3 дБ
Ts=1/Fadc;%длительность символа
sps = ceil(Fadc/R);%коэффициент расширения
NT = 4;%число символов, которых необходимо учесть при фильтрации
N = length(bit);
H = gaussdesign(BT,NT,sps);
bits = 2 * bit-1;%NRZI
a3 = repmat(bits,sps,1);
a3 = a3(:)';
Tb = sps*Ts;%длительность бита
Wd = 0.5*pi*R;
after_Gauss = conv(a3,H,'full');
integral = cumsum(after_Gauss); 
integral = integral*Wd;
I = cos(integral); 
Q = sin(integral);
t=((0:1:length(I)-1)/Fadc);
Ichannel = I.*cos(2*pi*Fs*t);
Qchannel = Q.*sin(2*pi*Fs*t);
St = Ichannel - 1i.*Qchannel;
%% %демодулятор
f1 = Fs + 1/(4*Tb);
I_receiver = real(Stt);
Q_receiver = -imag(Stt);
I_receiver = I_receiver .* (cos(2*pi*Fs*t));
Q_receiver = Q_receiver .* (sin(2*pi*Fs*t));
[b, a] = butter (3, 2*f1 / (Fadc / 2));
% freqz(b,a)
MF1 = filter(b,a,I_receiver); 
MF2 = filter(b,a,Q_receiver);
after_filt_I = MF1;
after_filt_Q = MF2;
z1 = after_filt_Q.*[zeros(1,sps), after_filt_I(1:length(after_filt_I)-sps)]; 
z2 = after_filt_I.*[zeros(1,sps), after_filt_Q(1:length(after_filt_I)-sps)];
z = z1 - z2;
a_cap1 = (z(2*sps:sps:end-sps)>0);
a_cap1 = a_cap1(1:length(bit));
bit1 = biterr(a_cap1,bit)


 

Изменено пользователем Виталий123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, petrov сказал:

Спасибо, но это реализация в симулинк. А меня интересует только m-реализация

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/11/2021 at 6:38 PM, Виталий123 said:

I_receiver = real(Stt);

Q_receiver = -imag(Stt);

это опечатка? сигнал Stt не задан.

On 4/11/2021 at 6:38 PM, Виталий123 said:

I = cos(integral); Q = sin(integral); t=((0:1:length(I)-1)/Fadc); Ichannel = I.*cos(2*pi*Fs*t); Qchannel = Q.*sin(2*pi*Fs*t); St = Ichannel - 1i.*Qchannel;

это перенос на несущую частоту Fs? если не путаю, то нужно было комплексным умножением переносить

гляньте спектр сигнала St

PS: Fs в литературе и коде чаще обозначает частоту дискретизации, а то путаница возникает. несущая частота - это Fc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Виталий123

но это реализация в симулинк. А меня интересует только m-реализация

А какая разница? Там ничего не скрыто, всё в виде элементарных операций. Если понимание есть, переписать на чём угодно не проблема.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, quato_a сказал:

это опечатка? сигнал Stt не задан.

это перенос на несущую частоту Fs? если не путаю, то нужно было комплексным умножением переносить

гляньте спектр сигнала St

PS: Fs в литературе и коде чаще обозначает частоту дискретизации, а то путаница возникает. несущая частота - это Fc

Да,в первом случае действительно опечатка. А насчёт комплексного умножения,я думаю нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...