Бахурин Сергей писал(а): ↑27 сен 2019, 13:06
Хотелось бы увидеть некоторые результаты вашей симуляции.
Провел моделирование еще раз - при повышении ЧД на приемной стороне, 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