Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 23:41   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
Восклицание Delphi: сглаживание сигнала или графика

Уважаемые форумчанины... Нужна ваша помощь
Преаод мой задал конкретную курсовую по Delphi Тема такая: Сглаживание сигнала. Она мне объяснила так:"есть например функция cos(x) ну и соответственно ее график. На этот график накладывается например белый шум. Т.е. уравнение становиться вида cos(x)+ур-ие белого шума. Нужно сгладить сигнал так, чтобы график стал опять cos(x)" Прога построена на основе трехдиагональной матрицы... Но у меня такой вопрос....
Какие тогда должны быть входными данными?
И если она мне правильно объяснила, то какое ур-ие имеет белый шум???
Буду вам очень благодарна вам))))
tanek вне форума Ответить с цитированием
Старый 23.11.2009, 01:29   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вот тут как раз недавно объяснял одному товарищу про сглаживание....

итак, вам лучше работать с компонентом TChart, так будет удобнее и он имеет функции для некоторых специфических действий...
1) пока не будем касаться гауссова распределения и будем считать, что белый шум мы сформируем через функцию randomize (потом замените на адекватную функу сами) и разместим полученный набор через AddXY() в 1-серию компонента tchart (см. рисунок)
2) сформируем в той-же области косинусоиду и тоже разместим во 2-серии того-же tchart
3) далее нам нужно получить суммарный сигнал, т.е. просуммировать каждый отсчет одного набора данных с соответствующим отсчетом второго набора данных... конечно это можно сделать в лоб по циклу, но вот тут-то нам и пригодяться столь замечательные возможности TChart, для этого воспользуемся функцией SetFunction устанавливающую требуемые действия над входящими наборами данных, например
Код:
SetFunction(TAddTeeFunction.Create(Self));
SetFunction(TSubtractTeeFunction.Create(Self));
SetFunction(TMultiplyTeeFunction.Create(Self));
SetFunction(TDivideTeeFunction.Create(Self));
SetFunction(TAverageTeeFunction.Create(Self));
SetFunction(THighTeeFunction.Create(Self));
SetFunction(TLowTeeFunction.Create(Self));
что нам это дает? ну по сути мы имеем возможность сразу добавлять сколь угодно большое количество данных и chart (точнее модуль <teefunci>) будет осуществлять заданный нами вариант действий... как добавить? Нет, ничего проще. Воспользуемся свойством Series3.DataSources.Add() столько раз сколько у нас наборов данных (в нашем случае 2 раза). После чего, через функу <CheckDataSource> "скажем", что можно выполнить действия, в итоге в 3-серии мы имеем - СУММАРНЫЙ СИГНАЛ
4) сглаживание можно осуществить несколькими способами (формулы вы можете найти в любом математическом справочнике)
- разложением сигнала в ряд Фурье и применением окон-фильтров с соответствующими коэффициентами (Блэкмена-Хэрриса, Хафмана и т.д.)
- использованием так называемых полиномов регресии (Лангранджа, Логарифмический, Линейный, Степенной, гиперболический, Экспотенциальный и т.д.)
- использованием экспотенциального, гауссова и других сглаживающих фильтрующих функций

например- полином логарифмической регрессии
Код:
function logreg(seriesin:TChartSeries;p:real):real;
var i,j,n:integer;a,b,c,d,e,f,k:real;
begin
 n:=seriesin.xValues.Count-1;
 a:=0;b:=0;b:=0;d:=0;

 for i:=0 to n do
  begin
   a:=a+log10(seriesin.xValues[i]+h);
   b:=b+2*log10(seriesin.xValues[i]+h);
   c:=c+seriesin.yValues[i];
   d:=d+seriesin.yValues[i]*log10(seriesin.xValues[i]+h);
  end;
 e:=(n+1)*b-a*a;
 f:=c*b-d*a;
 k:=(n+1)*d-a*c;
 f:=f/(e+h);
 k:=k/(e+h);
 //
 result:=f+k*log10(p);
end;
думаю и так понятно, что используется вырождение точек. Теперь рассмотрим - экспотенциальное сглаживание (аппроксимация). Общая формула такова:
Код:
V=Vp*(1-K)+V*K
отсюда сразу видны наши действия:
Код:
if k>1 then k:=k-trunc(k); // k = {0..1}
        z:=seriesin.YValues[i]*(1-k)+(z*k);
