MATLAB实现二元序列不同波形表示及功率谱分析

本文使用MATLAB生成随机二元序列,并分别使用单极性不归零波形、单极性归零波形、双极性不归零波形、双极性归零波形来表示该序列,同时绘制信号波形示意图和功率谱图。

1. 生成二元随机序列

% 生成二元随机序列
seq = randi([0 1], 1, 100);

2. 单极性不归零波形

% 单极性不归零波形
x_unipolar_NRZ = seq;
y_unipolar_NRZ = ones(size(seq));
plot(x_unipolar_NRZ, y_unipolar_NRZ);
title('Unipolar NRZ');
xlabel('Time');
ylabel('Amplitude');

% 计算功率谱密度
N = length(seq);
fs = N;
f = (-N/2:N/2-1)*fs/N;
P_unipolar_NRZ = abs(fftshift(fft(y_unipolar_NRZ)/N)).^2;
figure;
plot(f, P_unipolar_NRZ);
title('Power Spectral Density of Unipolar NRZ');
xlabel('Frequency');
ylabel('Power');

3. 单极性归零波形

% 单极性归零波形
x_unipolar_RZ = 1:length(seq)*2;
y_unipolar_RZ = zeros(1, length(seq)*2);
for i = 1:length(seq)
    if seq(i) == 1
        y_unipolar_RZ(i*2-1:i*2) = [1 0];
    else
        y_unipolar_RZ(i*2-1:i*2) = [-1 0];
    end
end
plot(x_unipolar_RZ, y_unipolar_RZ);
title('Unipolar RZ');
xlabel('Time');
ylabel('Amplitude');

% 计算功率谱密度
N = length(seq)*2;
fs = N;
f = (-N/2:N/2-1)*fs/N;
P_unipolar_RZ = abs(fftshift(fft(y_unipolar_RZ)/N)).^2;
figure;
plot(f, P_unipolar_RZ);
title('Power Spectral Density of Unipolar RZ');
xlabel('Frequency');
ylabel('Power');

4. 双极性不归零波形

% 双极性不归零波形
x_bipolar_NRZ = 1:length(seq);
y_bipolar_NRZ = zeros(size(seq));
for i = 1:length(seq)
    if seq(i) == 1
        y_bipolar_NRZ(i) = -1;
    else
        y_bipolar_NRZ(i) = 1;
    end
end
plot(x_bipolar_NRZ, y_bipolar_NRZ);
title('Bipolar NRZ');
xlabel('Time');
ylabel('Amplitude');

% 计算功率谱密度
N = length(seq);
fs = N;
f = (-N/2:N/2-1)*fs/N;
P_bipolar_NRZ = abs(fftshift(fft(y_bipolar_NRZ)/N)).^2;
figure;
plot(f, P_bipolar_NRZ);
title('Power Spectral Density of Bipolar NRZ');
xlabel('Frequency');
ylabel('Power');

5. 双极性归零波形

% 双极性归零波形
x_bipolar_RZ = 1:length(seq)*2;
y_bipolar_RZ = zeros(1, length(seq)*2);
last = 0;
for i = 1:length(seq)
    if seq(i) == 0
        y_bipolar_RZ(i*2-1:i*2) = [0 0];
    else
        if last == 1
            y_bipolar_RZ(i*2-1:i*2) = [-1 1];
            last = -1;
        else
            y_bipolar_RZ(i*2-1:i*2) = [1 -1];
            last = 1;
        end
    end
end
plot(x_bipolar_RZ, y_bipolar_RZ);
title('Bipolar RZ');
xlabel('Time');
ylabel('Amplitude');

% 计算功率谱密度
N = length(seq)*2;
fs = N;
f = (-N/2:N/2-1)*fs/N;
P_bipolar_RZ = abs(fftshift(fft(y_bipolar_RZ)/N)).^2;
figure;
plot(f, P_bipolar_RZ);
title('Power Spectral Density of Bipolar RZ');
xlabel('Frequency');
ylabel('Power');

6. 运行结果

  • Unipolar NRZ: Unipolar NRZ

  • Power Spectral Density of Unipolar NRZ: Power Spectral Density of Unipolar NRZ

  • Unipolar RZ: Unipolar RZ

  • Power Spectral Density of Unipolar RZ: Power Spectral Density of Unipolar RZ

  • Bipolar NRZ: Bipolar NRZ

  • Power Spectral Density of Bipolar NRZ: Power Spectral Density of Bipolar NRZ

  • Bipolar RZ: Bipolar RZ

  • Power Spectral Density of Bipolar RZ: Power Spectral Density of Bipolar RZ

代码说明

  • randi([0 1], 1, 100):生成一个长度为100的随机二元序列,元素为0或1,概率相等。
  • ones(size(seq)):生成一个与序列seq长度相同的全1向量,用于表示单极性不归零波形的幅度。
  • plot(x, y):绘制波形图,x表示时间,y表示幅度。
  • fftshift(fft(y)/N):计算信号的功率谱密度,fft函数进行快速傅里叶变换,fftshift函数将频谱移至中心,N为序列长度。
  • abs( ... ).^2:求功率谱密度的模平方,得到功率谱密度。
  • figure:创建新的图形窗口。

总结

本文使用MATLAB代码实现了生成随机二元序列,并分别使用单极性不归零波形、单极性归零波形、双极性不归零波形、双极性归零波形来表示该序列,同时绘制了信号波形示意图和功率谱图。通过观察不同波形的功率谱图可以发现,不同波形在频谱上的分布有所不同,这对于数字信号的传输和接收具有重要意义。

MATLAB实现二元序列不同波形表示及功率谱分析

原文地址: https://www.cveoy.top/t/topic/npaL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录