How to smoothen a plot in MATLAB?
Or some form of thresholding so that I can selectively smoothen out the parts that is too bumpy?
I am not sure but can fast-fourier-transform help?
5 Answers 5
If you have the Curve Fitting Toolbox, you can use the smooth function. The default method is a moving average of size 5 (method can be changed). An example:
If not, you can use use your own window function using the filter function from core MATLAB:
A simple (ad hoc) way is to just take a weighted average (tunable by alpha ) at each point with its neighbors:
or some variation thereof. Yes, to be more sophisticated you can Fourier transform your data first, then cut off the high frequencies. Something like:
This cuts out the highest 20 frequencies. Be careful to cut them out symmetrically otherwise the inverse transform is no longer real. You need to carefully choose the cutoff frequency for the right level of smoothing. This is a very simple kind of filtering (box filtering in frequency domain), so you can try gently attenuating high order frequencies if the distortion is unacceptable.
как сделать матричный график гладким в матлабе
Как на картинке выше. Как сделать картинку более плавной. Или сузить область оси Y.
Данные взяты из 2D-матрицы.
Затем я заговор с plot(‘data’)
Пожалуйста, не стесняйтесь подбрасывать любые идеи.
1 ответы
Один из способов сгладить линию включает нелинейную интерполяцию данных между точками выборки. Когда вы делаете plot(x,y,’o-‘) , MATLAB автоматически строит кусочно-линейный ряд в стиле соединения точек. Однако вы можете построить график без автоматических соединительных линий, используя только маркеры для точек данных, и построить собственный сглаженный ряд (или просто построить сглаженный ряд!). Например, начните с соединительных линий по умолчанию:
Теперь одним из способов создания «сглаженных» данных является использование нелинейной интерполяции для кривой (больше не линии) между точками данных. Мы можем использовать interp1 с ‘cubic’ метод интерполяции для этого:
То, к чему это на самом деле сводится, вовсе не является трюком MATLAB — просто построить интерполированные данные. Тем не менее, спросите себя, не лучше ли вам просто нанести на график фактические данные. Есть веская причина, почему plot просто соединяет точки!
Что касается диапазона оси Y, вы можете установить минимальное и максимальное значение, не касаясь оси X, с помощью ylim следующее,
Matlab Smooth
‘smooth’ function is used for getting smooth’s the response of input arguments using methods such as moving average, Savitzky-Golay filter and ‘lowess’ models or by fitting a smoothing spline.‘Smooth’ function gives the different result as compared to the filter function because smooth function ishandling at the endpoint. In matlab smooth functionwork by using two statements one is ‘smooth’ and another is ‘smoothdata’.The ‘smooth’ statement isuse for smooth response data.The ‘smoothdata’ statement is used forsmooth noisy data.‘smoothdata’ statement gives options like moving median and Gaussian methods.yy = smooth( y ) is used for smooths the response data in y variable
Syntax of Matlab Smooth
Syntax related to smooth response data:
Hadoop, Data Science, Statistics & others
- yy = smooth(y)
- yy = smooth(y,span)
- yy = smooth(y,method)
- yy = smooth(y,span,method)
- yy = smooth(y,’sgolay’,degree)
- yy = smooth(y,span,’sgolay’,degree)
- yy = smooth(x,y,___)
Syntax related to smooth noisy data
- B = smoothdata(A)
- B = smoothdata(A,dim)
- B = smoothdata(___,method)
- B = smoothdata(___,method,window)
- B = smoothdata(___,nanflag)
- B = smoothdata(___,Name,Value)
- [B,window] = smoothdata(___)
How does Smooth works in Matlab?
In matlab smooth ‘smooth’ statement is use for smooth response data. The ‘smoothdata’ statement is used for smooth noisy data.
The steps for smooth response data:
- Step 1: First input argument is take in the variables.
- Step 2: Then we use the “smooth” statement.
- Step 3: Then we use “subplot” and “plot” to plot the smooth response data signal.
The steps for smooth noisy data:
- Step 1: First input singnal is take in the variables which containing noise.
- Step 2: Then we use “smoothdata” to smooth noisy data.
- Step 3: Then we use “subplot” and “plot” to plot the smooth response data signal
Examples of Matlab Smooth
Following are the examples are given below:
Example #1
Let us see one example of matlab smooth. A basically smooth function used for decreasing noise contain in the signals. In this example, we discuss about how smooth function is used for reducing the noise. In this example, we take Y in the range of 0 to 30 with 0.1 differences. Then a continuous and distorted signal y generated with the help of y signal. Now we use smooth statement to reducing the noise within signal y = sin(Y) + 0.5*(rand(size(Y))-0.5) .To reducing the noise within signal loess and rloess methods are used. The processed signal is stored at yy1 and yy2 respectively. Now subplot and plot function are used to plot the data. A subplot(2,1,1) and plot(Y,y,’b.’,Y,yy1,’r-‘)is used to plot smoothed data using ”loess”’ method. A subplot(2,1,2) and plot(Y,y,’b.’,Y,yy2,’r-‘) is used to plot smoothed data using ”rloess” method.legend statement used to display data across the data.
clc ;
close all ;
clear all;
Y = (0:0.1:30)’;
y = sin(Y) + 0.5*(rand(size(Y))-0.5);
y([90,110]) = 3;
yy1 = smooth(Y,y,0.1,’loess’);
yy2 = smooth(Y,y,0.1,’rloess’);
subplot(2,1,1)
plot( Y ,y,’b.’,Y,yy1,’r-‘)
set(gca,’YLim’,[-1.5 3.5])
legend(‘Original data’,’Smoothed data using »loess»’.
‘Location’,’NW’)
subplot(2,1,2)
plot(Y,y,’b.’,Y,yy2,’r-‘)
set(gca,’YLim’,[-1.5 3.5])
legend(‘Original data’,’Smoothed data using »rloess»’.
‘Location’,’NW’)
Output:
So the smooth function get reduced the unwanted signal from the original signal. Fig 1 shows the graphs two graphs one is Original data and Smoothed data using the loss method. And another is Original data and Smoothed data using the loess method.
Example #2
Let us see another example of a smooth function. The basically smooth function used for decreasing noise contain in the signals. In this example, we smooth a24-by-3 array count which contains counts at three intersections using smooth statement In this example data file (count.dat ) is loaded. Data with the noise is a parent in this data file. The 24-by-3 array count contains counts at three intersections. Thus, smoothing column wise gives a more meaningful picture of the count through each intersection. Here we use the moving average filter to smooth each column of the data separately with smooth function. Subplot and plot function used toplot the original data and the data smoothed by linear index and by each column separately. After that, we plot the difference between the two smoothed data sets that are A2 – A1. These two methods give different results near the endpoints. The title function is used for giving the title to the graphs.
clc;
close all;
clear all;
load count.dat
A = smooth(count(:));
A1 = reshape(A,24,3);
A2 = zeros(24,3);
for I = 1:3
A2(:,I) = smooth(count(:,I));
end
subplot(3,1,1)
plot(count,’:’);
hold on
plot(A1,’-‘);
title(‘Smooth A1 (All Data)’)
subplot(3,1,2)
plot(count,’:’);
hold on
plot(A2,’-‘);
title(‘Smooth A2 (Each Column)’)
subplot(3,1,3)
plot(A2 — A1,’o-‘)
title(‘Difference A2 — A1’)
Output:
Conclusion
In this article we saw the concept related to matlab smooth, basically, matlab smooth is used for reducing the noise within a input arguments. Then saw syntax related to matlab smooth statements and how it is used in matlab code. Also, we saw some examples related to matlab smooth statement.
Recommended Articles
This is a guide to Matlab Smooth. Here we discuss the introduction and how does smooth works in matlab? along with different examples and its code implementation. You may also have a look at the following articles to learn more –
Практическая часть
Табличные данные очень часто удобно интерпретировать как некоторую функцию, в частности, полиномиальную или сплайн — гладкую функцию, которая на отрезках области определения равна полиномам определенной степени. Будем различать два критерия приближения табличных функций: интерполирование, при котором аппроксимирующая функция совпадает с табличной в узлах, и сглаживание, основанное на минимизации некоторого критерия, например, суммы квадратов отклонений в узлах. Итак, возникает задача о построении полиномиальной или кусочно-полиномиальной функции для приближения некоторых дискретных данных. Набор вычислительных функций MATLAB содержит функции для решения таких задач, как в случае одномерных, так и многомерных данных. Самым простым способом интерполяции является аппроксимация данных сплайном нулевого порядка (на каждом участке степень полинома равна нулю), при которой значение в каждой промежуточной точке принимается равным ближайшему значению, заданному в таблице. В результате данные приближаются ступенчатой функцией, а само приближение называется интерполяцией по соседним точкам. Линейная интерполяция основана на соединении соседних точек отрезками прямых — табличные данные приближаются ломаной линией (сплайн первого порядка дефекта единица). Для получения более гладкой функции следует применять интерполяцию кубическими сплайнами.
Постановка задачи
Определить по кривой (рис. 1), при б=0° (для оцифровки графиков удобно воспользоваться программой GetData) значение в интервале , и интерполировать полученные данные с помощью кусочно-линейной интерполяцией и кубическим сплайном. Результаты интерполяции представить графически. Определить площадь под кривой численным интегрированием.
Рис. 1. Кривая зависимости безразмерной величины нагрузки от безразмерной деформации
Решение задачи
Схема решения данной задачи в MATLAB состоит из следующих этапов:
1. Определение по кривой при б=0° значений в интервале .
2. Интерполирование полученных данных с помощью кусочно-линейной интерполяции и кубическим сплайном.
3. Построение графиков исходной зависимости и графиков интерполянтов.
4. Определение площади под кривой численным интегрированием (метод трапеций).
Значения в интервале были найдены с помощью оцифровки графика программой GetData:
§ нанесение координатных осей (Команды > Установить систему координат);
§ оцифровка графика (Команды > Авто трассировка линий);
§ удаление ненужных точек (Команды > Ластик точек данных);
§ сохранение массивов точек в файл (Файл > Экспорт данных).
Данные способы интерполяции реализованы в функции interp1. Функция yi = interp1 (x, y, xi) строит интерполирующую кривую для одномерного массива y, заданного на сетке x; выходной массив yi может быть определен на более мелкой сетке xi. Если Y — двумерный массив, то интерполирующая кривая строится для каждого столбца. По умолчанию реализована линейная интерполяция.
Для использования yi = interp1 (x, y, xi, `<метод>») следует задать координаты абсцисс промежуточных точек, в которых вычисляются значения интерполянта, и способ интерполирования:
§ ‘linear’ — линейная интерполяция (применяется по умолчанию, если способ интерполирования не задан);
При линейной интерполяции MATLAB соединяет существующие точки данных прямыми линиями. Использует векторы данных и , чтобы возвратить интерполируемое значение , соответствующее третьему аргументу . Аргументы и должны быть векторами одинаковой длины. Вектор должен содержать вещественные значения, расположенные в порядке возрастания. Эта функция соединяет точки данных отрезками прямых, создавая таким образом ломаную. Интерполируемое значение для конкретного х есть ордината у соответствующей точки ломаной. Для значений , расположенных перед первой точкой в векторе , MATLAB продолжает ломаную прямой линией, проходящей через первые две точки данных. Для значений , расположенных за последней точкой , MATLAB продолжает ломаную прямой линией, проходящей через последние две точки данных. Для получения наилучших результатов должно находится между самыми большими и самыми маленькими значениями — маловероятно, что будут полезны значения, вычисленные для вне этого диапазона.
§ ‘spline’ — интерполяция кубическими сплайнами;
Сплайн-интерполяция используется для представления данных отрезками полиномов невысокой степени — чаще всего третьей. При этом кубическая интерполяция обеспечивает непрерывность первой и второй производных результата интерполяции в узловых точках. Из этого вытекают следующие свойства кубической сплайн-интерполяции:
§ график кусочно-полиномиальной аппроксимирующей функции проходит точно через узловые точки;
§ в узловых точках нет разрывов и резких перегибов функции;
§ благодаря низкой степени полиномов погрешность между узловыми точками обычно достаточно мала;
§ связь между числом узловых точек и степенью полинома отсутствует;
§ поскольку используется множество полиномов, появляется возможность аппроксимации функций с множеством пиков и впадин.
В переводе spline означает «гибкая линейка». График интерполирующей функции при этом виде интерполяции можно уподобить кривой, по которой изгибается гибкая линейка, закрепленная в узловых точках. Сплайн-интерполяция дает неплохие результаты для функций, не имеющих разрывов и резких перегибов. Особенно хорошие результаты получаются для монотонных функций.
Методы линейной и кубической интерполяции реализуются довольно просто; что же касается интерполяции сплайнами, то в этом случае используются вспомогательные функции ppval, mkpp, unmkpp, которые образуют небольшой пакет для работы с кусочно-гладкими полиномами.
Выходным аргументом interp1 является вектор значений интерполянта в промежуточных точках.
Графики в декартовой системе координат строят с помощью команды plot. Команда plot имеет различные формы, связанные с входными параметрами. Результат выводится в специальном окне. Команда plot (x, у, «цвет_стиль_маркер’) — позволяет задавать цвет, стиль линий и маркеры. Аргумент ‘цвет_стиль_маркер» — это строковая константа, составленная из символов цвета, стиля линий и маркеров. Если определить только тип маркеров, но не указать стиль линий, MATLAB выведет на график только маркеры.
Нанесение надписей и сетки на графике:
§ xlabel (‘TEXT’) — маркировка оси х.
§ ylabel (‘TEXT’) — маркировка оси у.
§ legend (‘TEXT1’, ‘TEXT2’, …) — легенда.
Команда grid осуществляет нанесение координатной сетки. По умолчанию на двумерных графиках сетка не наносится. Для задания сетки нужно выполнить команду grid on, а убрать по команде grid off. Команда grid без параметров действует как переключатель.
Добавление кривых на существующий график:
§ hold on — обеспечивает продолжение вывода графиков в текущее окно;
§ hold off — отменяет режим продолжения;
§ hold — работает как переключатель с одного режима на другой.
Интегрирование методом трапеций:
§ I = trapz (x, y)
Функция I = trapz (x, y) вычисляет интеграл от функции y по переменной x, используя метод трапеций. Аргументы x и y могут быть одномерными массивами одинакового размера, либо массив Y может быть двумерным, но тогда должно выполняться условие size (Y, 1) = length(x). В последнем случае вычисляется интеграл для каждого столбца.
Текст файл-программы interpoljacija для решения данной задачи приведен в листинге 1.
Листинг 1. Файл-программа interpoljacija
% заполнение массивов для табличной функции
x = [-0.5 -0.4677 -0.4343 -0.3952 -0.3493 -0.2951 -0.2278 -0.1431 -0.0394 0.0803 0.2099 0.3445 0.4816 0.6225 0.7647 0.9009 1];
y = [16 14.6264 13.2183 11.8263 10.4538 9.1135 7.8345 6.6780 5.7083 4.9382 4.3355 3.8454 3.4550 3.1773 2.9703 2.7792 2.7];
% вывод графика табличной функции маркерами
% задание промежyточныx точек для интерполирования
xi = [x(1):0.1:x (length(x))];
% вычисление кyсочно-линейной фyнкции в промежyточныx точкаx
yline = interp1 (x, y, xi, ‘linear’);
% вычисление кyбического сплайна в промежyточныx точкаx
yspline = interp1 (x, y, xi, ‘spline’);
% для построения графиков в одном окне
% нанесение измерительной сетки
% построение графиков интерполянтов
plot (xi, yline, ‘k-‘, xi, yspline, ‘k — .’)
% нанесение названий координатных осей
legend (‘табличная фyнкция’, ‘линейная (linear)’, ‘кyбический сплайн (spline)’)
y1 = interp1 (x, y, x1, ‘spline’);
% нахождение площади под графиком
интерполяция инженерный сплайн matlab
Выполнение файл-программы interpoljacija приводит к появлению графика, изображенного на рис. 2., отражающего график табличной функции и графики интерполянты. Как видно, интерполяция кубическим сплайном является более точным методом интерполяции, чем кусочно-линейная, вследствие чего график сплайна располагается ближе к графику табличной функции. Также мы нашли площадь под графиком табличной функции: S = 8.1882 (кв. ед.).