我有两个正弦波互相移动180度。我想从这两个信号中产生另一个信号,但为此,我必须分别添加单独的间隔,其结果也应该是连续的。
这里有两个正弦波:
t = 0:0.00001:0.02;
w= 2*pi*50;
ma = 0.8*sin(w*t);
mb = 0.8*sin(w*t-pi);
现在我想创建另一个信号mcm
。如果间隔为"0到0.005 (季度周期)“,我需要mcm = 1 + ma
。对于"0.005到0.01“间隔,我想要mcm = 1 + mb
。
其他两个季度也是如此。
我们该怎么做呢?
发布于 2022-06-04 06:51:06
在下面的注释中更改问题后进行编辑
考虑到需要将其概括为多个周期(注意添加了用户定义的输入n
=周期数),下面是我的建议。
首先,必须明确地定义每个函数。其次,对于t
长度上的每个点,需要(显式)定义在该数据点上需要使用的函数。
因此,在下面的代码中,functions
和functionOrder
用于设置要使用的函数以及使用它们的顺序/频率。
在Calculate mcm
部分中,变量ind
用于迭代输出,并选择要在每个点使用的函数。
% User inputs
f = 50;
n = 3; % number of cycles
inc = 0.00001; % increment
% Preliminaries
t_interval = 1/f;
t = 0:inc:t_interval*n;
t = t(1:end-1);
w = 2*pi*f;
ma = 0.8*sin(w*t);
mb = 0.8*sin(w*t-pi);
% Define mcm
f1 = @(ii) -1 - mb(ii);
f2 = @(ii) 1 - ma(ii);
f3 = @(ii) -1 + mb(ii);
f4 = @(ii) 1 - mb(ii);
functions = {f1, f2, f3, f4};
functionOrder = [1 2 3 4];
% Calculate mcm
ind = repmat(functionOrder, round(t_interval/inc)/length(functionOrder), 1);
ind = reshape(ind, numel(ind), 1);
ind = repmat(ind, n, 1);
mcm = zeros(size(ind));
for ii = 1:length(ind)
mcm(ii) = functions{ind(ii)}(ii);
end
% Plot
figure; plot(t,ma);
hold on; plot(t,mb);
plot(t, mcm);
================================================
先前对更简单问题的回答,不需要泛化。
我处理这一问题的方式是在当前情况下的易用性和在示例变化时易于复制/动态之间的折衷。
首先,创建一个变量,该变量指示应该在何处使用ma
和应该使用mb
。请注意,使用0和1可以使以后的步骤更容易:如果在这个分段操作中有更多的函数可供使用,则此指示符的构造必须不同。
ind = zeros(size(t)); %indicator
ind(t >= 0.000 && t < 0.005) = 1;
ind(t >= 0.010 && t <=0.015) = 1;
然后,添加ma
和mb
相对简单。
mcm = 1 + ind.*ma + (1-ind).*mb;
请注意,这遵循了文本中描述的数学公式,但结果曲线并不是连续的。我看不出有什么方法可以让ma
和mb
在每个季度周期交替,而且曲线也是连续的。
https://stackoverflow.com/questions/72493503
复制相似问题