伪随机调相信号是由多个CW自脉冲构成,第i个子脉冲有下式表示为
式中只取0和两个值,由m序列(一种伪随机序列,具有周期性,其周期随着m阶数的提高而增大)来控制。
matlab程序:
clear;
clc;
close all;
coef = uint8([0 0 1 1]); % 反馈系数
a = uint8([0 0 0 1]); % 寄存器初始值分配
freq = 30; % 信号的频率
Fs = 20*freq; % 采样频率
Ts = 1/Fs; % 采样间隔
t = 0:Ts:1/freq-Ts; % 信号持续时间
length_s = length(t);
% 反馈系数的长度
length_coef = length(coef);
% 计算M序列的一个周期的长度
length_out = 2^length_coef - 1;
length_m = 2*length_out; % 生成伪随机信号的长度
seq = zeros(1,length_m); % 为输出序列分配内存空间
for i = 1:1:length_m
seq(i) = a(1,length_coef);
an = mod(sum(bitand(coef,a)),2); % 求和(二进制)
a(1,2:length_coef) = a(1,1:length_coef-1); % 移位
a(1,1) = an; % 把求和得到的结果给第一个寄存器
end
Signal_M = zeros(1,length_s*length_m); % 用于存储伪随机调相信号
for j = 1:1:length_m
Signal_M((j-1)*length_s+1:j*length_s) = sin(2*pi*freq*t+pi*seq(j));
end
tm = (1:length_s*length_m)*Ts;
figure(1);
stairs(seq);
title('M 序列');
xlabel('x');
ylabel('y');
ylim([0 2]);
grid on;
figure(2);
plot(tm,Signal_M);
title('伪随机调相信号');
xlabel('time /s');
ylabel('Amplitude');
ylim([-2 2]);
grid on;
仿真结果: