MSK调制解调和误码率 MATLAB代码
时间: 2023-08-26 16:05:31 浏览: 151
基于MSK调制解调和GMSK调制解调系统的MATLAB误码率仿真,含仿真操作录像
5星 · 资源好评率100%
MSK调制是一种连续相位调制,它将数字信号转换为连续的正弦波信号。与GMSK不同的是,MSK调制的相位变化是线性的,其调制波形更加平滑。下面提供MSK调制解调的MATLAB代码示例:
MSK调制:
```matlab
% MSK调制
fc = 1000; %载波频率
fs = 10000; %采样率
T = 1/fs; %采样时间
fc1 = 2000; %转换频率
N = 100; %符号数
t = 0:T:(N-1)*T; %时间序列
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
s = zeros(1,length(t)); %初始化调制信号
for n = 1:N
if d(n) == -1
s((n-1)*fs/fc+1:n*fs/fc) = cos(2*pi*fc1*t((n-1)*fs/fc+1:n*fs/fc));
else
s((n-1)*fs/fc+1:n*fs/fc) = -cos(2*pi*fc1*t((n-1)*fs/fc+1:n*fs/fc));
end
end
plot(t,s); %绘制MSK调制波形图
xlabel('时间/s');
ylabel('幅度');
title('MSK调制波形图');
```
MSK解调:
```matlab
% MSK解调
fc = 1000; %载波频率
fs = 10000; %采样率
T = 1/fs; %采样时间
fc1 = 2000; %转换频率
N = 100; %符号数
t = 0:T:(N-1)*T; %时间序列
d = randi([0 1],1,N); %随机产生0、1比特序列
d(d==0) = -1; %将0映射为-1
s = zeros(1,length(t)); %初始化调制信号
for n = 1:N
if d(n) == -1
s((n-1)*fs/fc+1:n*fs/fc) = cos(2*pi*fc1*t((n-1)*fs/fc+1:n*fs/fc));
else
s((n-1)*fs/fc+1:n*fs/fc) = -cos(2*pi*fc1*t((n-1)*fs/fc+1:n*fs/fc));
end
end
s1 = [0 s]; %加0操作
s2 = [s 0];
s3 = s1.*s2; %乘积运算
h = fir1(100,fc/fs*2); %设计LPF滤波器
y = filter(h,1,s3); %滤波
y1 = y(101:end); %去除滤波器延迟
d1 = zeros(1,length(y1)); %初始化解调比特序列
for n = 1:N
if y1((n-1)*fs/fc+1) > 0
d1(n) = -1;
else
d1(n) = 1;
end
end
BER = sum(d~=d1)/N; %误码率计算
disp(['误码率为:' num2str(BER)]);
```
上述代码中,加0操作和乘积运算实现了MSK解调的关键步骤。滤波器的设计和滤波实现了解调过程中的低通滤波。误码率通过比较随机产生的比特序列和解调后得到的比特序列来计算。
阅读全文