Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.01.11;
Скачать: CL | DM;

Вниз

фильтр в делфи   Найти похожие ветки 

 
demi ©   (2013-12-15 18:38) [0]

Здравствуйте! Мне нужно написать программу фильтрации в Делфи. Я задаю значения синусоиды (A,w,N)  и накладываю на нее случайную помеху и мне нужно потом отфильтровать обратно эту помеху. Как это сделать? Помогите пожалуйста.


 
Jeer ©   (2013-12-15 21:57) [1]

Не добавляй помеху, если не знаешь как от нее избавиться.


 
Dimka Maslov ©   (2013-12-16 09:16) [2]

Мне помнится, что отфильтровывать помеху научились ещё в XIX веке, когда после прокладки трансатлантического кабеля на другом конце не получили ничего, кроме помех.


 
KilkennyCat ©   (2013-12-16 09:17) [3]

ну если ты знаешь значения синусоиды, то выкини все, что ей не принадлежит. Принадлежность точки графику в школе ведь объясняли?


 
KilkennyCat ©   (2013-12-16 09:18) [4]


> Dimka Maslov ©

точно! нужна еще одна диффсинусоида,  и тогда сложение даст нужное без помех.


 
И. Павел ©   (2013-12-16 11:31) [5]

> [0] demi ©   (15.12.13 18:38)

Сперва решите задачу «на бумаге» — выберите фильтр. Как вариант: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80
Ну или можно еще проще: брать не средний элемент упорядоченного массива а среднее арифметическое.

Потом напишите программу. Для рисования удобно использовать TChart. Вот его описание: http://delphiworld.narod.ru/base/chart_comp.html


 
Jeer ©   (2013-12-16 14:52) [6]

>И. Павел ©   (16.12.13 11:31) [5]

Ваш ответ того же класса, что и вопрос.


 
brother ©   (2013-12-16 14:56) [7]

> Не добавляй помеху,

:) также отличный ответ!


 
Jeer ©   (2013-12-16 16:17) [8]

>brother ©   (16.12.13 14:56) [7]

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


 
brother ©   (2013-12-16 17:10) [9]

> я б ответил, честно.

да я не сомневался!


 
demi ©   (2013-12-16 18:34) [10]

> И. Павел ©   (16.12.13 11:31) [5]

Я выбрала адаптивный фильтр, но дело в том, что я вообще не представляю как реализуются фильтры сигналов в Delphi -раньше только в Matlab работала...


 
KilkennyCat ©   (2013-12-16 19:12) [11]


> как реализуются фильтры сигналов в Delphi

Delphi не является готовым специализированным инструментом для обработки сигналов. Но в ней (на нем) можно таковой инструмент создать. Почувствуйте разницу.


 
demi ©   (2013-12-16 19:36) [12]

> KilkennyCat ©   (16.12.13 19:12) [11]
Я и так это знаю.... Поэтому и прошу, чтобы мне подсказали алгоритм или программную реализацию, какого-либо фильтра.


 
RWolf ©   (2013-12-16 19:48) [13]

google: цифровой фильтр алгоритм


 
Jeer ©   (2013-12-16 23:26) [14]

О! Девушка!
( хотя, кого сейчас в ивропах считать за девушку? ) :)

Простейший фильтр экспоненциального сглаживания:

;РЕКУРСИВНЫЙ ФИЛЬТР ПЕРВОГО ПОРЯДКА
;
;                    B=EXP(-t/T) , A=1-B
; t - период дискретизации, Fc = 1/T - частота среза по уровню - 3 дБ.
; УРАВНЕНИЕ:   Y[i] = A*X[i] + B*Y[i-1]


 
Inovet ©   (2013-12-17 00:57) [15]

> [2] Dimka Maslov ©   (16.12.13 09:16)
> Мне помнится, что отфильтровывать помеху научились ещё в
> XIX веке, когда после прокладки трансатлантического кабеля
> на другом конце не получили ничего, кроме помех.

Там была проблема с большой индуктивностью кабеля, насколько помнится - вручную колотили телеграфным ключом, а на другом конце электромагнит должен был притягивать якорь, не тот который на проходящих мимо кабеля кораблях. А фиг.


 
И. Павел ©   (2013-12-17 08:35) [16]

> [10] demi ©   (16.12.13 18:34)

Вот простейший вариант фильтрации функции y = sin(x). Результат выводится на канву. На форме лежат две кнопки — у одной обработчик OnClick назван GetInputClick, а у другой — GetOutputClick. Первая функция генерирует сигнал с помехой, а вторая его выправляет.

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

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   GetInput: TButton;
   GetOutput: TButton;
   procedure GetInputClick(Sender: TObject);
   procedure GetOutputClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

var a: array [1..500] of double;

procedure TForm1.GetInputClick(Sender: TObject);
var i: integer;
begin
 randomize;
 for i := 1 to 500 do
 begin
   a[i] := sin(2 * pi * i / 50) + (5 — random(11)) / 100;

   if i > 1 then
   begin
     Canvas.MoveTo(i — 1, 100 + trunc(a[i — 1] * 100));
     Canvas.LineTo(i, 100 + trunc(a[i] * 100));
   end;
 end;
end;

procedure TForm1.GetOutputClick(Sender: TObject);
var i: integer;
begin
 Canvas.Rectangle(0, 0, Width, Height);
 for i := 1 to 500 do
 begin
   if (i > 2) and (i < 499) then
     a[i] := (a[i &#151; 2] + a[i &#151; 1] + a[i] + a[i + 1] + a[i + 2]) / 5;

   if i > 1 then
   begin
     Canvas.MoveTo(i &#151; 1, 100 + trunc(a[i &#151; 1] * 100));
     Canvas.LineTo(i, 100 + trunc(a[i] * 100));
   end;
 end;
end;

end.


 
Jeer ©   (2013-12-17 11:18) [17]

>Я выбрала адаптивный фильтр

Это Вам надо с Калманом познакомиться.



Страницы: 1 вся ветка

Текущий архив: 2015.01.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.005 c
2-1387229735
вова
2013-12-17 01:35
2015.01.11
Работа с указателями вопросы


15-1401375136
WalterWhite
2014-05-29 18:52
2015.01.11
Кириллица в Delphi


2-1387206682
demi
2013-12-16 19:11
2015.01.11
Фильтрация


2-1387118291
demi
2013-12-15 18:38
2015.01.11
фильтр в делфи


15-1401654602
Юрий
2014-06-02 00:30
2015.01.11
С днем рождения ! 2 июня 2014 понедельник