116,152
社区成员




先用低通滤波得到冲击波,然后再用两个波形相减,得到震荡波,这样行不行
基本思路
信号分析:首先,需要对红色波形进行详细分析,理解其包含的主要成分。这可能包括冲击波(短暂的大幅度波动)和随后的衰减震荡(振荡逐渐减弱)。
冲击波识别:通过查找波形中的极大值点来识别可能的冲击波。这可以通过寻找局部最大值来完成。
衰减震荡波提取:从原始信号中减去估计的冲击波信号,剩余部分可能是衰减震荡波。
模型拟合:使用合适的数学模型来描述衰减震荡波,例如使用阻尼正弦波模型。
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');