Я пытаюсь найти правильную частоту дискретизации для 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
interp1
не имеет связанной с ним частоты дискретизации. Вы предоставляете набор контрольных точек, а затем набор точек, в которых вы хотите выполнить интерполяцию. Здесь происходит то, что вы предоставляете точки для интерполяции, и поскольку расстояние между этими точками увеличивается по мере того, как вы даете меньше точек, кривая рисуется так, что она просто линейно интерполируется между этими точками. Вам лучше использоватьupsample
иdownsample
из набора инструментов обработки сигналов: mathworks.com /help/signal/ref/upsample.html, mathworks.com /help/signal/ref/downsample.html - person rayryeng   schedule 05.06.2015