You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB分时间区间叠加两正弦波生成连续合成信号方法

MATLAB实现分段合成连续信号mcm

实现思路

直接用MATLAB的逻辑索引做分段赋值,不需要写循环,能保证所有采样点和时间轴严格对齐,避免插值带来的误差。核心是按时间阈值标记每个分段对应的采样点位置,再按规则逐段计算取值。

注意

如果直接把前两段规则交替延伸到后两个四分之一周期,会在t=0.005s、t=0.015s两个交界点出现幅值跳变,不符合连续无断点的要求。下面先给出按明确写出的分段规则的实现代码,再附连续无断点版本的修正方案。

版本1:严格按给定分段规则实现

%% 1. 生成基础信号
t = 0:0.00001:0.02;
w = 2*pi*50;
ma = 0.8*sin(w*t);
mb = 0.8*sin(w*t-pi);
mcm = zeros(size(t)); % 初始化合成信号数组

%% 2. 逐段赋值
% 0~0.005s区间
idx1 = t >= 0 & t < 0.005;
mcm(idx1) = 1 + ma(idx1);
% 0.005s~0.01s区间
idx2 = t >= 0.005 & t < 0.01;
mcm(idx2) = 1 + mb(idx2);
% 0.01s~0.015s区间 按交替逻辑延伸
idx3 = t >= 0.01 & t < 0.015;
mcm(idx3) = 1 + ma(idx3);
% 0.015s~0.02s区间 按交替逻辑延伸
idx4 = t >= 0.015 & t <= 0.02;
mcm(idx4) = 1 + mb(idx4);

%% 可选:校验跳变点
diff_mcm = diff(mcm);
max_jump = max(abs(diff_mcm));
fprintf('最大相邻点跳变值:%.4f\n',max_jump);
% 运行后会输出最大跳变约1.6,对应两个分段交界点的断点

版本2:满足连续无断点要求的修正实现

断点出现的原因是t=0.005s、t=0.015s处1+ma和1+mb的取值不相等,要消除断点只需要调整分段计算逻辑,让相邻两段在交界点的取值完全匹配。如果要实现和前两个四分之一周期变化趋势一致的连续馒头波,代码如下:

%% 1. 生成基础信号
t = 0:0.00001:0.02;
w = 2*pi*50;
ma = 0.8*sin(w*t);
mb = 0.8*sin(w*t-pi);
mcm = zeros(size(t));

%% 2. 连续分段赋值
% 0~0.005s 上升沿:1+ma 从1升到1.8
idx1 = t >=0 & t <0.005;
mcm(idx1) = 1 + ma(idx1);
% 0.005s~0.01s 下降沿:1 - mb 从1.8降到1(t=0.005处和上一段终点值完全相等)
idx2 = t >=0.005 & t <0.01;
mcm(idx2) = 1 - mb(idx2);
% 0.01s~0.015s 上升沿:1 + mb 从1升到1.8(t=0.01处和上一段终点值相等)
idx3 = t >=0.01 & t <0.015;
mcm(idx3) = 1 + mb(idx3);
% 0.015s~0.02s 下降沿:1 - ma 从1.8降到1(t=0.015处和上一段终点值相等)
idx4 = t >=0.015 & t <=0.02;
mcm(idx4) = 1 - ma(idx4);

%% 校验连续性
diff_mcm = diff(mcm);
max_jump = max(abs(diff_mcm));
fprintf('最大相邻点跳变值:%.2e\n',max_jump);
% 运行后最大跳变在1e-15量级,属于浮点计算误差,完全连续无断点

可选绘图验证

运行完代码后加下面的代码可以直接查看波形对比:

figure;plot(t,ma,'--',t,mb,'--',t,mcm,'LineWidth',1.5);
legend('ma','mb','mcm');grid on;
xlabel('时间t(s)');ylabel('幅值');

内容的提问来源于stack exchange,提问作者Trickk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:57:54