当试图定义周期性信号的条件时,左侧和右侧具有不同数量的元素

  • 本文关键字:元素 定义 周期性 信号 条件 matlab
  • 更新时间 :
  • 英文 :


我试图绘制具有指数和时间条件的周期性信号,但我的行one_period(-5 <= t1 & t1 < 0) = exp(10*t1 - 10);中出现错误。

我对MATLAB还很陌生,所以我不确定如何修复这个错误。

T = 1; 
t1 = linspace(0, T, 100 + 1); 
t1(end) = [];
one_period = zeros(size(t1));
one_period(-5 <= t1 & t1 < 0) = exp(10*t1 - 10); 
one_period(0 <= t1 & t1 < 5) = 10;
signal = repmat(one_period, 1, 5);
signal_length = 10;
t_signal_length = linspace(0, T*signal_length, signal_length*100 + 1); 
t_signal_length(end) = [];
figure; 
plot (t_signal_length, signal);

您在这一行得到一个错误:

one_period(-5 <= t1 & t1 < 0) = exp(10*t1 - 10); 

因为t1被定义为

T = 1; 
t1 = linspace(0, T, 100 + 1); 
t1(end) = [];

因此,它是一个介于0和1之间的数组,包含101个元素,然后去掉最后一个元素。

对于t1的任何元素,您在错误行上使用的条件都不满足,在定义为01之间的值的数组中,您希望哪些值在-50之间

因此,这个-5 <= t1 & t1 < 0是一个数组,其中每个值都是false,即您将分配到one_period零索引中,但您试图分配与t1一样多的值(在=的右侧(。其中一个不适合另一个!

MATLAB有非常好的调试工具,可以添加断点,在调试时运行代码片段,并在代码进行时查看变量。您需要对预期的行为有一个清晰的概念,然后从断点开始运行,以确定哪个部分出现故障。

如果你有一个不同的条件(实际上有一些真值(,那么你可能只需要在赋值的两侧使用这个索引,以便值的数量与标记的数量匹配。这看起来像

bValid = 0.5 <= t1 & t1 < 0.8; % some condition for a subset within (0,1)
one_period(bValid) = exp(10*t1(bValid) - 10); % Note indexing t1(bValid) too
T = 1; %-signal period
t1 = linspace(0, T, 100 + 1); %-time series from 0 to T
t1(end) = []; %-remove last value
one_period = zeros(size(t1)); %-make function array (all zeros)
one_period(0 <= t1 & t1 < 0.5) = exp(10*t1(0 <= t1 & t1 < 0.5) - 10); %-define the signal
one_period(0.5 <= t1 & t1 < 1) = exp(10*t1(0.5 <= t1 & t1 < 1) - 10);
signal_length = 5;
signal = repmat(one_period, 1, signal_length); %-replicate the signal 5 times
t_signal_length = linspace(0, T*signal_length, signal_length*100 + 1); %-replicate the time series
t_signal_length(end) = [];
figure; %plot
plot (t_signal_length, signal);

示例图:https://i.stack.imgur.com/hZZQK.jpg

和往常一样,评论有助于了解你的意图,但以下是我认为你试图实现的目标。

最新更新