Как сгладить график в матлабе
Перейти к содержимому

Как сгладить график в матлабе

  • автор:

Как сгладить график в MATLAB?

У меня есть около 9000 точек, которые отображены на графике:

alt text

На самом деле, график не такой плавный, как я хотел. Есть ли какой-то способ сгладить график до необходимой степени?

Или какая-то форма порога, чтобы я мог выборочно сгладить слишком заметные части?

Поделиться Источник 04 октября 2009 в 09:03

5 ответов

Если у вас есть Инструментарий для подбора фигур, вы можете использовать функцию smooth . Метод по умолчанию является скользящим средним размера 5 (метод может быть изменен). Пример:

% some noisy signal Fs = 200; f = 5; t = 0:1/Fs:1-1/Fs; y = sin(2*pi*f*t) + 0.6*randn(size(t)); subplot(411) plot(y), title('Noisy signal') % smoothed signal subplot(412) plot( smooth(y, 5, 'moving') ), title('smooth') ylim([-2 2]) 

Если нет, вы можете использовать свою собственную оконную функцию, используя функцию filter из core MATLAB:

% equivalent to a moving average window wndwSize = 5; h = ones(1,wndwSize)/wndwSize; subplot(413) plot( filter(h, 1, y) ), title('filter + square window') % Guassian h = pdf('Normal',-floor(wndwSize/2):floor(wndwSize/2),0,1); subplot(414) plot( filter(h, 1, y) ), title('filter + Guassian window') 

screenshot

Поделиться 04 октября 2009 в 11:11

Простой (специальный) способ — просто взять взвешенное среднее (получаемое по alpha ) в каждой точке с соседями:

data(2:n-1) = alpha*data(2:n-1) + (1-alpha)*0.5*(data(1:n-2)+data(3:n)) 

или некоторые вариации. Да, чтобы быть более сложным, вы можете сначала преобразовать свои данные Фурье, а затем отсечь высокие частоты. Что-то вроде:

f = fft(data) f(n/2+1-20:n/2+20) = zeros(40,1) smoothed = real(ifft(f)) 

Это вырезает 20 самых высоких частот. Будьте осторожны, вырезая их симметрично, иначе обратное преобразование больше не является реальным. Вам нужно тщательно выбрать частоту отсечения для правильного уровня сглаживания. Это очень простой вид фильтрации (фильтрация в частотном домене), поэтому вы можете попробовать мягко вырезать частоты высокого порядка, если искажение неприемлемо.

Поделиться 04 октября 2009 в 09:16

FFT не плохая идея, но, вероятно, здесь она излишна. Скользящие или скользящие средние дают в целом плохие результаты и должны быть избеганы для чего-то, кроме поздней домашней работы (и белого шума).

Я бы использовал фильтрацию Савицкого-Голей (в Matlab sgolayfilt(. )). Это даст вам лучшие результаты для того, что вы ищете — некоторое локальное сглаживание при сохранении формы кривой.

Поделиться 05 ноября 2009 в 07:11

Иногда вам следует избегать использования мобильного среднего, так как он не является надежным для внешних пользователей. Мобильный медиан предпочтительнее в таких случаях.

Поделиться 14 июля 2011 в 14:36

Сначала я бы попробовал отобразить скользящее среднее на нескольких точках, например, 5 или 10. Таким образом, одно несоответствие значений оказывает небольшое влияние на график. Конечно, это зависит от того, насколько точным вам нужен график.

Как сгладить график из малого числа точек и нанести на него эти точки?

Author24 — интернет-сервис помощи студентам

Нанести точки на график
Здраствуйте) у меня такой вопрос. есть программа, которая определяет попадание точек в заданную.

Как сгладить график функции?
Помогите сделать график более гладким. figure(2) y2=2*log(x).*sin(x); plot(x,y2,’b’), grid.

Сформировать массив их 120 эл-тов. Найти все простые числа. Построить график и нанести на числовую ось.
Сформировать с помощью функции RND массив их 120 элементов. Найти все простые числа. Построить.

Как сгладить график построенный по точкам в Mathcad Prime
Помогите научиться сглаживать графики в Mathcad Prime.

5236 / 3564 / 378
Регистрация: 02.04.2012
Сообщений: 6,471
Записей в блоге: 17

Лучший ответ

Сообщение было отмечено как решение

Решение