отсюда видно, что чем ближе к "1" коэффициент сглаживания тем выше эффект (см. рисунок - вложение)
5) что нам теперь остается? а ничего более как набор точек СУММАРНОГО СИГНАЛА передать в функцию сглаживания

зы: во вложении тестовый пример + функция генерации белого шума. Внимание, пока не разберетесь с принципом его получения - не использовать. Не думайте, что я вам разжевал и в рот положил, без глубокого понимания теории о том что и для чего делается дальше двигаться будет трудно...
Изображения
Тип файла: jpg скрин.jpg (140.5 Кб, 563 просмотров)
Вложения
Тип файла: zip полиномы и спектр.zip (5.7 Кб, 232 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 23.11.2009 в 09:07.
raxp вне форума Ответить с цитированием
Старый 23.11.2009, 19:28   #3
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

raxp спасибо тебе большое..... вот тока вышла маленькая оказия... сегодня мы заполняли бланки для курсовых работ и я не много попытала препода насчет входных параметров...
Оказывается входными параметрами будет дискретный сигнал и коеффициенты сглаживания...
Как она мне сказала дискретный сигнал это набор точек, точнее чисел...
Так у меня такой вопрос вот допустим у меня есть этот дискретный сигнал (2,1,3,-5,8,6,-7,0,-1,2,9,-6,3) по какокому правилу мне надо их внести в трехдиагональную матрицу????
tanek вне форума Ответить с цитированием
Старый 23.11.2009, 20:48   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Оказывается входными параметрами будет дискретный сигнал и коеффициенты сглаживания...
эм... если под дискретным сигналом ваш препод понимает уже готовый спектр, то тогда вам нужно
Цитата:
... применением окон-фильтров с соответствующими коэффициентами (Блэкмена-Хэрриса, Хафмана и т.д.)
кроме того, препод должен был вам указать какое окно имеется ввиду, другими словами какой фильтр накладывать, ну как пример Чебышева, Баттерворта и т.п. (для каждого из них своя формула, свое окно)... по-поводу построения программы в виде трехдиагональной матрицы, это вы мне должны пояснить, что имеется ввиду... потому как и занимаюсь цифровой обработкой сигналов, то про подобное слышу впервые.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.11.2009, 21:51   #5
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

raxp это tanek
Все началось с того, что я выбрала тему для курсача решение систем линейных уравнений методом прогонки. Этот метод решается с помощью трехдиагональной матрицы.
К ней нужно было найти прикладную задачу и препод посоветовал мне написать сглаживание сигнала для такого метода.... Она сказала что этот метод в основном применяется для обработки сигнала, в данном случаи для сглаживания...
Вот как бы и все....
а как понимать фразу
Цитата:
уже готовый спектр
? Это и есть скажем так набор чисел?
tanek вне форума Ответить с цитированием
Старый 25.11.2009, 23:01   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

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

>>> метод <<< >>> прогонки <<< хоть сам смотрели?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 25.11.2009 в 23:10.
raxp вне форума Ответить с цитированием
Старый 25.11.2009, 23:09   #7
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

как я понимаю звук в программу можно подать двумя способами:
сигналом и набора чисел или координат, с помощью которых мы можем построить график этого сигнала....
так?
tanek вне форума Ответить с цитированием
Старый 25.11.2009, 23:54   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

да, так... решили звук, а что с окнами?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 26.11.2009, 00:12   #9
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

мы фильтр не какой не накладываем.... пользователь задает дескретный сигнал и коэффициенты сглаживания....

вроде бы так.... по крайне мере про фильтр она не говорила, а про эти коеффициенты сказала

Последний раз редактировалось Stilet; 26.11.2009 в 08:12.
tanek вне форума Ответить с цитированием
Старый 26.11.2009, 00:26   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
пользователь задает дескретный сигнал и коэффициенты сглаживания....
очень хорошо... теперь давайте разберем как эти коэффициенты влияют на дискретный сигнал, хотелось-бы услышать ваше мнение
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сглаживание кривых безье, чтобы смотрелись плавно G@sh!sh Мультимедиа в Delphi 6 22.11.2009 19:28
Сглаживание Kn793 Мультимедиа в Delphi 2 28.06.2009 16:09
Сглаживание углов формы. celovec Общие вопросы Delphi 12 10.02.2009 17:44
TChart не поддерж-ет сглаживание лин графиков!((( JOHNNY BASIC Общие вопросы Delphi 6 08.10.2008 06:29
Требуется программист Delphi или VB или C#. Анна Долбилина Фриланс 11 04.08.2008 10:04