我一直在尝试使用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');
答案 0 :(得分:1)
有几件事。首先,你产生一个只有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)