Форум: "Начинающим";
Текущий архив: 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 — 2] + a[i — 1] + a[i] + a[i + 1] + a[i + 2]) / 5;
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;
end.
← →
Jeer © (2013-12-17 11:18) [17]>Я выбрала адаптивный фильтр
Это Вам надо с Калманом познакомиться.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.01.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c