画出系统各点的时域图和频域图。注意:matlab编程过程中,调制和解调的实现不能直接采用子函数。
时间: 2024-02-27 19:52:53 浏览: 56
对于 2FSK 调制解调,可以按照以下步骤进行编程实现,并画出系统各点的时域图和频域图:
1. 生成二进制信源
```matlab
% 生成随机的二进制信源
N = 1000; % 信源长度
bits = randi([0 1], 1, N);
```
2. 进行 2FSK 调制
```matlab
% 设置调制参数
f1 = 10; % 第一个频率
f2 = 20; % 第二个频率
fs = 100; % 采样率
T = 1/fs; % 采样周期
t = 0:T:(N-1)*T; % 时间序列
% 进行 2FSK 调制
s = zeros(1, N*fs);
for i = 1:N
if bits(i) == 0
s((i-1)*fs+1:i*fs) = sin(2*pi*f1*t);
else
s((i-1)*fs+1:i*fs) = sin(2*pi*f2*t);
end
end
```
3. 添加高斯噪声
```matlab
% 设置信噪比
SNR = 15; % 信噪比为 15 dB
% 计算噪声功率
Ps = mean(s.^2);
Pn = Ps / (10^(SNR/10));
% 添加高斯噪声
noise = sqrt(Pn) * randn(1, length(s));
r = s + noise;
```
4. 进行 2FSK 解调
```matlab
% 进行 2FSK 解调
fdev = 5; % 频偏
x = hilbert(r) .* exp(-1i*2*pi*f1*t); % 相乘得到解调信号
x = x(1:fdev:end); % 降采样
x = real(x); % 取实部
```
5. 画出系统各点的时域图和频域图
```matlab
% 画出系统各点的时域图和频域图
figure;
subplot(4, 1, 1);
plot(t, s);
title('原始信号');
subplot(4, 1, 2);
plot(t, r);
title('加噪声后的信号');
subplot(4, 1, 3);
plot(t(1:fdev:end), x);
title('解调信号');
subplot(4, 1, 4);
NFFT = 2^nextpow2(length(s));
Y = fft(s, NFFT)/length(s);
f = fs/2*linspace(0, 1, NFFT/2+1);
plot(f, 2*abs(Y(1:NFFT/2+1)));
title('原始信号的频谱');
% 注意:根据需要,可以将上述代码封装为函数,以便进行多次调用和测试。
```
阅读全文