matlab 将原声音频的每两个相邻的零点当作一段,并记录这两个零点的横坐标,分别叠加自身1次到50次,用刚刚的横坐标分别截取1次到50次的音频段,把他们与原声的音频段进行短时能量比较,筛选出最高的音频段
时间: 2024-01-21 22:20:02 浏览: 21
以下是可能的 MATLAB 代码实现:
```matlab
% 读入原声音频
[y,fs] = audioread('original_audio.wav');
% 找到所有零点
zero_crossings = find(abs(diff(sign(y))) > 0.5);
% 找到相邻的零点并记录它们的横坐标
segments = [];
for i = 1:length(zero_crossings)-1
segments(i,:) = [zero_crossings(i), zero_crossings(i+1)];
end
% 初始化变量
max_energy = 0;
best_segment = [];
% 循环叠加自身1到50次,并截取音频段进行短时能量比较
for n = 1:50
% 叠加自身 n 次
y_n = y;
for i = 1:n-1
y_n = conv(y_n, y);
end
% 循环截取音频段并计算短时能量
for i = 1:size(segments,1)
segment = y_n(segments(i,1):segments(i,2));
energy = sum(segment.^2);
% 如果短时能量更高,则更新最高能量和最佳音频段
if energy > max_energy
max_energy = energy;
best_segment = segment;
end
end
end
% 输出最佳音频段
audiowrite('best_audio_segment.wav',best_segment,fs);
```
需要注意的是,以上代码仅供参考,具体实现可能需要根据具体情况进行调整。