假设在simluink中的输出长为1801
输入轨迹为1801,那么如果要在Matlab中用卷积还原结果,系统的脉冲响应长度怎么取,因为在Matlab中conv结果的长度为N+M-1,N参考轨迹的长度
M系统的脉冲响应长度,怎么还原simulink结果
就是用Matlab怎么算出simulink相同的结果
在这个问题中,Simulink的输出长度为1801,输入轨迹也为1801。要在Matlab中使用卷积运算还原相同结果,需要正确选择系统的脉冲响应长度M。
根据卷积运算的长度计算公式:conv结果长度 = N + M - 1
其中N为输入轨迹长度,M为脉冲响应长度。
为得到相同于Simulink的输出结果1801,需要满足:
1801 = 1801 + M - 1
解得:M = 1801
所以,在Matlab中为得到跟Simulink相同的输出结果,系统的脉冲响应长度M需要取1801。
Matlab中的代码可以如下:
matlab
N = 1801; % 输入轨迹长度
M = 1801; % 脉冲响应长度
x = rand(N,1); % 随机输入轨迹
h = rand(M,1); % 随机脉冲响应
y = conv(x,h); % 卷积运算
此时y的长度为:1801 + 1801 - 1 = 3601
由于我们取M = 1801,正好可以得到与Simulink输出相同长度的结果1801。如果M取其他值,则无法得到相同结果。
所以,在利用卷积运算还原Simulink的输出结果时,正确选择系统的脉冲响应长度M是关键。需要根据公式计算使得卷积结果长度等于Simulink的输出长度,此时取M = 1801。
问题回答:
在Matlab中,可以使用conv函数进行卷积的计算,但需要确保参考轨迹和系统响应函数的长度相同。因此,在这种情况下,需要确定系统的脉冲响应函数的长度M。可以通过观察输出信号的降幅是否足够来估计M的大小,即当输出信号的幅值降至实际幅值的95%时,M的大小就可以确定。此后就可以使用conv函数进行卷积计算了。
下面是示例代码:
% 输入信号的长度为n,系统脉冲响应函数的长度为M,输出信号的长度为N=n+M-1 n = 1801; M = ?; % 系统脉冲响应函数的长度,需要根据实际情况确定 N = n + M - 1;
% 生成参考轨迹和系统脉冲响应函数 ref = ?; % 参考轨迹,需要根据实际情况生成 pul = ?; % 系统脉冲响应函数,需要根据实际情况生成
% 计算输出信号 output = conv(ref, pul);
% 取出输出信号的前n个数据,确保与simulink中的输出信号长度一致 output = output(1:n);
% 输出结果 disp(output);