产生一个长为 1000 的二进制随机序列,“0”的概率为 0.7,“1” 的概率为 0.3。 (2)对上述数据进行归零 AMI 编码,脉冲宽度为符号宽度的 50%, 波形采样率为符号率的 8 倍,对上述 1000 个符号的波形进行功率谱估计,画出功率谱。 改变信源“0”的概率,观察 AMI 码的功率谱变化情况。
时间: 2024-02-17 13:59:55 浏览: 239
1. 生成二进制随机序列
可以使用 `rand` 函数生成 0 到 1 之间的随机数,并根据设定的概率将其转换成 0 或 1,最终得到一个长度为 1000 的二进制随机序列。
```matlab
p0 = 0.7; % “0”的概率
p1 = 0.3; % “1”的概率
n = 1000; % 序列长度
% 生成随机序列
seq = rand(1, n);
seq(seq < p0) = 0;
seq(seq >= p0) = 1;
disp(seq); % 显示生成的随机序列
```
2. 归零 AMI 编码
根据 AMI 编码规则,每当输入为 1 时,输出为正或负的脉冲,脉冲宽度为符号宽度的一半。为了方便起见,这里将符号宽度设置为 1。
```matlab
T = 0.5; % 符号宽度
t = linspace(0, n, n*8); % 波形采样时间
p = zeros(1, length(t)); % 初始化脉冲序列
polarity = 1; % 初始极性为正
for i = 1:n
if seq(i) == 0
p((i-1)*8+1:i*8) = 0;
else
p((i-1)*8+1:i*8) = polarity;
polarity = -polarity; % 取反
end
end
% 绘制波形
plot(t, p);
ylim([-1.5 1.5]);
xlabel('Time');
ylabel('Amplitude');
title('AMI Code');
```
3. 功率谱估计
可以使用 `pwelch` 函数对归零 AMI 编码后的波形进行功率谱估计。
```matlab
% 计算功率谱密度
fs = 8/T; % 采样率
[P, f] = pwelch(p, [], [], [], fs);
% 绘制功率谱密度图
plot(f, 10*log10(P));
xlabel('Frequency');
ylabel('Power Spectral Density (dB/Hz)');
title('Power Spectral Density of AMI Code');
ylim([-60 10]);
```
4. 改变信源“0”的概率
我们可以尝试改变随机序列中“0”的概率,观察 AMI 编码的功率谱变化情况。
```matlab
p0 = 0.9; % “0”的概率
p1 = 0.1; % “1”的概率
% 生成随机序列
seq = rand(1, n);
seq(seq < p0) = 0;
seq(seq >= p0) = 1;
% 归零 AMI 编码
p = zeros(1, length(t));
polarity = 1;
for i = 1:n
if seq(i) == 0
p((i-1)*8+1:i*8) = 0;
else
p((i-1)*8+1:i*8) = polarity;
polarity = -polarity;
end
end
% 计算功率谱密度
[P, f] = pwelch(p, [], [], [], fs);
% 绘制功率谱密度图
figure;
plot(f, 10*log10(P));
xlabel('Frequency');
ylabel('Power Spectral Density (dB/Hz)');
title('Power Spectral Density of AMI Code');
ylim([-60 10]);
```
通过改变“0”的概率,我们可以观察到 AMI 编码的功率谱密度图的变化情况。当“0”的概率越大时,功率谱密度图中的低频成分越明显,而当“0”的概率越小时,功率谱密度图中的高频成分越明显。
阅读全文