GMSK在AWGN,单径瑞利信道和多径信道的调制解调和误码率曲线 MATLAB代码
时间: 2023-09-28 13:05:45 浏览: 145
下面是GMSK在AWGN、单径瑞利信道和多径信道下的调制解调和误码率曲线的MATLAB代码:
GMSK调制:
```matlab
% GMSK调制
fc = 1000; %载波频率
fs = 10000; %采样率
T = 1/fs; %采样时间
BT = 0.3; %带限时间乘积
fc1 = 2*BT/T; %高斯滤波器截止频率
N = 1000; %符号数
t = 0:T:(N-1)*T; %时间序列
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
y = zeros(1,length(t)); %初始化调制信号
y(1) = d(1); %初相
for n = 2:N
y(n) = y(n-1)*exp(-1j*pi*BT*(n-1)*T)*(1j*d(n-1)) + conj(y(n-1))*exp(1j*pi*BT*(n-1)*T)*(1j*d(n));
end
s = real(y.*exp(1j*2*pi*fc*t)); %加上载波
```
GMSK解调:
```matlab
% GMSK解调
fc = 1000; %载波频率
fs = 10000; %采样率
T = 1/fs; %采样时间
BT = 0.3; %带限时间乘积
fc1 = 2*BT/T; %高斯滤波器截止频率
N = 1000; %符号数
t = 0:T:(N-1)*T; %时间序列
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
y = zeros(1,length(t)); %初始化调制信号
y(1) = s(1); %初相
for n = 2:N
y(n) = y(n-1)*exp(-1j*2*pi*fc*T)*(1j*s(n-1)) + conj(y(n-1))*exp(1j*2*pi*fc*T)*(1j*s(n));
end
h = gaussdesign(BT,1/fs); %设计高斯滤波器
y1 = conv(y,h,'same'); %滤波
y2 = y1(1:fs/fc:end); %下采样
y3 = y2(1:N-1).*conj(y2(2:N)); %乘积运算
d1 = zeros(1,length(y3)); %初始化解调比特序列
for n = 1:length(y3)
if real(y3(n)) > 0
d1(n) = 1;
else
d1(n) = 0;
end
end
BER = sum(d~=d1)/N; %误码率计算
disp(['误码率为:' num2str(BER)]);
```
GMSK在AWGN信道下的误码率曲线:
```matlab
% GMSK在AWGN信道下的误码率曲线
EbN0 = -5:1:15; %信噪比范围
N = 1000; %符号数
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
BER = zeros(1,length(EbN0)); %误码率
for i = 1:length(EbN0)
SNR = EbN0(i) + 10*log10(2*BT/T);
s = awgn(GMSK_modulation(d,T,fc,BT),SNR,'measured'); %加入AWGN噪声
d1 = GMSK_demodulation(s,T,fc,BT); %解调
BER(i) = sum(d~=d1)/N; %计算误码率
end
semilogy(EbN0,BER); %绘制误码率曲线
xlabel('Eb/N0(dB)');
ylabel('BER');
title('GMSK在AWGN信道下的误码率曲线');
```
GMSK在单径瑞利信道下的误码率曲线:
```matlab
% GMSK在单径瑞利信道下的误码率曲线
EbN0 = -5:1:15; %信噪比范围
N = 1000; %符号数
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
BER = zeros(1,length(EbN0)); %误码率
for i = 1:length(EbN0)
SNR = EbN0(i) + 10*log10(2*BT/T);
s = rayleighchan(T,fc,1,0); %创建瑞利信道
s.StoreHistory = 1; %存储信道历史
y = filter(s,s.GaussianNoise(GMSK_modulation(d,T,fc,BT),SNR)); %加入瑞利信道和噪声
s = s.ResetBeforeFiltering; %重置信道
d1 = GMSK_demodulation(y,T,fc,BT); %解调
BER(i) = sum(d~=d1)/N; %计算误码率
end
semilogy(EbN0,BER); %绘制误码率曲线
xlabel('Eb/N0(dB)');
ylabel('BER');
title('GMSK在单径瑞利信道下的误码率曲线');
```
GMSK在多径信道下的误码率曲线:
```matlab
% GMSK在多径信道下的误码率曲线
EbN0 = -5:1:15; %信噪比范围
N = 1000; %符号数
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
BER = zeros(1,length(EbN0)); %误码率
for i = 1:length(EbN0)
SNR = EbN0(i) + 10*log10(2*BT/T);
s = rayleighchan(T,fc,[0 1e-5 1],[0 -20 -30]); %创建多径信道
s.StoreHistory = 1; %存储信道历史
y = filter(s,s.GaussianNoise(GMSK_modulation(d,T,fc,BT),SNR)); %加入多径信道和噪声
s = s.ResetBeforeFiltering; %重置信道
d1 = GMSK_demodulation(y,T,fc,BT); %解调
BER(i) = sum(d~=d1)/N; %计算误码率
end
semilogy(EbN0,BER); %绘制误码率曲线
xlabel('Eb/N0(dB)');
ylabel('BER');
title('GMSK在多径信道下的误码率曲线');
```
其中,`GMSK_modulation`和`GMSK_demodulation`函数分别实现了GMSK调制和解调的过程。在多径信道下的信道模型使用了`rayleighchan`函数,其中`[0 1e-5 1]`表示多径强度,`[0 -20 -30]`表示多径相对时延。
阅读全文