分别对16QAM信号进行旁路干扰、碰撞干扰、频率扰动 写出MATLAB仿真代码
时间: 2023-05-30 19:04:59 浏览: 102
以下是对16QAM信号进行旁路干扰、碰撞干扰、频率扰动的MATLAB仿真代码:
1. 旁路干扰:
```matlab
clear all;
close all;
clc;
% 生成16QAM信号
N = 10000; % 信号长度
M = 16; % QAM调制阶数
data = randi([0 M-1], N, 1); % 随机生成调制符号
modData = qammod(data, M); % QAM调制
% 旁路干扰参数设置
SNR = 10; % 信噪比
f1 = 100; % 干扰信号频率
f2 = 200; % 干扰信号频率
A1 = 0.5; % 干扰信号幅度
A2 = 0.3; % 干扰信号幅度
% 产生干扰信号
t = (0:N-1)';
% 干扰信号1
x1 = A1*sin(2*pi*f1*t/N);
% 干扰信号2
x2 = A2*sin(2*pi*f2*t/N);
% 信号加上干扰
rxSig = awgn(modData, SNR, 'measured') + x1 + x2;
% 16QAM解调
demodData = qamdemod(rxSig, M);
% 绘制调制前后信号
subplot(2,1,1);
plot(real(modData), imag(modData), 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(real(rxSig), imag(rxSig), 'o');
grid on;
title('16QAM调制后');
% 绘制调制前后星座图
figure;
subplot(2,1,1);
plot(modData, 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(rxSig, 'o');
grid on;
title('16QAM调制后');
% 绘制误码率曲线
err = length(find(data~=demodData));
BER = err/N; % 计算误码率
disp(['误码率:',num2str(BER)]);
```
2. 碰撞干扰:
```matlab
clear all;
close all;
clc;
% 生成16QAM信号
N = 10000; % 信号长度
M = 16; % QAM调制阶数
data = randi([0 M-1], N, 1); % 随机生成调制符号
modData = qammod(data, M); % QAM调制
% 碰撞干扰参数设置
SNR = 10; % 信噪比
delay1 = 100; % 碰撞延迟
delay2 = 200; % 碰撞延迟
A1 = 0.5; % 碰撞信号幅度
A2 = 0.3; % 碰撞信号幅度
% 产生碰撞信号
t = (0:N-1)';
% 碰撞信号1
x1 = A1*[zeros(delay1,1);modData(1:N-delay1)];
% 碰撞信号2
x2 = A2*[zeros(delay2,1);modData(1:N-delay2)];
% 信号加上碰撞
rxSig = awgn(modData, SNR, 'measured') + x1 + x2;
% 16QAM解调
demodData = qamdemod(rxSig, M);
% 绘制调制前后信号
subplot(2,1,1);
plot(real(modData), imag(modData), 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(real(rxSig), imag(rxSig), 'o');
grid on;
title('16QAM调制后');
% 绘制调制前后星座图
figure;
subplot(2,1,1);
plot(modData, 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(rxSig, 'o');
grid on;
title('16QAM调制后');
% 绘制误码率曲线
err = length(find(data~=demodData));
BER = err/N; % 计算误码率
disp(['误码率:',num2str(BER)]);
```
3. 频率扰动:
```matlab
clear all;
close all;
clc;
% 生成16QAM信号
N = 10000; % 信号长度
M = 16; % QAM调制阶数
data = randi([0 M-1], N, 1); % 随机生成调制符号
modData = qammod(data, M); % QAM调制
% 频率扰动参数设置
SNR = 10; % 信噪比
f0 = 10; % 基准频率
df = 0.1; % 频率偏移
% 产生频率扰动
t = (0:N-1)';
freq = f0*(1+df*sin(2*pi*t/N)); % 频率扰动信号
rxSig = modData.*exp(1j*2*pi*freq); % 信号加上频率扰动
% 16QAM解调
demodData = qamdemod(rxSig, M);
% 绘制调制前后信号
subplot(2,1,1);
plot(real(modData), imag(modData), 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(real(rxSig), imag(rxSig), 'o');
grid on;
title('16QAM调制后');
% 绘制调制前后星座图
figure;
subplot(2,1,1);
plot(modData, 'o');
grid on;
title('16QAM调制前');
subplot(2,1,2);
plot(rxSig, 'o');
grid on;
title('16QAM调制后');
% 绘制误码率曲线
err = length(find(data~=demodData));
BER = err/N; % 计算误码率
disp(['误码率:',num2str(BER)]);
```
阅读全文