apsk-4调制解调 在matlab的代码
时间: 2024-05-13 21:17:36 浏览: 10
以下是APSK-4调制解调在MATLAB中的代码示例:
调制部分:
```matlab
clear all;
close all;
% 定义参数
M = 4; % 星座大小
Rsym = 1e6; % 符号速率
Rbit = Rsym * log2(M); % 每秒比特数
fc = 2e9; % 载波频率
Tsym = 1 / Rsym; % 符号周期
Ts = 1 / (10 * Rsym); % 采样时间
SNR = 20; % 信噪比
% 生成随机数据
data = randi([0 M-1], 1, 1000);
% 星座映射
constellation = sqrt(2 * Rbit) .* exp(1j * (2 * pi / M) .* data);
% APSK映射
r = [0.5 1 1.5 2]; % 各圆半径
theta = [-3*pi/4 -pi/4 pi/4 3*pi/4]; % 各圆角度
APSK = zeros(1, length(constellation));
for i = 1:length(constellation)
for j = 1:length(r)
if abs(constellation(i)) < r(j)
APSK(i) = exp(1j * theta(j));
break;
end
end
end
% 正交调制
I = real(APSK);
Q = imag(APSK);
t = (0:length(data)*Tsym-1) * Ts;
I_signal = cos(2 * pi * fc * t) .* I;
Q_signal = sin(2 * pi * fc * t) .* Q;
signal = I_signal + Q_signal;
% 加噪声
signal_noise = awgn(signal, SNR, 'measured');
% 绘图
figure;
subplot(2, 1, 1);
plot(I, Q, 'o');
title('星座图');
axis square;
grid on;
subplot(2, 1, 2);
plot(t, signal_noise);
title('APSK-4调制信号');
xlabel('时间 / s');
ylabel('幅值');
grid on;
```
解调部分:
```matlab
clear all;
close all;
% 定义参数
M = 4; % 星座大小
Rsym = 1e6; % 符号速率
Rbit = Rsym * log2(M); % 每秒比特数
fc = 2e9; % 载波频率
Tsym = 1 / Rsym; % 符号周期
Ts = 1 / (10 * Rsym); % 采样时间
SNR = 20; % 信噪比
% 生成随机数据
data = randi([0 M-1], 1, 1000);
% 星座映射
constellation = sqrt(2 * Rbit) .* exp(1j * (2 * pi / M) .* data);
% APSK映射
r = [0.5 1 1.5 2]; % 各圆半径
theta = [-3*pi/4 -pi/4 pi/4 3*pi/4]; % 各圆角度
APSK = zeros(1, length(constellation));
for i = 1:length(constellation)
for j = 1:length(r)
if abs(constellation(i)) < r(j)
APSK(i) = exp(1j * theta(j));
break;
end
end
end
% 正交调制
I = real(APSK);
Q = imag(APSK);
t = (0:length(data)*Tsym-1) * Ts;
I_signal = cos(2 * pi * fc * t) .* I;
Q_signal = sin(2 * pi * fc * t) .* Q;
signal = I_signal + Q_signal;
% 加噪声
signal_noise = awgn(signal, SNR, 'measured');
% 解调
I_demod = signal_noise .* cos(2 * pi * fc * t);
Q_demod = signal_noise .* sin(2 * pi * fc * t);
I_filter = lowpass(I_demod, 2 * Rsym, fc, 'Steepness', 0.95);
Q_filter = lowpass(Q_demod, 2 * Rsym, fc, 'Steepness', 0.95);
demod_signal = I_filter + 1j * Q_filter;
% 星座解映射
demod_data = zeros(1, length(data));
for i = 1:length(data)
error = abs(demod_signal(i) - constellation);
[min_error, index] = min(error);
demod_data(i) = index - 1;
end
% 绘图
figure;
subplot(2, 1, 1);
plot(I, Q, 'o');
title('星座图');
axis square;
grid on;
subplot(2, 1, 2);
plot(t, abs(demod_signal - APSK));
title('接收信号与星座点的距离');
xlabel('时间 / s');
ylabel('距离');
grid on;
```