matlab完成4-PSK、16-PSK仿真
时间: 2024-01-07 19:03:02 浏览: 92
4PSK_蒙特卡洛仿真_matlab
5星 · 资源好评率100%
以下是matlab的代码实现:
```matlab
% 4-PSK和16-PSK的仿真
M = [4, 16]; % 符号数
k = log2(M); % 每个符号的比特数
Fs = 1000; % 采样率
fc = 10; % 载波频率
T = 1/Fs; % 采样间隔
t = 0:T:1-T; % 时间序列
fcos = cos(2*pi*fc*t); % 载波
% 生成符号序列
data = randi([0 M(1)-1], 1, 100); % 生成100个随机符号
symbols_4psk = pskmod(data, M(1)); % 对符号进行4-PSK调制
data = randi([0 M(2)-1], 1, 100); % 生成100个随机符号
symbols_16psk = pskmod(data, M(2)); % 对符号进行16-PSK调制
% 将符号序列转换为数字信号
bits = de2bi(data, k(1)); % 将符号转换为比特
tx_4psk = reshape(bits', 1, []); % 将比特序列转换为行向量
bits = de2bi(data, k(2)); % 将符号转换为比特
tx_16psk = reshape(bits', 1, []); % 将比特序列转换为行向量
% 通过AWGN信道发送数字信号
SNR = 10; % 信噪比
rx_4psk = awgn(tx_4psk, SNR, 'measured'); % 添加高斯噪声
rx_16psk = awgn(tx_16psk, SNR, 'measured'); % 添加高斯噪声
% 将数字信号转换为符号序列
rx_bits_4psk = reshape(rx_4psk, k(1), [])'; % 将比特序列转换为列向量
rx_data_4psk = bi2de(rx_bits_4psk); % 将比特转换为符号
rx_bits_16psk = reshape(rx_16psk, k(2), [])'; % 将比特序列转换为列向量
rx_data_16psk = bi2de(rx_bits_16psk); % 将比特转换为符号
% 对接收到的符号进行解调
rx_symbols_4psk = pskdemod(rx_data_4psk, M(1)); % 进行4-PSK解调
rx_symbols_16psk = pskdemod(rx_data_16psk, M(2)); % 进行16-PSK解调
% 绘制调制前后的星座图
subplot(2,2,1);
plot(symbols_4psk, 'o');
title('4-PSK 调制前');
subplot(2,2,2);
plot(rx_symbols_4psk, 'o');
title('4-PSK 调制后');
subplot(2,2,3);
plot(symbols_16psk, 'o');
title('16-PSK 调制前');
subplot(2,2,4);
plot(rx_symbols_16psk, 'o');
title('16-PSK 调制后');
% 计算误码率
[num_4psk, ber_4psk] = biterr(data, rx_data_4psk);
[num_16psk, ber_16psk] = biterr(data, rx_data_16psk);
fprintf('4-PSK 误码率 = %f\n', ber_4psk);
fprintf('16-PSK 误码率 = %f\n', ber_16psk);
```
这段代码实现了4-PSK和16-PSK的仿真,包括生成符号序列、将符号序列转换为数字信号、通过AWGN信道发送数字信号、将数字信号转换为符号序列、对接收到的符号进行解调、绘制调制前后的星座图以及计算误码率。其中,载波频率为10Hz,每个符号周期内采样100个点,符号周期为1s,信噪比为10dB。
阅读全文