gmsk在AWGN信道下误码率仿真matlab
时间: 2023-10-08 07:11:03 浏览: 171
测试GMSK在 AGWN信道的误码性能
以下是一个GMSK在AWGN信道下的误码率仿真MATLAB代码示例,包括调、解调和误码率仿真部分:
```matlab
% 设置参数
fs = 100e3; % 采样频率
T = 1/fs; % 采样周期
fc = 10e3; % 载波频率
BT = 0.3; % 高斯滤波器带宽时间积
Rb = 2e3; % 符号速率
N = 10^4; % 发送符号数量
EbNo_dB = 0:2:12; % 信噪比范围
% 生成发送符号序列
data = randi([0, 1], 1, N);
data(data == 0) = -1;
% 高斯滤波器
t = -5*BT*T:T:T*5*BT; % 时域范围
h = (1/sqrt(2*pi*BT^2))*exp(-t.^2/(2*BT^2)); % 高斯脉冲
h = h/sum(abs(h)); % 归一化处理
% GMSK调制
x = zeros(1, length(data)*fs/Rb);
phi = 0;
for i = 1:N
f_dev = (2*data(i)-1)*Rb/2;
phi_dev = 2*pi*f_dev/T;
phi = phi + phi_dev*T;
y = cos(2*pi*fc*t+phi).*h;
x((i-1)*fs/Rb+1:i*fs/Rb) = y(1:fs/Rb);
end
% AWGN信道
for k = 1:length(EbNo_dB)
Eb = sum(abs(x).^2)/(length(x));
EbNo = 10^(EbNo_dB(k)/10);
N0 = Eb/EbNo;
noise = sqrt(N0/2)*(randn(1, length(x))+1i*randn(1, length(x)));
y = x + noise;
% GMSK解调
data_hat = zeros(1, N);
phi = 0;
for i = 1:N
y_seg = y((i-1)*fs/Rb+1:i*fs/Rb).*h;
y_seg = y_seg(1:end-1); % 去除最后一个采样点
phi_dev = angle(y_seg(end)*conj(y_seg(end-1)));
phi = phi + phi_dev;
data_hat(i) = (phi > 0);
end
% 计算误码率
error = sum(data ~= data_hat);
ber(k) = error/N;
end
% 绘制误码率曲线
semilogy(EbNo_dB, ber, 'b-o');
xlabel('Eb/No (dB)');
ylabel('BER');
ylim([1e-6, 1]);
grid on;
```
在上述代码中,首先生成随机的发送比特序列,然后进行GMSK调制,再加入AWGN信道进行传输,最后进行GMSK解调并计算误码率。通过改变Eb/No范围,可以得到不同信噪比下的误码率。此外,代码中还包括高斯滤波器的设计和符号时域序列的采样等实现。
阅读全文