基于matlab的2FSK的数字调制和解调仿真
时间: 2023-10-17 14:05:34 浏览: 156
首先,我们需要了解2FSK数字调制和解调的基本原理。2FSK是一种频移键控调制(FSK)技术,它将数字信息转换为频率信号。在2FSK调制中,两个数字信号分别被映射到两个不同的频率上,因此它也被称为二进制频率键控(BFSK)调制。在接收端,通过检测信号频率的变化来实现解调。
以下是基于MATLAB的2FSK数字调制和解调仿真的步骤:
1.生成数字信息信号
使用MATLAB的randi函数生成随机的二进制数字信息信号,并将其转换为+1/-1的数字信号。例如,我们可以生成一个长度为100的二进制数字信号:
```matlab
info = randi([0 1],1,100);
info(info==0) = -1;
```
2.生成调制信号
将数字信息信号映射到两个不同的频率上,生成调制信号。在2FSK调制中,这些频率通常是两个固定的值。例如,我们可以将数字1映射到频率f1=100 Hz,数字0映射到频率f2=200 Hz:
```matlab
f1 = 100; %Hz
f2 = 200; %Hz
fs = 2000; %采样率
t = 0:1/fs:length(info)/fs-1/fs;
mod_signal = zeros(1,length(t));
for i=1:length(info)
if info(i) == 1
mod_signal((i-1)*fs+1:i*fs) = cos(2*pi*f1*t((i-1)*fs+1:i*fs));
else
mod_signal((i-1)*fs+1:i*fs) = cos(2*pi*f2*t((i-1)*fs+1:i*fs));
end
end
```
3.加入噪声
在实际通信中,信号会受到各种干扰和噪声的影响。因此,我们需要在调制信号中加入一定程度的高斯白噪声。例如,我们可以使用MATLAB的awgn函数在调制信号中加入10 dB的噪声:
```matlab
snr = 10; %dB
mod_signal_noise = awgn(mod_signal,snr,'measured');
```
4.解调信号
在接收端,我们需要对接收到的信号进行解调,以恢复数字信息信号。在2FSK解调中,我们可以通过检测信号频率的变化来实现。例如,我们可以将接收到的信号与频率f1和f2的正弦波进行相乘,然后对结果进行积分,以得到解调后的数字信号:
```matlab
demod_signal = zeros(1,length(info));
for i=1:length(info)
t = (i-1)*fs+1:i*fs;
x_t = mod_signal_noise(t);
m1 = x_t.*sin(2*pi*f1*t);
m2 = x_t.*sin(2*pi*f2*t);
if sum(m1) > sum(m2)
demod_signal(i) = 1;
else
demod_signal(i) = -1;
end
end
```
5.绘制结果
我们可以使用MATLAB的plot函数绘制数字信息信号、调制信号、加噪声后的调制信号和解调后的数字信号:
```matlab
subplot(4,1,1);
plot(info);
title('数字信息信号');
subplot(4,1,2);
plot(mod_signal);
title('调制信号');
subplot(4,1,3);
plot(mod_signal_noise);
title('加噪声后的调制信号');
subplot(4,1,4);
plot(demod_signal);
title('解调后的数字信号');
```
完整的MATLAB代码如下:
```matlab
clear all; clc; close all;
info = randi([0 1],1,100);
info(info==0) = -1;
f1 = 100; %Hz
f2 = 200; %Hz
fs = 2000; %采样率
t = 0:1/fs:length(info)/fs-1/fs;
mod_signal = zeros(1,length(t));
for i=1:length(info)
if info(i) == 1
mod_signal((i-1)*fs+1:i*fs) = cos(2*pi*f1*t((i-1)*fs+1:i*fs));
else
mod_signal((i-1)*fs+1:i*fs) = cos(2*pi*f2*t((i-1)*fs+1:i*fs));
end
end
snr = 10; %dB
mod_signal_noise = awgn(mod_signal,snr,'measured');
demod_signal = zeros(1,length(info));
for i=1:length(info)
t = (i-1)*fs+1:i*fs;
x_t = mod_signal_noise(t);
m1 = x_t.*sin(2*pi*f1*t);
m2 = x_t.*sin(2*pi*f2*t);
if sum(m1) > sum(m2)
demod_signal(i) = 1;
else
demod_signal(i) = -1;
end
end
subplot(4,1,1);
plot(info);
title('数字信息信号');
subplot(4,1,2);
plot(mod_signal);
title('调制信号');
subplot(4,1,3);
plot(mod_signal_noise);
title('加噪声后的调制信号');
subplot(4,1,4);
plot(demod_signal);
title('解调后的数字信号');
```