用matlab产生一个长100的01序列作图,然后进行FSK调制后作图,调制的第一个频率为100,第二个频率为200。产生一个跳频序列,频率在50,100,150,200,250跳变,做出跳频图案的图像。将经过调制的FSK信号与跳频信号相乘并作图。然后信号经过解跳解调后经过滤波恢复成初始信号并做图。最后计算恢复之后信号的误码率,并作图
时间: 2024-02-19 14:03:27 浏览: 20
好的,下面是针对您的问题的matlab代码实现:
1. 生成01序列并进行FSK调制,绘制图像
```matlab
% 生成01序列
seq = randi([0 1], 1, 100);
% FSK调制
fsk = fskmod(seq, [100 200], 1, 1);
% 绘制图像
figure(1)
subplot(2,1,1)
stem(seq)
title('01序列')
subplot(2,1,2)
plot(fsk)
title('FSK调制信号')
```
2. 生成跳频序列并绘制图像
```matlab
% 生成跳频序列
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间序列
f = [50 100 150 200 250]; % 跳变的频率
hop = randi(length(f), 1, length(t)); % 生成跳频序列
hop_seq = f(hop); % 将跳频序列映射到频率上
% 绘制跳频图案
figure(2)
plot(t, hop_seq)
title('跳频序列')
xlabel('时间 (s)')
ylabel('频率 (Hz)')
```
3. 将FSK信号和跳频信号相乘并作图
```matlab
% 将FSK信号和跳频信号相乘
mix = fsk .* hop_seq;
% 绘制混合信号图像
figure(3)
plot(mix)
title('混合信号')
```
4. 解跳解调并进行滤波,绘制图像
```matlab
% 解跳
hop_seq_recover = zeros(1, length(t));
hop_seq_recover(1) = hop_seq(1);
for i=2:length(t)
if hop(i) ~= hop(i-1)
hop_seq_recover(i) = hop_seq(i);
else
hop_seq_recover(i) = hop_seq_recover(i-1);
end
end
% FSK解调
fsk_recover = fskdemod(mix, [100 200], 1, 1);
% 滤波
[b,a] = butter(6, 0.1);
fsk_recover_filtered = filter(b, a, fsk_recover);
% 绘制图像
figure(4)
subplot(3,1,1)
plot(t, hop_seq_recover)
title('解跳后的跳频序列')
xlabel('时间 (s)')
ylabel('频率 (Hz)')
subplot(3,1,2)
plot(fsk_recover)
title('FSK解调信号')
subplot(3,1,3)
plot(fsk_recover_filtered)
title('滤波后的信号')
```
5. 计算误码率并绘制图像
```matlab
% 计算误码率
err = sum(abs(seq - round(fsk_recover_filtered)))/length(seq);
fprintf('误码率为:%f\n', err);
% 绘制图像
figure(5)
subplot(2,1,1)
stem(seq)
title('原始01序列')
subplot(2,1,2)
stem(round(fsk_recover_filtered))
title('恢复后的01序列')
```
以上就是实现这些功能的matlab代码,您可以将其整合到一个m文件中运行。需要注意的是,由于每次生成的随机数不同,每次运行的结果也会不同。