首页 > 编程知识 正文

c代码进行第一次编译后会生成,c语言有一个分数序列

时间:2023-05-05 11:17:32 阅读:108272 作者:1598

到目前为止还不知道系统辨识的理论,输入信号只是随意使用阶跃信号,后来发现阶跃信号实际上是烹饪的,不足以刺激系统的所有动态特性,金额、实验数据很快减弱。 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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。