matlab生成独立等概的二进制信源,生成载波信号,并对该信源进行ook调制和2psk调制,绘制出波形和功率谱,写出它的matlab代码
时间: 2024-12-29 08:32:53 浏览: 22
在MATLAB中,我们可以使用`randi`函数生成独立等概的二进制信源,然后通过`cos`或`sin`函数创建载波信号,再进行OOK(On-Off Keying)和2PSK(Phase Shift Keying)调制。以下是示例代码:
```matlab
% 设置参数
num_bits = 1000; % 信源比特数
carrier_freq = 1000; % 载波频率 (Hz)
sample_rate = 4 * carrier_freq; % 样本率 (确保采样频率大于两倍载波频率)
bit_period = 1 / carrier_freq; % 每个比特的时间长度 (秒)
% 生成随机二进制信源
bits = randi([0 1], num_bits, 1);
% 创建载波信号
t = (0:length(bits) - 1) / sample_rate; % 时间向量
carrier = cos(2*pi*carrier_freq*t); % 正弦载波
% OOK调制
OOK_signal = sign(carrier .* bits); % 非归零码调制,正对应1,负对应0
% 2PSK调制
theta = pi/4 * bits; % 相位偏移
2PSK_signal = cos(2*pi*(carrier_freq*t + theta)); % 2PSK调制后的信号
% 绘制波形
figure;
subplot(2,1,1);
plot(t, carrier, 'b', 'LineWidth', 1.5), hold on;
plot(t, OOK_signal, 'r', 'LineWidth', 1.5);
title('OOK & 2PSK Waveforms');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(t, 2PSK_signal, 'g', 'LineWidth', 1.5);
title('2PSK Waveform');
hold off;
% 计算并绘制功率谱
figure;
subplots_adjust(hspace=0.5);
for modulation = {'OOK', '2PSK'}
[Pxx, f] = periodogram(OOK_signal if strcmp(modulation, 'OOK') else 2PSK_signal, [], [], sample_rate);
subplot(2, 1, find(strcmp(modulation, 'OOK')))
plot(f, 10*log10(Pxx), 'LineWidth', 1.5);
title(sprintf('%s Power Spectrum', modulation));
xlabel('Frequency (Hz)');
ylabel('Power Density (dB/Hz)');
end
% 保存图像
saveas(gcf, ['OOK_2PSK_Signal_PowerSpectra.png'], 'png');
```
运行这段代码,你会得到两个波形图分别展示OOK和2PSK调制的信号,以及它们的功率谱图。
阅读全文