Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 2
1

Фильтрация цифрового сигнала

17.11.2015, 20:49. Просмотров 1367. Ответов 4

Ребят, помогите, пожалуйста. Есть "сигнал" в массиве. Его необходимо отфильтровать ФНЧ и ФВЧ. Работали в matlab - было все хорошо, но нас заставили перейти в Delphi Помогите, если не трудно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 procedure TForm1.Button1Click(Sender: TObject);
  var s_tek, j: integer;
  begin
  i:=0;
  Series1.Clear;
  with OpenDialog1 do
  if Execute then
    begin
      assignfile(t, FileName);
      Reset(t);
      while not EOF(t) do
             begin
             Readln(t, s_tek);
             try
             Series1.AddXY(i/200,s_tek,'',clRed);
             except end;
             i:=i+1;
             end;
      closefile(t);
      end;
      n:=i-1;
      SetLength(a,i);
      for j:=0 to n do
      begin
        a[j]:=Series1.YValues[j] // собственно, вот этот массив который надо отфильтровать
      end;
      end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2015, 20:49
Ответы с готовыми решениями:

Открыть файл формата WAV, воспроизвести его и отобразить график амплитуды и времени этого сигнала (файла), а также спектр сигнала
Здравствуйте ! Помогите пожалуйста с программой на Delphi 7. Не могу написать программу которая...

Анализ цифрового сигнала.
Есть устройство которое передает определенную пачку импульсов. Логического анализатора нет, есть...

Генератор цифрового сигнала
Есть задумка использовать COM-порт как генератор цифрового сигнала. Т.е. получается задача...

Спектр цифрового сигнала
В своей работе я задал цифровой сигнал как массив с определенным числом отсчетов (дискретов). ...

4
Пишу на Delphi...иногда
1417 / 1275 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
18.11.2015, 00:13 2
фильтр по своей сути также некоторая функция, умножением (в частотной области) отсчета функции сигнала (каждый отсчет - это элемент массива а, применительно к имеющемуся коду) на отсчет функции фильтра получается отфильтрованный сигнал
0
2432 / 1739 / 368
Регистрация: 11.09.2009
Сообщений: 6,422
20.11.2015, 17:38 3
Цитата Сообщение от antikusic Посмотреть сообщение
Есть "сигнал" в массиве. Его необходимо отфильтровать ФНЧ и ФВЧ.
Придётся вам читать про цифровые фильтры. Как минимум, сначала надо определиться с типом и порядком фильтра, потом что-то считать.
0
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 2
22.11.2015, 14:44  [ТС] 4
С этим разобралась. Выбор пал на адаптивный фильтр. Только кажется, что я что-то не догоняю в создании эталонного сигнала помехи. Так как на выходе у меня получается синусоида... А должен быть сигнал ЭКГ без шумов.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Button3Click(Sender: TObject); // фильтрация - адаптивный фильтр
var i:integer;
S,S1,t,out,w1,w2:array of extended;
mu: double;
begin
setlength(S, Length(a));
setlength(t, Length(a));
setlength(Out, Length(a));
setlength(S1, Length(a));
setlength(w1, Length(a));
setlength(w2, Length(a));
Series2.Clear;
    mu:=1e-11;    // коэффициент определяющий глубину адаптации
    w1[0]:=0.5;   // изначальное значение весового коэффициента 1
    w2[0]:=0.5;   // изначальное значение весового коэффициента 2
    Out[0]:=a[0];
    for i:=0 to length(a)-1 do
    begin
    S[i]:=1500*sin(2*3.14*50*i);     // эталонный сигнал
    S1[i]:=1500*cos(2*3.14*50*i);   // эталонный сигнал сдвинутый на 90
    w1[i]:=w1[i]+2*mu*Out[i]*S[i]; // весовой коэффициент 1 по текущему отсчету
    w2[i]:=w2[i]+2*mu*Out[i]*S1[i]; // весовой коэффициент 2 по текущему отсчету
    Out[i]:=a[i]-(w1[i]*S[i]+w2[i]*S1[i]); // выходной сигнал
    w1[i+1]:=w1[i]+2*mu*Out[i]*S[i];    // перерасчет весового коэффициента 1
    w2[i+1]:=w2[i]+2*mu*Out[i]*S1[i];   // перерасчет весового коэффициента 2
    Series2.AddXY(i/200,Out[i],'',clRed);
    end;
0
Миниатюры
Фильтрация цифрового сигнала  
2432 / 1739 / 368
Регистрация: 11.09.2009
Сообщений: 6,422
23.11.2015, 10:38 5
Цитата Сообщение от antikusic Посмотреть сообщение
на выходе у меня получается синусоида...
В вашем коде ничего не сказано, как формируется массив "а" (видимо, это и есть входной сигнал?).

Проверьте алгоритм расчёта и индексы.
В цикле считаются w1 и w2. В конце цикла после расчёта Out считаются элементы [i+1], но эти расчитанные значения не используются, так как при следующем входе в цикл эти ячейки становятся [i]-тыми и пересчитываются заново до расчёта Out.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2015, 10:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Измеритель скважности цифрового сигнала
Приветствую, в общем суть такая, дали задание сделать измеритель скважности сигнала, сигнал...

Спектр цифрового звукового сигнала
Собственно я занимаюсь обработкой сигналов для своей дипломной, но не могу понять как перейти от...

Codesys. Фильтр цифрового сигнала
Бодрого времени суток) Нужно реализовать фильтр цифрового сигнала с использованием непрерывного...

Фильтрация ВЧ сигнала
Здравствуйте, подскажите, пожалуйста, какой фильтр лучше выбрать, если необходимо отфильтровать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.