我有兩個相互偏移 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。
其他兩個季度也是如此。
我們該怎么做呢?
uj5u.com熱心網友回復:
在下面的評論中更改問題后進行編輯
鑒于需要將其推廣到多個周期(注意添加用戶定義的輸入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://www.uj5u.com/shujuku/486170.html
標籤:matlab
