1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| clc; clear; close all
Rs = 100e6; sps = 4; fs = sps * Rs; alfs = 0.35; data_len = 1e4; M = 4; offset = pi / 4; rng(9);
bit_send = randi([0 1], 1, data_len);
data = bit2int(bit_send.', log2(M)).';
data_mod = pskmod(data, M, offset); scatterplot(data_mod); title('QPSK-Constellation Diagram');
n = 10; C = 435; tap_set = [1 0 0 0 0 0 0 1 0 0 1];
m_sequence = 1 - 2 * [m_serial_generator(tap_set) 0]; data_matrix = (m_sequence.') .* data_mod; data_dsss = reshape(data_matrix, 1, []);
Fir_rcos = rcosdesign(alfs, 8, sps, 'sqrt'); data_qpsk = conv(upsample(data_mod, sps), Fir_rcos); data_dsss_up = upsample(data_dsss, sps); data_dsss_shape = conv(data_dsss_up, Fir_rcos);
snr = 10; data_qpsk_awgn = awgn(data_qpsk, snr, 'measured'); data_awgn = awgn(data_dsss_shape, snr, 'measured');
data_qpsk_matched = conv(data_qpsk_awgn, Fir_rcos); m_sequence_up = upsample(fliplr(m_sequence), sps); Fir_match = conv(m_sequence_up, Fir_rcos); data_matched = conv(data_awgn, Fir_match);
data_qpsk_matched_down = data_qpsk_matched(33:sps:end - 32); scatterplot(data_qpsk_matched_down); title('SNR=10dB QPSK无扩频'); data_matched_down = data_matched(4125:sps * 1024:end - 4124); scatterplot(data_matched_down); title('SNR=10dB QPSK有扩频'); data_qpsk_demod = pskdemod(data_qpsk_matched_down, M, offset); bit_qpsk = int2bit(data_qpsk_demod.', log2(M)).'; bit_error = biterr(bit_send, bit_qpsk); disp(['QPSK Bit Error = ', num2str(bit_error)]); ber = bit_error / data_len; disp(['QPSK BER = ', num2str(ber)]); data_demod = pskdemod(data_matched_down, M, offset); bit_recv = int2bit(data_demod.', log2(M)).'; bit_error = biterr(bit_send, bit_recv); disp(['QPSK-DSSS Bit Error = ', num2str(bit_error)]); ber = bit_error / data_len; disp(['QPSK-DSSS BER = ', num2str(ber)]);
fft_n = 16384; f_1 = (-fft_n / 2:fft_n / 2 - 1) ./ fs; f_2 = (-fft_n / 2:fft_n / 2 - 1) * 1024 ./ fs; data_qpsk_awgn_fft = fft(data_qpsk_awgn, fft_n); data_awgn_fft = fft(data_awgn, fft_n); figure; plot(f_1, 20 * log10(abs(fftshift(data_qpsk_awgn_fft)) / fft_n), 'r'); hold on; plot(f_2, 20 * log10(abs(fftshift(data_awgn_fft)) / fft_n), 'b'); grid on; xlabel('Frequency (Hz)'); ylabel('Power (dB)'); legend('QPSK', 'QPSK-DSSS');
function [m] = m_serial_generator(tap_set) L = 2 ^ (length(tap_set) - 1) - 1; x = [zeros(1, (length(tap_set) - 2)) 1]; for i = 1:L m(i) = x(end); for j = 1:length(tap_set) - 1 sum_vector(j) = tap_set(j + 1) * x(j); end sum_x = mod(sum(sum_vector), 2); x = [sum_x x(1:end - 1)]; end end
|