Доброго времени суток.
Имею демодулятор FSK-2 сигнала. При демодуляции использую некогерентный прием (см. пример в учебном пособии Сергиенко А.Б "Цифровая связь" раздел 2.2.4, рис.2.14). При приеме предполагается идеальная символьная и частотная синхронизация.
Демодулятор работает нормально, графики BER совпадают с теми, что можно найти в bertool.
Я хочу увеличить частоту дискретизации входного сигнала с целое число раз. Использую функцию interp. После увеличения ЧД результаты демодуляции хуже (кривая BER смещается в правую сторону).
Также пытался повысить ЧД с помощью функции resample, но результат оказался таким же.
Вопрос: я что-то делаю не так или такой результат и должен быть?
Влияние повышения ЧД на демодуляцию
Модератор: Admin
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
Учли ли вы повышение частоты дискретизации при добавлении шума к сигналу?
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
sandy писал(а):Учли ли вы повышение частоты дискретизации при добавлении шума к сигналу?
Нет, не учитывал.
Я некорректно задал вопрос. ЧД я увеличиваю на приемной стороне, уже после того, как к сигналу добавился шум. Вроде бы смысла в этом нет, ведь шум уже добавлен к сигналу.
Re: Влияние повышения ЧД на демодуляцию
ЧД я увеличиваю на приемной стороне
А зачем?
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
sandy писал(а):ЧД я увеличиваю на приемной стороне
А зачем?
Помимо самой демодуляции необходимо реализовать тактовую синхронизацию (чтобы знать начало символа). В случае, когда оценка временной отстройки дробная, необходимо делать интерполяцию сигнала. Я пока не реализовывал функции интерполяции, но мне кажется, что при низком кол-ве отсчетов на символ, в интерполяция вносит некоторые искажения в сигнал.
Я хочу увеличить ЧД входного сигнала в несколько раз. Тогда возможно обойтись вообще без интерполяции, и просто округлять оценку временной отстройки к ближайшему отсчету (предварительно отнормировав ее к новому число отсчетов на символ).
Re: Влияние повышения ЧД на демодуляцию
Покажите код, где вы пытались повышать частоту дискретизации. По идее, помехоустойчивость не должна была измениться. Во сколько раз, кстати, повышали и насколько большие потери оказались?
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
sandy писал(а):Покажите код, где вы пытались повышать частоту дискретизации.
Вот сам скрипт:
Код: Выделить всё
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;
Функция Demodulation:
Код: Выделить всё
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
Тут пока не реализована система синхронизации.
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
sandy писал(а):Во сколько раз, кстати, повышали и насколько большие потери оказались?
Повышал в 8 раз.
Знаете, сейчас промоделировал еще раз, кривые BER совпали. Видимо, где-то был какой-то косяк.
По идее данное увеличение ЧД не должно никаким образом влиять на BER, правильно?
Re: Влияние повышения ЧД на демодуляцию
Знаете, сейчас промоделировал еще раз, кривые BER совпали.
Вот и хорошо.
По идее данное увеличение ЧД не должно никаким образом влиять на BER, правильно?
Не должно.
С уважением
Александр Сергиенко
Александр Сергиенко
-
- Пользователь
- Сообщения: 29
- Зарегистрирован: Пн сен 17, 2018 9:58 pm
Re: Влияние повышения ЧД на демодуляцию
sandy писал(а):Знаете, сейчас промоделировал еще раз, кривые BER совпали.
Вот и хорошо.По идее данное увеличение ЧД не должно никаким образом влиять на BER, правильно?
Не должно.
Большое спасибо за помощь!