генерация аудиосигнала ЦАП в Matlab

Я пытался сделать и понять АЦП с помощью Matlab. Я сделал эту маленькую программу, которая позволяет мне изменять количество битов сигнала (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');

person GoatZero    schedule 21.01.2015    source источник


Ответы (1)


Несколько вещей. Во-первых, вы генерируете синус с частотой всего 1 Гц, поэтому вы никогда не сможете его услышать.

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

Вот пример (снова 1 Гц, чтобы упростить сюжет)

plot(round(sin(2*pi*t/1000)*2^4)/2^4)

введите здесь описание изображения

person jaket    schedule 21.01.2015
comment
Вы правы в том, что объяснили выше; но если вы воспроизведете записанный вами сигнал, вы услышите какой-то дискретный звук, близкий к звуку, предоставленному OP. - person mehmet; 21.01.2015
comment
sound(round(sin(2*pi*t*440/1000)*2^4)/2^4, 1000) у меня отлично работает. - person jaket; 21.01.2015
comment
Я имею в виду, что вы запланировали один; но вы также сказали, что человек не может слышать 1 Гц, так что все в порядке. Что, если вы построите его, написав plot(round(sin(2*pi*t*440/1000)*2^4)/2^4). Это не похоже на квантованную синусоидальную волну, значит, звук, который мы слышим, действительно является квантованным синусоидом? - person mehmet; 21.01.2015
comment
Почему вы не думаете, что это похоже на квантованный синус, потому что это так? Может быть, вы слишком сильно уменьшили масштаб? - person jaket; 22.01.2015
comment
Когда я пишу plot(t/1000, round(sin(2*pi*t*440/1000)*2^4)/2^4), я получаю это. Я знаю, что нет причин для искажения синуса, я имею в виду, что частота синуса достаточно меньше, чем частота дискретизации, в квантовании нет большой ошибки; но что-то выглядит не так, я не знаю, почему. Кстати, когда используется 2^4, сигнал квантуется до 33 уровней, что должно быть 32 уровня. - person mehmet; 22.01.2015
comment
А пока я не хотел беспокоить вас или саботировать ваш ответ. Вы придумали разумный подход к этому вопросу. - person mehmet; 22.01.2015