matlab - 将8位音频信号转换为较低的编码

标签 matlab audio signal-processing

我对分配给我们的任务感到困惑。问题如下:“使用16bit,8bit,4bit,2bit,1bit表示8KHz采样的语音信号,观察每种情况下的语音质量和波形差异并记下注释。”因此,现在我只看了很少的录音工具,甚至尝试了MATLAB中的各种录音API,但是其中使用的最少位数是8位。因此,如果我想将它们转换为4位或更低,我该怎么做。我是否必须手动进行循环并更改矩阵的元素,还是可以得到工具? (注意:这只是入门类(class),我们不希望对这些事情了解太多。此外,在第一份作业之外)

最佳答案

您需要的直觉是欣赏位移的含义。假设您以16位数字开头-此处可能的值范围为2 ^ 16,这意味着您可以有65536个不同的值,可能从0到65536-1,或者从-32768到+32767您正在处理的信号表面上可以从-1到0变化到+1(标准音频信号),该音频曲线可以自由映射到65536,因此-1可以映射到-32768和+1到32767-如果我们只有8位代表我们的信号,它在-1到+1之间变化,2 ^ 8 === 256个可能的值,这里我们可以将-1映射到-128和+1到128。4位,2位的相似映射。 ..

现在要使用移位实现此功能,如果您以16位表示形式开始并且需要将其转换为8位,则只需将16位数字向右移动8位就可以丢弃最低有效位的位置:

intout = bitshift(A,k) 

返回A左移k位,等于乘以2k。 k的负值对应于右移位。因此,如果变量A是我们的16位整数,而对于k我们使用-8,则将实现位移,我们需要将16位数字转换为其等效的8位整数。到现在为止,您可能已经猜到了,因为我们将位深度从16逐渐降低到...到...,我们的分辨率降低了,这会被听成声音,深度更小,并且失去细微和细微的差别,直到最后只能改变的位1。从0到1,音频将变得难以理解-我希望这会有所帮助

关于matlab - 将8位音频信号转换为较低的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954009/

相关文章:

matlab - 在 MATLAB 中绘制 x=y 平面

matlab - 为什么旋转代码会导致我的 LU 分解失败?

matlab - 无阴影一维不变图像的实现

matlab - 关于用matlab将超声波老鼠叫声信号转换为人类可听范围的建议

matlab - Matlab将音频从模拟转换为数字

c - 尝试制作波表振荡器

matlab - 将子矩阵乘以常数

java - 音频 - 来自 Java 的流音频不稳定

javascript - 使用 SoundJS 离开网页会导致 Google Chrome 崩溃

python - 计算轨迹(路径)中的转折点/枢轴点