调制
sps = 8;
RolloffFactor = 0.2;
FilterSpanInSymbols = 10;
bits = randi([0, 1], 224*8, 1); % 1792
symbols = bits*2 - 1; % 1792
re = -symbols(2:2:end); % 896
im = -symbols(1:2:end); % 896
pFilterTx = comm.RaisedCosineTransmitFilter(...
'Shape', 'Square root', ...
'RolloffFactor', RolloffFactor, ...
'FilterSpanInSymbols', FilterSpanInSymbols, ...
'OutputSamplesPerSymbol', sps, ...
'Gain', sqrt(sps/2));
filtered = pFilterTx([re im]);% 896 * sps = 3584
filteredRe = filtered(:, 1);
filteredIm = filtered(:, 2);
% oqpskWaveform = complex(filteredRe, filteredIm);
% oqpskWaveform = complex(filteredRe, filteredAligned);
oqpskWaveform = complex(...
[filteredRe ; zeros(sps/2, 1)], ...
[zeros(sps/2, 1) ; filteredIm]); % 3586 * 2
查看TX的中间状态
% 绘制相位图
plot(unwrap(angle(oqpskWaveform)),'o-')
% 绘制IQ图
plot(1:length(oqpskWaveform),real(oqpskWaveform),1:length(oqpskWaveform),imag(oqpskWaveform))
% 频谱图
plot(abs(fftshift(fft(oqpskWaveform))))
% 星座图
scatterplot(oqpskWaveform);
信道
snr = 7;
rxWaveform = awgn(oqpskWaveform,snr);
解调
pFilterRx = comm.RaisedCosineReceiveFilter(...
'Shape', 'Square root', ...
'RolloffFactor', RolloffFactor, ...
'FilterSpanInSymbols', FilterSpanInSymbols, ...
'InputSamplesPerSymbol', sps, ...
'DecimationFactor', sps, ...
'DecimationOffset', sps/2, ...
'Gain', sqrt(sps/2));
alignedRx = complex(...
[zeros(sps/2, 1); real(rxWaveform)], ...
[imag(rxWaveform);zeros(sps/2, 1)]); % 3588 * 2
filteredRx = pFilterRx(alignedRx); % 3588/4 = 897
demodulatedRx = qamdemod(filteredRx, 4, [1 3 0 2]); % 897
outputBits = int2bit(demodulatedRx, 2); % 1792
BER
delay = 2 * FilterSpanInSymbols; % 20
[~, ber] = biterr(bits(1:end-delay), outputBits(delay+1:end-2))