Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полосовой фильтр пятого порядка 
:(
    Опции темы
Beren
Дата 21.1.2013, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 28.3.2011

Репутация: нет
Всего: нет



Здравствуйте. Мне необходимо написать программу для моделирования фильтра пятого порядка. У меня есть программа для моделирования НЧ фильтра 8-го порядка. Можно как-нибудь её преобразовать ? Вот эта прграмма 
Код

unit uFilter;
interface
uses Generics.Collections;
type
  TMyFilter = class
  private
    faCof, fbCof, fX, fY: TList<Extended>;
  public
    constructor Init(aaCof, abCof: TList<Extended>);
    function GetValue(ax: Extended): Extended;
  end;
implementation
 
function TMyFilter.GetValue(ax: Extended): Extended;
var
  i, n: integer;
  tmps1, tmps2: Extended;
begin
  n := fX.Count;
  for i := 0 to n - 2 do
  begin
    fX.Items[i] := fX.Items[i + 1];
  end;
  fX.Items[n - 1] := ax;
 
  n := fY.Count;
  for i := 0 to n - 2 do
  begin
    fY.Items[i] := fY.Items[i + 1];
  end;
 
  tmps1 := 0;
  n := faCof.Count;
  for i := 0 to n - 1 do
  begin
    tmps1 := tmps1 + faCof.Items[i] * fX.Items[n - 1 - i];
  end;
 
  tmps2 := 0;
  n := fbCof.Count;
  for i := 0 to n - 1 do
  begin
    tmps2 := tmps2 + fbCof.Items[i] * fY.Items[n - 1 - i];
  end;
  fY.Items[n] := tmps1 - tmps2;
 
  result := fY.Items[n - 1];
end;
 
constructor TMyFilter.Init(aaCof, abCof: TList<Extended>);
var
  i, n: integer;
begin
  faCof := TList<Extended>.Create();
  fbCof := TList<Extended>.Create();
  fX := TList<Extended>.Create();
  fY := TList<Extended>.Create();
  n := aaCof.Count;
  for i := 0 to n - 1 do
  begin
    faCof.Add(aaCof.Items[i]);
    fX.Add(0);
  end;
  n := abCof.Count;
  for i := 0 to n - 1 do
  begin
    fbCof.Add(abCof.Items[i]);
    fY.Add(0);
  end;
  fY.Add(0);
end;
 
end.
 
 
unit ugenerator;
 
interface
uses classes;
type
  TGenerator = class
  private
    fFreq, fFreqDiscrete, fAmpl: Extended;
  public
    constructor Init(aF, aA, aFd: Extended);
    function GetValue(aX: Extended): Extended;
    function GetTime(aX: Extended): Extended;
  end;
 
implementation
 
function TGenerator.GetTime(aX: Extended): Extended;
begin
  Result := aX / fFreqDiscrete;
end;
 
function TGenerator.GetValue(aX: Extended): Extended;
begin
  Result := fAmpl * cos(2 * Pi * fFreq * GetTime(aX));
end;
 
constructor TGenerator.Init(aF, aA, aFd: Extended);
begin
  fFreq := aF;
  fFreqDiscrete := aFd;
  fAmpl := aA;
end;
 
end.
 
 
unit Unit1;
 
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uFilter, TeEngine, ExtCtrls, TeeProcs, Chart, StdCtrls, Series,
  ugenerator, Generics.Collections, Math;
 
type
  TForm1 = class(TForm)
    Chart: TChart;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Series1: TLineSeries;
    Series2: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  s1: TChartSeries;
  F, Fd, x, y1, y2, ymax, Ampl: Extended;
  i, n, n1: integer;
  Generator: TGenerator;
  F1, F2, F3, F4: TMyFilter;
  aCof, bCof: TList<Extended>;
  YWST: TChartSeries;
begin
  Ampl := 1;
  F := strToFloat(Edit1.Text);
  Fd := strToFloat(Edit2.Text);
  aCof := TList<Extended>.Create();
  bCof := TList<Extended>.Create();
  YWST := TChartSeries.Create(self);
 
  // filter 1
  aCof.Clear;
  aCof.Add(0.21484375);
  aCof.Add(0.42578125);
  aCof.Add(0.21484375);
 
  bCof.Clear;
  bCof.Add(-0.85546875);
  bCof.Add(0.71093750);
 
 
  F1 := TMyFilter.Init(aCof, bCof);
 
  // filter 2
  aCof.Clear;
  aCof.Add(0.16796875);
  aCof.Add(0.33593750);
  aCof.Add(0.16796875);
 
  bCof.Clear;
  bCof.Add(-0.67578125);
  bCof.Add(0.35156250);
  F2 := TMyFilter.Init(aCof, bCof);
 
  // filter 3
  aCof.Clear;
  aCof.Add(0.14453125);
  aCof.Add(0.28906250);
  aCof.Add(0.14453125);
 
  bCof.Clear;
  bCof.Add(-0.58203125);
  bCof.Add(0.16406250);
  F3 := TMyFilter.Init(aCof, bCof);
 
  // filter 4
  aCof.Clear;
  aCof.Add(0.13671875);
  aCof.Add(0.26953125);
  aCof.Add(0.13671875);
 
  bCof.Clear;
  bCof.Add(-0.54296875);
  bCof.Add(0.08203125);
  F4 := TMyFilter.Init(aCof, bCof);
 
 
  Generator := TGenerator.Init(F, Ampl, Fd);
  Chart.Series[0].Clear;
  Chart.Series[1].Clear;
  n := Round((Fd / F) * 10);
  n1 := Round((Fd / F) * 9);
  for i := 0 to n do
  begin
    x := Generator.GetTime(i) - 10 / F;
    y1 := Generator.GetValue(i);
    y2 := F4.GetValue(F3.GetValue(F2.GetValue(F1.GetValue(y1))));
    Chart.Series[0].AddXY(x, y1);
    Chart.Series[1].AddXY(x, y2);
    if i > n1 then
    begin
      YWST.AddXY(x, y2);
    end;
  end;
  ymax := (YWST.MaxYValue - YWST.MinYValue) / 2;
  Label2.Caption := 'Ослабление: ' + FloatToStr(20 * Log10(ymax / Ampl)) + 'dB';
end;
end.

Вот ссылка на полосовой фильтр  http://yadi.sk/d/6i-PvWdQ20dtC

Это сообщение отредактировал(а) Beren - 21.1.2013, 18:05
PM MAIL   Вверх
gesper
Дата 21.1.2013, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Что такое фильтр 5-го порядка?
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
northener
Дата 22.1.2013, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Beren @  21.1.2013,  18:02 Найти цитируемый пост)
 Мне необходимо написать программу для моделирования фильтра пятого порядка. У меня есть программа для моделирования НЧ фильтра 8-го порядка. Можно как-нибудь её преобразовать ?

Бесплатно, имхо нельзя. Да и платно лучше написать другую программу, а не преобразовывать что-то.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.