Чтоб нанести точки нужно указать в plot тип маркера точек:
plot(R,d,’or’) — линий не будет,а точки будут отображены красными кружками.
Можно вместо «o» написать «.», «*» и много чего еще, чего я не помню но есть в help-е
Чтобы сделать сглаживание пожалуй можно применить spline-интерполяцию:

1 2 3 4 5 6 7
clear, clc R = [0 75 200 300 430]; d = [8.5 16 29.7 63.7 79.6]; x = linspace(min(R),max(R),100); y = spline(R,d,x); % кажется так plot(R,d,'or', x,y,'-b') grid on

Документация

Этот пример показывает, как использовать графику и сглаживание шрифта в графиках MATLAB.

Что Сглаживает Графика?

Графическое сглаживание улучшает внешний вид графики в графиках. Сглаживание удаляет зубчатые ребра, которые следуют из использования пикселей или точек, чтобы представлять непрерывные объекты. Методы, используемые для графического сглаживания, включают мультивыборку и сглаживание.

Сглаживание графики в фигуре

Графическим сглаживанием управляют в фигуре при помощи свойства GraphicsSmoothing . По умолчанию свойство GraphicsSmoothing установлено в ‘on’.

f = figure; surf(peaks)

Можно выключить сглаживание графики путем установки свойства GraphicsSmoothing на ‘off’.

f.GraphicsSmoothing = 'off';

Сглаживание шрифта для текста и объектов осей

Свойство FontSmoothing текста или объекта осей управляет, как текст представляется. Когда FontSmoothing будет установлен в ‘on’, текст будет чертиться со сглаживавшими ребрами. Сглаживанием шрифта является ‘on’ по умолчанию.

t = text(14,27,-8.5, 'Minimum of Peaks');

t.FontSmoothing = 'off';

Почему выключают графическое сглаживание?

Без сглаживания графики горизонтальные и вертикальные строки будут казаться более резкими. Определенные типы диаграммы могут выглядеть лучше, когда графическое сглаживание выключено. Точно так же выключение сглаживания шрифта может сделать текст с помощью мелких шрифтов, кажутся более ясными.

pcolor(rand(6))

ax = gca; % get current axes ax.FontSmoothing = 'off'; % turn off axes font smoothing

f.GraphicsSmoothing = 'off'; % turn off figure graphics smoothing
Документация MATLAB
Поддержка
  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2019 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

Используя графическое сглаживание

В этом примере показано, как использовать графику и сглаживание шрифта в графиках MATLAB.

Что Сглаживает Графика?

Графическое сглаживание улучшает внешний вид графики в графиках. Сглаживание удаляет зубчатые ребра, которые следуют из использования пикселей или точек, чтобы представлять непрерывные объекты. Методы, используемые для графического сглаживания, включают мультивыборку и сглаживание.

Сглаживание графики в фигуре

Графическим сглаживанием управляют на рисунке при помощи GraphicsSmoothing свойство. По умолчанию, GraphicsSmoothing свойство установлено в ‘on’.

f = figure; surf(peaks)

Figure contains an axes object. The axes object contains an object of type surface.

Можно выключить сглаживание графики путем установки GraphicsSmoothing свойство к ‘off’.

f.GraphicsSmoothing = 'off';

Figure contains an axes object. The axes object contains an object of type surface.

Сглаживание шрифта для текста и объектов осей

FontSmoothing свойство текста или объекта осей управляет, как текст представляется. Когда FontSmoothing установлен в ‘on’, текст будет чертиться со сглаживавшими ребрами. Сглаживанием шрифта является ‘on’ по умолчанию.

t = text(14,27,-8.5, 'Minimum of Peaks');

Figure contains an axes object. The axes object contains 2 objects of type surface, text.

t.FontSmoothing = 'off';

Figure contains an axes object. The axes object contains 2 objects of type surface, text.

Почему выключают графическое сглаживание?

Без сглаживания графики горизонтальные и вертикальные линии будут казаться более резкими. Определенные типы диаграммы могут выглядеть лучше, когда графическое сглаживание выключено. Точно так же выключение сглаживания шрифта может сделать текст с помощью мелких шрифтов, кажутся более ясными.

pcolor(rand(6))

Figure contains an axes object. The axes object contains an object of type surface.

ax = gca; % get current axes ax.FontSmoothing = 'off'; % turn off axes font smoothing

Figure contains an axes object. The axes object contains an object of type surface.

f.GraphicsSmoothing = 'off'; % turn off figure graphics smoothing

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *