我一直在尝试使用Matlab制作和理解ADC。我编写了这个小程序,可以修改波形的位数(2 ^ 8,8为位数,可以从1变为64)。但是,在计算机上播放声音时,听起来好像有什么声音停止了声音。可以更改频率,但是问题仍然存在。我想知道我做错了什么?

clf                         %clr screen

t = 0:1:1600
fs = 1000

senial = sin((2*pi*t)/fs)

quant=max(senial)/(2^8)          % R/L = size of sep

y=round(senial/quant)            % Quantizationto 2^N bit
signe=uint8((sign(y)'+1)/2)      % transforms it to int 8 bit
out=[signe]                      % The first bit represents the sign of the number

sound(y,fs)
plot(y,'b');

最佳答案

有几件事。首先,您生成的正弦波仅为1Hz,因此您将永远无法听到它。

t = 0:1:1600
fs = 1000
freq = 440

senial = sin(2*pi*t*freq/fs)
play(senial, 1000)

下一个问题是量化问题。除了没有将数据重新归一化到-1到1范围外,几乎就在那里。您可能正在听剪辑。尝试这样的事情:
y = round(senial*2^8)/2^8

这是一个示例(为了使绘图更简单,再次输入了1Hz)
plot(round(sin(2*pi*t/1000)*2^4)/2^4)

07-27 14:06