matlab波形分解求助!!解惑有红包感谢!!

LewinLewin 2024-06-04 11:04:46

红色部分的波形怎样能够将它分解成一个类似于黑色波形的冲击波加一个衰减震荡波呢? 

 

...全文
392 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snow_Leaf 2024-06-07
  • 打赏
  • 举报
回复

先用低通滤波得到冲击波,然后再用两个波形相减,得到震荡波,这样行不行

LewinLewin 2024-06-12
  • 举报
回复
@Snow_Leaf 目前在用这种方法,但是冲击波的波峰受到了震荡波的叠加,单纯使用低通滤波会把冲击波峰也滤掉……很棘手
开始学AI 2024-06-04
  • 打赏
  • 举报
回复 1

基本思路
信号分析:首先,需要对红色波形进行详细分析,理解其包含的主要成分。这可能包括冲击波(短暂的大幅度波动)和随后的衰减震荡(振荡逐渐减弱)。

冲击波识别:通过查找波形中的极大值点来识别可能的冲击波。这可以通过寻找局部最大值来完成。

衰减震荡波提取:从原始信号中减去估计的冲击波信号,剩余部分可能是衰减震荡波。

模型拟合:使用合适的数学模型来描述衰减震荡波,例如使用阻尼正弦波模型。

MATLAB 实现
假设你已经有了红色波形的数据,这里是如何用 MATLAB 来处理的一个简单例子:
% 假设 x 是时间向量,y 是红色波形的数据
x = linspace(0, 10, 1000); % 示例时间向量
y = exp(-0.3x) . sin(10x) + 0.5exp(-((x-2)/0.1).^2); % 示例数据,包括冲击波和衰减震荡波

% 1. 寻找冲击波 - 识别极大值点
[peakValues, peakLocations] = findpeaks(y, 'MinPeakHeight', max(y)/2);

% 假设冲击波是最大峰值附近的数据
[~, maxPeakIdx] = max(peakValues);
impactWave = zeros(size(y));
impactRadius = 50; % 冲击波半径,根据实际情况调整
impactWave(max(1, peakLocations(maxPeakIdx)-impactRadius) : min(length(y), peakLocations(maxPeakIdx)+impactRadius)) = y(max(1, peakLocations(maxPeakIdx)-impactRadius) : min(length(y), peakLocations(maxPeakIdx)+impactRadius));

% 2. 提取衰减震荡波
decayOscillation = y - impactWave;

% 3. 绘制结果
figure;
plot(x, y, 'r'); hold on;
plot(x, impactWave, 'k--');
plot(x, decayOscillation, 'b:');
legend('Original Waveform', 'Impact Wave', 'Decay Oscillation Wave');

LewinLewin 2024-06-05
  • 举报
回复
@开始学AI 感谢回答,思路是假设冲击波,震荡波通过相减的方式得到,但是您给的冲击波的代码得不到准确的波形。感谢您的思路!

116,152

社区成员

发帖
与我相关
我的任务
社区描述
好记性不如烂笔头,欢迎大家交流Matlab技术!
matlab 个人社区 四川省·成都市
社区管理员
  • 珞瑜·
  • CSDN-Ada助手
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎大家交流Matlab技术!互相成就互相成长!

试试用AI创作助手写篇文章吧