到目前为止还不知道系统辨识的理论,输入信号只是随意使用阶跃信号,后来发现阶跃信号实际上是烹饪的,不足以刺激系统的所有动态特性,金额、实验数据很快减弱。 m序列是工程中常用的输入信号,其性质与白噪声相似,但白噪声是理论上最好的输入信号,体现了m序列的价值。 介绍m序列的matlab生成方法。 现在,我们看到matlab提供了生成m系列的专用函数,而许多论坛生成m系列的程序复用性不高。
idinput函数
生成系统识别中常用的典型信号。
格式
u=idinput(n,type,band,levels ) )。
([u,freqs]=idinput(n,' sine ',band,levels,sinedata ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
n
生成的序列的长度。 在N=[N nu]情况下,nu是输入的通道数,在n=[pnu]的情况下
m )、nu指定信道数,p为周期,M*P为信号长度。 缺省情况下,nu=1,M=1,即一个通道,一个循环。
类型
指定要生成的信号的类型。 选项的类型如下
“rgs”
ajdqz随机信号
“RBS”(默认)
二进制随机信号
‘prbs’
二进制伪随机信号(m序列)
‘sine’
信号和
邦德
指定信号的频率成分。 对于’rgs’、’RBS’、’sine’,band=[wlow,
whigh] )指定通带范围,对于白噪声信号,band=[ 0,1 ],这也是默认值。 如果指定非缺省值,则等于有色噪声。
对于’prbs’,band=[0,B],b表示信号在1间隔1/B (时钟周期)内是恒定值,而默认值为[ 0,1 ]。
Levels
指定输入的级别。 Levels=[minu,
maxu]、type=’RBS’、’prbs’、’sine’的情况,表示信号u的值始终在minu和maxu之间。 对于type=’rgs’,minu指定从信号的平均值中减去标准偏差后的值,maxu在信号的平均值中加上标准偏差,对于0平均、标准偏差为1的ajdqz白噪声信号,levels=[-1,
1 )、这也是默认设置。
说明
对于PRBS信号,如果为M1,则序列的长度和PRBS周期将调整为PRBS的周期达到与一定次数对应的最大值。 也就是说,2^n-1,n是阶数。 在M=1的情况下,PRBS的周期是比n所对应的次数大的值。 在多输入的情况下,信号被最大平移,即P/nu是可以估计该信号的模型阶数的上界。
上面的意思可以理解如下。 在M=1情况下,
ms=idinput(12,' prbs ',[0 1],[0 1];
图形
是sairs (毫秒)
title(m序列) )。
ylim ([-0.5 ] 1.5 )
结果如下
同时,matlab发出了以下警告
warning : theprbssignaldeliveredisthe 12 firstvaluesofa
长度为15。
这就是说,函数的输出是由周期为15 (大于12的前2^n-1的值) PRBS信号的前12个值组成的序列。 例如
ms=idinput(15,' prbs ',[0 1],[0 1];
图形
是sairs (毫秒)
title(m序列) )。
ylim ([-0.5 ] 1.5 )
可以看到指定12时的系列指定15时的系列的前面部分。
在M1的情况下,
ms=id input ([ 12,1,2 ],' prbs ',[0 1],[0 1];
图形
是sairs (毫秒)
title(m序列) )。
ylim ([-0.5 ] 1.5 )
结果如下
来自Matlab的响应警告如下
warning : theperiodoftheprbssignalwaschangedto 7。
Accordingly,the length of the
生成的信号墙be 14。
关于信号和信号的产生,好像很少使用,但语法还很复杂,使用的时候看看吧。
方法
产生’rgs’信号的通信信号使用8阶巴特沃斯滤波器,使用idfilt的非因果滤波,这是可靠的方法。
对于’RBS’信号,使用了相同的滤波器,不过是在二值化之前,这意味着不保证频率分量是准确的。
生成ajdqz随机信号
clc
clear all
全部关闭
%
ajdqz随机信号u = idinput(1000, 'rgs');
figure
stairs(u)
title('ajdqz随机信号')
figure
hist(u, -4:4)
title('ajdqz随机信号的分布')
产生二值随机信号
clc
clear all
close all
% 二值随机信号
u = idinput(100, 'rbs');
figure
stairs(u)
title('二值随机信号')
ylim([-1.5 1.5])
产生二值伪随机信号(M序列)
合理的选择输入激励信号,能有效的激励起系统的动态信号。白噪声的平稳谱的性质决定了它是一个很好的输入信号,但它在工程中不易实现,而M序列具有近似白噪声的性质,可保证良好的辨识精度。
clc
clear all
close all
% 二值伪随机信号(M序列)
n = 8; % 阶次
p = 2^n -1; % 循环周期
ms = idinput(p, 'prbs');
figure
stairs(ms)
title('M序列')
ylim([-1.5 1.5])
结果
验证M序列的性质如下
-1和1的个数差1
sum(ms==1) % 1的个数
sum(ms==-1) % -1的个数
ans =
127
ans =
128
存在直流分量
mean(ms) % 直流分量
ans =
-0.0039
相关函数
a = zeros(length(ms)*10, 1); % 采样
for i = 1:10
a(i:10:end) = ms;
end
c = xcorr(a, 'coeff'); % 自相关函数
figure
plot(c)
title('相关函数')
自相关函数接近于δ函数。
谱密度
figure
pwelch(a) % 谱密度
说明M序列不含基频的整数倍的频率成分。
产生逆M序列
谱分析表明,M序列含有直流成分,将造成对辨识系统的“净扰动”,这通常不是所希望的。而逆M序列将克服这一缺点,是一种比M序列更为理想的伪随机码序列。
clc
clear all
close all
% 二值伪随机信号(M序列)
n = 8; % 阶次
p = 2^n -1; % 循环周期
ms = idinput(p, 'prbs', [], [0 1]);
figure
stairs(ms)
title('M序列')
ylim([-0.5 1.5])
% 产生逆M序列
s = 0;
ims = zeros(2*p, 1);
mstemp = [ms; ms];
for i = 1:2*p
ims(i) = xor(mstemp(i), s);
s = not(s);
end
ims(ims==0) = -1;
figure
stairs(ims)
title('逆M序列')
ylim([-1.5 1.5])
-1和1的个数差1
sum(ims==1) % 1的个数
sum(ims==-1) % -1的个数
ans =
255
ans =
255
无直流分量
mean(ims) % 直流分量
ans =
0
相关函数
a = zeros(length(ims)*10, 1); % 采样
for i = 1:10
a(i:10:end) = ims;
end
c = xcorr(a, 'coeff');
figure
plot(c)
谱密度
figure
pwelch(a)