我对分配给我们的任务感到困惑。问题如下:“使用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/