fsk解调调制Matlab示例
时间: 2023-10-04 11:07:39 浏览: 45
以下是一个简单的FSK解调调制的Matlab示例:
```matlab
% 生成两个频率的信号
fs = 1000; % 采样率
f1 = 100; % 低频率
f2 = 200; % 高频率
t = 0:1/fs:1; % 时间向量
signal = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 生成信号
% FSK调制
bitstream = [0 1 0 1 0 1 0 1 0 1]; % 待调制的比特流
f0 = 100; % 低频率
f1 = 200; % 高频率
fsk_signal = zeros(1, length(t));
for i = 1:length(bitstream)
if bitstream(i) == 0
fsk_signal((i-1)*fs+1:i*fs) = sin(2*pi*f0*t((i-1)*fs+1:i*fs));
else
fsk_signal((i-1)*fs+1:i*fs) = sin(2*pi*f1*t((i-1)*fs+1:i*fs));
end
end
% FSK解调
demod_signal = zeros(1, length(bitstream));
for i = 1:length(bitstream)
% 计算傅里叶变换
Y = fft(fsk_signal((i-1)*fs+1:i*fs));
P2 = abs(Y/fs);
P1 = P2(1:floor(length(Y)/2)+1);
P1(2:end-1) = 2*P1(2:end-1);
f = fs*(0:floor(length(Y)/2))/length(Y);
% 判断频率
if f(P1==max(P1)) == f0
demod_signal(i) = 0;
else
demod_signal(i) = 1;
end
end
% 显示结果
subplot(3,1,1)
plot(t, signal)
title('原始信号')
subplot(3,1,2)
plot(t, fsk_signal)
title('FSK调制信号')
subplot(3,1,3)
stairs(bitstream, 'linewidth', 2)
hold on
stairs(demod_signal, 'r', 'linewidth', 2)
title('解调结果')
legend('原始比特流', '解调比特流')
```
该示例中,首先生成了包含两个不同频率的信号,然后进行FSK调制,将待调制的比特流映射到不同频率的正弦波上。接着进行FSK解调,通过计算傅里叶变换判断每一段信号所对应的频率,进而确定解调出的比特流。最后,通过绘制原始信号、调制信号和解调结果,可以直观地观察到解调的效果。