Я хочу отобразить форму сигнала, передаваемого через канал AWGN, поэтому я следовал этим блок-схемам и ссылался на этот сайт, затем закончил эту программу.
(http://drmoazzam.com/matlab-code-bpsk-modulation-and-demodulation-with-explanation/)
Я отправил битовый поток 1 и 0, всего два бита. Установите энергию символа на бит Es = 1, битовую скорость Ts = 1 и несущую частоту fc = 2. Я закодировал битовый поток в биполярный не-обращения к нулю, затем модулирует его в сигнал BPSK.
Когда сигнал был получен, используется когерентное обнаружение для его демодуляции. Для проверки моей программы (Кажется, правильно отображатьосциллограмма. После модуляции 1 и 0 фаза двух осциллограмм сдвинута друг на друга на 180º, как показано на рисунке.) Я рассчитал BER. BER зависит от SNR. Однако я установил SNR = 1 дБ, BER по-прежнему равен 0 (SNR = 1, finalber = 0). Это не имеет смысла. Я не знаю, почему это так. Кто может помочь мне проверить? Спасибо
clc;
clear all;
% BPSK trapz
for kk=1:1000
bitstream=[1 0 ];
%% modulate: BPSK
Es=1;% symbol energy per bit
Ts=1; %Bit rate is assumed to be 1 bit/s;
fc=2; % carrier frequency
d=0.01; % sampled interval
tc=[0:d:0.99];
n=1;
symbolbits=1; % how many bits in a symbol, BPSK=1,QPSK=2
NRZ=2*bitstream-1; % non-return-to-zero line code,bit 1 ->1 , bit 0 ->-1
for i=1:symbolbits:length(bitstream)
s(1,(n-1)*length(tc)+1:n*length(tc))=NRZ(i)*sqrt(2/Ts)*cos(2*pi*fc*tc);
n=n+1;
end
%% through AWGN channnel
SNR=20; % SNR in dB
snr=10^(SNR/10);
E=sum(abs(s).^2)/length(s); %signal energy
N0=E/snr; % noise spectral density
noise=sqrt(N0)*(randn(1,length(s))); % s is real value signal
received=s+noise;
%% coherent detection
for i=1:length(received)/length(tc)
Qr(1,(i-1)*length(tc)+1:i*length(tc))=received((i-1)*length(tc)+1:i*length(tc)).*(sqrt(2/Ts)*cos(2*pi*fc*tc));
end
m=1;
y=[];
time=[0:d:1.99];
for i=1:2
y(1,i)=trapz(time((i-1)*100+1:i*100),Qr((i-1)*100+1:i*100));
end
detected=y;
for i=1:length(detected)
if detected(i)>0
demod(i)=1;
else
demod(i)=0;
end
end
ber(1,kk)=sum(demod~=bitstream)/length(bitstream);
end
finalber=sum(ber)/1000;
figure(1)
time=[0:d:1.99];
subplot(3,1,1); plot(time,s); title('transmitted BPSK signal')
subplot(3,1,2); plot(time,received); title('received BPSK signal')
subplot(3,1,3); plot(time,Qr)