语音处理:音频移形幻影,为何大振幅信号也无声

语音处理:音频移形幻影,为何大振幅信号也无声?

背景来由

在定位一个音频算法效果问题时,发现对一个序列某一段波形上下平移时,仅在两侧信号过渡时有听感异常,整体上移片段跟其余片段听感很类似。

我们知道,音频信号的波形左右平移会带来延迟的听感,即类似回声慢半拍。

于是想问,音频信号的波形上下平移会对听感怎么样呢?

提出问题

设计3个场景问题,来分析音频信号移形换影:

  • 1s左右固定大幅度的信号,听感会怎么样?
  • 2s左右且仅一个尖峰的信号,听感会怎么样?
  • 2s左右一个基础谐波组成信号,波形往上平移后不过零,听感会怎么样?

实验代码

matlab 复制代码
%% eval_voice_shift.m: 模拟音频移形变化效果 
clear; clc; close all;


%% 构造1s固定大振幅的音频
fs = 48000;                     % 采样率
duration = 1; % 时长s
t = (0: 1/fs : duration-1/fs)';         % 示例语音片段
x = ones([length(t), 1]);
x = 0.5 * x;
audiowrite('D:\test1.wav', x, fs, 'BitsPerSample', 16);


%% 构造2s尖峰变化音频
fs = 48000;                     % 采样率
duration = 2; % 时长s
t = (0: 1/fs : duration-1/fs)';
samples = length(t);
samples_left = samples / 2;
samples_right = samples - samples_left;
x_left = linspace(0,0.5,samples_left)';
x_right = linspace(0.5,0,samples_right)';
x = [x_left; x_right];
audiowrite('D:\test2.wav', x, fs, 'BitsPerSample', 16);


%% 构造2s不过零的正弦波音频
fs = 48000;                     % 采样率
duration = 2; % 时长s
f0 = 100; % hz
t = (0: 1/fs : duration-1/fs)';
x = 2*sin(2*pi*f0*t) + 3*cos(0.24*pi*f0*t);
x_min = min(x);
x_base = x;
x_proc = x + abs(x_min);
y = [x_base x_proc];
audiowrite('D:\test3.wav', y, fs, 'BitsPerSample', 32);

TST_done = 1

我用matlab做了3个仿真实验,并得到了结果。

  • 场景一,test1.wav中1s大幅度固定信号,听感无声。

  • 场景二,test2.wav中2s尖峰信号,听感无声。

  • 场景三,test3.wav中2s谐波组成信号上移后,听感音色类似,但力度有所下降。

为啥信号有较大幅值,会听起来无声? 将波形移动,过不过零是否有听感影响? 不由引人深思。

现象分析

总的说来,一个波形信号上下平移后,考虑到实际喇叭振膜,类似于物理世界里振膜换了一个中心振动,对音色无较大影响,对复杂信号响度可能有影响。

此外,要听到声音要有一定频率的振动,如果信号在长时间内缓慢变化,类似于直流分量了(低频强度远小于20Hz),人耳无法感知。

所以,场景一中大幅度固定信号等效于幅值为0的信号往上平移,听感无声。

而场景二,你说它到底有声吗?有,只是我们听不到。尖峰信号变化过慢,频率远小于20Hz故听感无声,就像你拳头极慢挥出听不声音但快速打出去就能听到声音一样。

场景三中就对应了虽然不过零,但频率足够快时,就能听到声音,对这个波形上下移形换影,听感音色类似,仅响度有所区别。原始的会更有力些,可能是由于扬声器远离基轴回弹过小的,向上移动后整体不够有力。

问题小结

了解唯有振动变化才能产生声波的本质后,再回答这些问题是不是就简单了:任意一个固定幅值的信号听感如何? 一个正弦波平移后不过零,与之前听感如何?

最后,通过此次实验,我这半路出家音频的门外汉对声学振动、频率、响度以及数字信号发声有了更深认识。

也刷新了一点点认知:数字信号里不是全零才无声,全固定值或者变化很慢的波形均无声

振动有魔力。

相关推荐
911hzh19 分钟前
Flutter 音视频通话集成实战:WebSocket 做信令,WebRTC 传音视频,附详细事件时序图
websocket·flutter·音视频
九转成圣9 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio9 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
m0_726365839 小时前
Ai漫剧系统 几分钟,让AI 把一篇小说变成了一部漫剧成片:从剧本到视频的全流程系统实现
人工智能·语言模型·ai作画·音视频
laowangpython9 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫9 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch9 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI9 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0019 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript
念2349 小时前
f5 shape分析
开发语言·javascript·ecmascript