Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.01.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1401654602
Юрий
2014-06-02 00:30
2015.01.11
С днем рождения ! 2 июня 2014 понедельник


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


2-1387273889
_guest_
2013-12-17 13:51
2015.01.11
Текст по столбцам в Excel из Delphi XE4


15-1401913803
Юрий
2014-06-05 00:30
2015.01.11
С днем рождения ! 5 июня 2014 четверг


15-1401983298
Павиа
2014-06-05 19:48
2015.01.11
Мыша сходит с ума.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский