Страница 3 из 3

Re: Влияние повышения ЧД на демодуляцию

Добавлено: 27 сен 2019, 13:06
Бахурин Сергей
humbert_humbert писал(а):
26 сен 2019, 17:42
Дело все в том, что перед тем, как воспользоваться таким методом, я решил проверить, не ухудшается ли BER в случае идеальной синхронизации. То есть, никаких задержек нет вообще. Я просто поднял ЧД входного сигнала в демодуляторе.
Хотелось бы увидеть некоторые результаты вашей симуляции. :roll:
Если найдете время приложить какие-то графики было бы здорово. Потому что пока рассуждения идут в общетеоретической плоскости без конкретики.

Re: Влияние повышения ЧД на демодуляцию

Добавлено: 30 сен 2019, 09:24
humbert_humbert
Бахурин Сергей писал(а):
27 сен 2019, 13:06
Хотелось бы увидеть некоторые результаты вашей симуляции. :roll:
Провел моделирование еще раз - при повышении ЧД на приемной стороне, BER остался прежним. Вероятно я где-то по невнимательности допустил ошибку.
Код все-таки прикреплю. Сама модель:

Код: Выделить всё

clear all
close all

Fs = 19200;      % Частота дискретизации (Гц)
Fd = 4800;       % Символьная скорость (1/с)
FsFd = Fs/Fd;    % Число бит на символ
h = 1;         % Индекс модуляции
numBits = 5*1e6;   % Кол-во генерируемых бит
m = 1;           % Число бит на символ
M = 2^m;         % Порядок модуляции

EbN0 = [12:0.5:15];
BER = zeros(1,length(EbN0));
for j=1:length(EbN0)
    bitFlow = [1 0 randi([0 1],1,numBits)];
    symbols = bi2de(reshape(bitFlow,m,[])','left-msb')';
    signal = MSK_Modulator(symbols,m,Fs,Fd,h);

    signal_noise = awgn(signal,EbN0(j) - 10*log10(FsFd) + 10*log10(log2(M)),'measured');

    demodBits = Demodulation(signal_noise,m,h,Fs,FsFd,numBits);
    demodBits = ~demodBits;
    numErr = sum(xor(demodBits,bitFlow));
    BER(j) = numErr/length(demodBits(1:end-1));
    sprintf('BER = %d; Ebn0 = %d', BER(j), EbN0(j))
end
semilogy(EbN0,BER);
grid on;hold on;
Демодулятор:

Код: Выделить всё

function [demodBits] = Demodulation(signal,m,h,Fs,FsFd,lenOfSignal)

demodBits = zeros(1,lenOfSignal);
%% Формирование опорных сигналов
FsFd_new = FsFd*8; % Тут задаю новую ЧД
map = (0:2^m-1)*2-(2^m -1);
refSignals = zeros(FsFd_new,2);
for i=0:(2^m)-1
    PAM = map(i+1)/2;
    PAM = upsample(PAM,FsFd_new);
    PAM = filter(ones(1,FsFd_new),1,PAM);
    Freq = 2*pi*h*PAM/(FsFd_new);
    Phase = cumsum(Freq);
    refSig_tmp = exp(1i*Phase);
    refSignals(:,i+1) = refSig_tmp;
end

% Повышение ЧД
signal = interp(signal,FsFd_new/FsFd);

for i=1:(lenOfSignal)
    inputSignal = signal(FsFd_new*(i-1)+ 1:FsFd_new*i);
    corr = inputSignal*refSignals;
    corr = abs(corr).^2;
    [~,maxPos] = max(corr);
    referenceSignal = refSignals(:,maxPos);
    demodBits(i) = maxPos-1;
end

end