как найти правильную частоту дискретизации для interp1 в Matlab

Я пытаюсь найти правильную частоту дискретизации для interp1 (или прореживание или повторную выборку) для построения графика количества точек по осям, полученных imfreehand..

Сначала я что-то рисую (что-то, что не является синусоидальным)

bands=1:20;plot(bands,sin(bands));
hax=gca;

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

Затем нарисуйте что-нибудь с помощью imfreehand на оси, например:

imfreehand('Closed',0);

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

Я извлекаю части данных (размер 1x413) из объекта imfreehand, а затем пытаюсь построить их с длиной исходной строки, но масштабирование неверно...

data=get(hfree); 
xydata=get(data.Children(4)); 
% x=xydata.XData;
y=xydata.YData; 

len=length(y);
x=1:len;
newlen=length(bands);
scale=(len-1)/(newlen-1);
xx=1:scale:len;

yy=interp1(x,y,xx,'spline');

line(1:length(yy),yy(1:length(yy)),...
   'LineWidth',4,...
   'Color',[.8 .8 .8],...
   'Parent',hax);

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

Есть подсказки??

Кроме того, те же результаты с предложенным понижением частоты дискретизации.

for i=4:1:15 %just testing numbers 

    yy = downsample(y,i);

    h=line(1:length(yy),yy(1:length(yy)),...
        'LineWidth',1.2,...
        'Color',[.8-i/100 .8-i/100 .8-i/100],...
        'Parent',hax);

    if length(bands)==length(yy)
        set(h,'Color',[0 0 0], 'LineWidth',2);
    end

end

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

Есть подсказки?? x2


person gep    schedule 05.06.2015    source источник
comment
interp1 не имеет связанной с ним частоты дискретизации. Вы предоставляете набор контрольных точек, а затем набор точек, в которых вы хотите выполнить интерполяцию. Здесь происходит то, что вы предоставляете точки для интерполяции, и поскольку расстояние между этими точками увеличивается по мере того, как вы даете меньше точек, кривая рисуется так, что она просто линейно интерполируется между этими точками. Вам лучше использовать upsample и downsample из набора инструментов обработки сигналов: mathworks.com /help/signal/ref/upsample.html, mathworks.com /help/signal/ref/downsample.html   -  person rayryeng    schedule 05.06.2015
comment
@rayryeng хорошо, я уже пробовал это, но я вижу тот же эффект ... (на картинке синим цветом является линия от руки, а черным цветом - субдискретизация того же размера). Вы можете увидеть тот же сдвиг ..)   -  person gep    schedule 05.06.2015


Ответы (1)


Ну глупо с моей стороны забыть правильно масштабировать в интерп

len=length(y);
newlen=length(bands);
scale=ceil(len/newlen)    

x1=x(1:scale:end)
y1=y(1:scale:end);
h=line(x1,y1,...
        'LineWidth',1.2,...
        'Color',[0 0 0],...
        'Parent',hax);

yyy=interp1(x1,y1,bands,'pchip',nan)

h=line(1:20,yyy,...
        'LineWidth',1.2,...
        'Color',[0 1 1],...
        'Parent',hax);

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

person gep    schedule 06.06.2015