2014-09-07 2 views
1

Скажем, у меня есть участок в Matlab так:Quantize данные в Matlab

x = linspace(0,10,10000); 
input= sin(x); 

Я хочу, чтобы квантовать данные определенного числа битов. (Я понимаю, что технически MATLAB квантование все свои графики.) Я попытался следующие:

bits = 7; 
output =floor(2^bits*input)/2^bits 

Но это работает только, если вход находится между 0 и 1. Что я должен делать?

+0

Любопытный - Кто-нибудь из решений, предлагаемых здесь работать для вас? – Divakar

+0

Все еще работает над решением, но в настоящее время я экспериментирую с функцией квантизации. – codedude

ответ

2

Подход № 1bsxfun основе «интерполирования выглядящий» схема -

x = linspace(min(input),max(input),2^bits) %// Setup the quantizied levels 
             %// ranging from min to max of the input data 
[~,ind1] = min(abs(bsxfun(@minus,input,x.'))) %//' Find the indices of the 
               %// levels nearest to the input data 
output = x(ind1) %// Get the quantized values 

Кроме того, старайтесь не использовать имена переменных, которые идентичны имена встроенных функций MATLAB, который является input в этом случае ,


Подход № 2interp1 основе -

x = linspace(min(input),max(input),2^bits) %// Setup the quantizied levels 
             %// ranging from min to max of the input data 
output = interp1(x,x,input,'nearest') %// Get quantized values with 1-D interpolation 
             %// to the nearest quantized levels 

Пример -

input [Input data] = 
    0.8017 1.0533 -0.7489 -0.9363 -1.2691 0.4980 2.7891 
bits [No. of bits used for quantization ] = 
    2 
x [These are 2^bits quantized levels ranging from min to max of input] = 
    -1.2691 0.0836 1.4364 2.7891 
output [Input data is brought to the nearest quantized levels taken from x] = 
    1.4364 1.4364 -1.2691 -1.2691 -1.2691 0.0836 2.7891 
Смежные вопросы