Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
1

Aмплитудно-Частотная Характеристика, delphi 7

19.06.2011, 22:02. Показов 4242. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
28
29
30
31
32
33
34
35
построить АЧХ характеристику сигнала, используя ряд фурье 
 
procedure TForm1.Button1Click(Sender: TObject);
const
M=15;
Var
a,c,b,f: array [1..M] of real;
t,n:integer;
w,dt: real;
begin
form1.Series1.Clear;
dt:=StrtoFloat(Edit1.text);
 
 
for n:=1 to M do
  begin
 a[n]:=0;
  b[n]:=0;
 
 
  for t:=1 to M do
 begin
 w:=2*pi/t+dt;
    f[t]:=sin((5/20)*t)+sin((2/20)*t);
  a[n]:=a[n]+(f[t]*cos(n*w*(t+dt)))*dt;
     b[n]:=b[n]+(f[t]*sin(n*w*(t+dt)))*dt;
 
 
 
 
   c[n]:=sqrt(a[n]*a[n]+b[n]*b[n]);
    form1.Series1.AddXY(w,c[n]);
end;
 end;
   end;
нада чтоб получилса такой график
но чето ничего не получается
Миниатюры
Aмплитудно-Частотная Характеристика, delphi 7  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2011, 22:02
Ответы с готовыми решениями:

Характеристика Delphi
Напишите кто знает или дайте ссылку где написана "Общая характеристика среды программирования...

Частотная характеристика
=freqz(B,A,N) -вычисление нормированной комплексной частотной характеристики фильтра с...

Частотная характеристика
Рассчитать частотную характеристику цепи в показательном виде и в алгебраическом виде ....

Амплитудно - фазовая частотная характеристика
Необходимо построить амплитудно-фазовую частотную характеристику (АФЧХ) даны формулы A(\omega...

20
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
19.06.2011, 22:41 2
так подойдет ?
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
28
29
30
31
procedure TForm1.FormPaint(Sender: TObject);
var x0, y0: Integer;
    x,y: Real;
    m: Integer;
    A: Array of TPoint;
    k,i: Integer;
begin
  x0 := 0;
  y0 := ClientHeight div 2;
  x := 0;
  m := 40;
  y := 0;
  k := 0;
 
  while x <= 20 do
    begin
      y := Cos(x)+1;
      //Canvas.Pixels[Round(x0+x*m), Round(y0-y*m)] := clGreen;
      SetLength(A,k+1);
      A[k].X := Round(x0+x*m);
      A[k].Y := Round(y0-y*m);
      x := x+0.1;
      k := k+1;
    end;
 
  for i := 0 to Length(A)-1 do
    begin
      Canvas.MoveTo(A[i].X, y0);
      Canvas.LineTo(A[i].X, A[i].Y);
    end;
end;
Миниатюры
Aмплитудно-Частотная Характеристика, delphi 7  
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
19.06.2011, 23:00  [ТС] 3
Спасибо но можете обяснить более легким языком я в делфи не разбираюсь
ваш вариант очень сложный для мого восприятия
задание такое Построить Амплитудно частотную характеристику квазипериодического сигнала используя ряд фурье
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
19.06.2011, 23:38 4
Вариант подходит?

Ну объясню на словах, а не кодом тогда, задали функцию косинуса, начали давать функции аргументы, через цикл 15 строка, и подаем функции эти аргументы с шагом 0.1 то есть сперва дали косинусу 0 Cos(0) = 1, потом дали Cos(0.1) потом 0.2 и так далее, начали получать какие-то числа теперь в результате решения, эти цифры мы записали в массив двумерный, как точку х так и точку у, а посчитали мы довольно много точек, мы считали от 0 до 20 с интервалом 0.1, 20/0.1 ну или 20*10 = 200 точек получили !!!

далее, самое интересное, мы начали рисовать палочки, от у = 0 до точки которую вырешала нам функция то есть Cos(0) = 1, и вот строим от 0 до 1 вверх палку, теперь переходим к другой точке и так же нарисовали от 0 до новой точки которая была вырешена от Cos(0.1) и снова палочку вверх нарисовали, и так пока не дошли до конца

все это дело мы замаштабировали, вот где увидите что-то умноженное на m, а m = 40, то есть все увеличили в 40 раз, иначе мы бы ничего не смогли бы разглядеть, если бы функция нам бы выдавала от -1 до 1 числа, в 2 пиксела ничего не разглядеть было бы

если 26-30 строки закоментировать, а 18 раскоментировать, мы получим косинусоиду на нашем экране, зеленого цвета

вроде все написал понятно, будут вопросы - пиши - отвечу
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
20.06.2011, 00:16  [ТС] 5
Я проста в таком синтаксисе не розбираюсь
и в динамических масивах несилен
можна както это дело организовать в Button1Click
и вывод зделать в Series1
что незнаю:
1 я так понял это динамический масив A: Array of (TPoint - что ето за тип ?)
2 y0 := (ClientHeight- это что) div 2;
3 A[k].X := Round(x0+x*m);
A[k].Y := Round(y0-y*m);
что мы это делаем

Добавлено через 4 минуты
мне вообше надо чтоб в тексте присутствовал преобразование фурье

тоесть амплитуда частота

Добавлено через 8 минут
вот мне помогли с моим вариантом помогите реализовать кодом


1) Базовая частота w будет 2*pi/M, тк делится не на время, по которому интегрируется, а на период. Соответственно, вычислить её можно в самом начале.
2) t от 1 до M. Интегрируем-то по всему периоду.
3) dt какое-то странное. По идее, это шаг суммирования по t (того самого, что заменяет интегрирование), у вас это всегда 1. Боюсь, что программу придётся писать с нулика только из-за этого. То, что прибавляется к a[n] и b[n], должно предварительно умножаться на dt. Колебания функции происходят слишком быстро (что делать с этим, надо подумать. Ориентировочно - повсюду t и dt уменьшить во сколько-то раз. Или для начала поуменьшать частоты в f[t] раз эдак в 10. Надеюсь, сработает. Нужно ещё математическое обоснование). А прибавлять dt к t смысла нет (см. ниже).
Больше ошибок не заметил Теперь оптимизация:
4) Функцию лучше вычислить 1 раз в отдельном цикле в начале программы.
5) c[n] лучше вычислять после цикла по t внутри цикла по n.
6) Зачем к t прибавлять dt? Когда всё получится, попробуйте с dt и без dt - (не) увидите разницу.
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
20.06.2011, 10:24 6
Цитата Сообщение от kill me Посмотреть сообщение
Колебания функции происходят слишком быстро
По-моему, если функция типа синуса или косинуса, то аргумент надо просто во сколько-то раз понизить. Аргумент там в принципе отчасти можно и частотой назвать, хотя это не так...

А что в ряд фурье разложить-то надо? Синус?
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
20.06.2011, 20:27  [ТС] 7
можна вписать любую формулу чтоб вышел график какой в теме у меня в вкладке
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
21.06.2011, 06:57 8
Ну, как у тебя - это что-то типа:
f(x) = 1 - Sin(x);

Не по теме:

Правда я не помню, как такое в ряд Фурье разложить. Это скорее тебе к математикам надо обратиться. А ряд фурье забавная штука - тебе нужно осуществить суммирование первых n членов ряда.

0
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
21.06.2011, 17:16  [ТС] 9
ну разлаживать ненадо вроде как бе
1) определили константы
2) звпускаем цикл по (n)
запускаем цыкл от 1 до N и в цыкле сумируем f(t)
Delphi
1
2
3
 for n:=1 ti 20 do
 begin 
  for t:=1 to N do
a(n):=..... -амплитуда каждой гармоники
b(n):=.....-амплитуда каждой гармоники
end;
3) используя масивы а и б расчитать масив А
и вывести его в виде гистограмы используя компонент Тchar
w:=2*pi/t- частота
c[n]:=sqrt(a[n]*a[n]+b[n]*b[n]);- амплитуда

Добавлено через 4 часа 35 минут
Вот нашол чтото похожее на то что мне нужно
помогите переделать код
на мой вариант
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls;
 
type
 TSingleArray = array[0..10000] of extended; //Single
 TForm1 = class(TForm)
 Button1: TButton;
 Chart1: TChart;
 Chart2: TChart;
 Series3: TLineSeries;
 Series4: TLineSeries;
 Series1: TLineSeries;
 Series2: TLineSeries;
 Procedure DTF(var Array_Re,Array_Im:TSingleArray;size:LongInt);
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
var
 Form1: TForm1;
 Array_Re,Array_Im:TSingleArray;
 implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 var
 i,n: integer;
 
begin
 n:=512;
 Series1.Clear;
 Series2.Clear;
 Series3.Clear;
 Series4.Clear;
 for i := 0 to n - 1 do
 begin
 Array_Re[i]:=sin(i)+1;
 Array_Im[i]:=0;
 Series1.AddY(Array_Re[i]);
 Series2.AddY(Array_Im[i]);
 end;
 DTF(Array_Re,Array_Im,n);
 for i := 0 to n - 1 do
 begin
 Series3.AddY(Array_Re[i]);
 Series4.AddY(Array_Im[i]);
 end;
 end;
 
Procedure TForm1.DTF(var Array_Re,Array_Im:TSingleArray;size:LongInt);
 Var
 t,f : LongInt;
 k,norm : Single;
 Temp_Array_Re,Temp_Array_Im : Array Of Single;
 Begin
 k:=2*pi/size;
 norm:=1/sqrt(size);
 SetLength(Temp_Array_Re,size);
 SetLength(Temp_Array_Im,size);
 For t:=0 To size-1 Do
 begin
 Temp_Array_Re[t]:=Array_Re[t];
 Temp_Array_Im[t]:=Array_Im[t];
 end;
 For t:=0 To size-1 Do
 Begin
 Array_Re[t]:=0;
 Array_Im[t]:=0;
 For f:=0 To size-1 Do
 begin
 Array_Re[t]:=Array_Re[t]+Temp_Array_Re[f]*cos(k*f*t);
 Array_Im[t]:=Array_Im[t]+Temp_Array_Re[f]*sin(k*f*t);
 end;
 Array_Re[t]:=norm*Array_Re[t];
 Array_Im[t]:=norm*Array_Im[t];
 End;
 End;
 end.
 Комментарий модератора 
Используйте специальные теги форматирования!
0
Stohan
21.06.2011, 17:35
  #10

Не по теме:

Я бы сказал, используйте русский язык

0
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
21.06.2011, 17:44  [ТС] 11
Попыталса сам переделать но неработает чтото делаю нетак

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
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.Button1Click(Sender: TObject);
const
M=20;
 
Var
a,c,b,f: array [1..M] of real;
 t,n:integer;
  w,dt:real;
begin
   N:=200;
form1.Series1.Clear;
 dt:=StrtoFloat(Edit1.text);
  w:=2*pi/M;
 
 
 for  t:= 0 to N  do
 begin
  f[t]:=Sin(t)+1;
 end;
 
 
 
{ for n:=0 to m-1 do
 f[t]:=fy[t] }
 
 for n:=0 to M do
  begin
  a[n]:=0;
  b[n]:=0;
 for t:=0 to M do
   begin
 
  a[n]:=a[n]+(f[t]*cos(n*w*t))*dt;
  b[n]:=b[n]+(f[t]*sin(n*w*t))*dt;
  c[n]:=sqrt(a[n]*a[n]+b[n]*b[n]);
  form1.Series1.AddXY(w,c[n]);
  end;
   End;
 End;
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
21.06.2011, 19:51 12
попробуй после 29 строчки поставить end; а из строки 38 например удалить end;
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
21.06.2011, 20:30  [ТС] 13
Цитата Сообщение от Arcor Посмотреть сообщение
попробуй после 29 строчки поставить end; а из строки 38 например удалить end;
непомогает когда нажимаю на кнопу
машина начинает ругатса и вылазит окно CPU с непонятными символами
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
21.06.2011, 20:40 14
да действительно, что-то проглядел, глупость в общем сморозил, а что такое Series оно у вас есть? это что за такое чудо вы так назвали? Мне кажется из за него не работает

попробуй так заменить свой Series
Delphi
1
Form1.Canvas.Pixels[w,c[n]] := clBlack;
0
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
21.06.2011, 21:16  [ТС] 15
а где находитса этот канвас пиксель

Добавлено через 8 минут
Цитата Сообщение от Arcor Посмотреть сообщение
да действительно, что-то проглядел, глупость в общем сморозил, а что такое Series оно у вас есть? это что за такое чудо вы так назвали? Мне кажется из за него не работает

да это компонент Tchar находитса в вкладке additional>>char(может быть неустановлен на некоторых версиях delphi)
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
21.06.2011, 21:25 16
Цитата Сообщение от kill me Посмотреть сообщение
а где находитса этот канвас пиксель
этот нигде не находится, это метод формы такой, для рисования, и у этого метода для рисования есть свой метод называется пиксель

С чартом не работал, не знаю даже теперь что нужно делать
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
22.06.2011, 00:54  [ТС] 17
ну как мне на канвас пиксель реализовать такую програму можна ?

Добавлено через 3 часа 14 минут
От вроде периписал еще раз програму
но пишет ошибка Incompatible types: 'String' and 'real'
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
28
29
30
31
32
33
34
35
36
37
38
procedure TForm1.Button1Click(Sender: TObject);
const
size=50;
 
var
 f,a,b,c: array [1..size] of real;
  w: real ;
   dt:real;
   i,n: integer;
    t,o : integer;
 
begin
 n:=200;
  Series1.Clear;
  dt:=StrtoFloat(Edit1.text);
  for i := 0 to n - 1 do
 begin
 f[i]:=Sin(1*i*pi/180)+1;
 end;
 
  w:=2*pi/size;
 
 
 For t:=0 To size-1 Do
  Begin
   a[t]:=0;
    b[t]:=0;
 For i:=0 To size-1 Do
   begin
    a[t]:=a[t]+(f[i]*cos(w*i*t))*dt;
     b[t]:=b[t]+(f[i]*sin(w*i*t))*dt;
      c[t]:=sqrt(a[t]*a[t]+b[t]*b[t]);
       Series1.AddY(w,c[t]);--- выдилина красным
 
   end;
  end;
end;
 end.
Я так понял не совместимые типы флоатустр непомагает
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
22.06.2011, 02:37 18
сделай
Delphi
1
Series1.AddY(Round(w),Round(c[t]));
ошибки больше не должно быть
1
0 / 0 / 0
Регистрация: 19.06.2011
Сообщений: 20
22.06.2011, 10:37  [ТС] 19
когда поставил
Delphi
1
Series1.AddY(Round(w),Round(c[t]));
пишет
Incompatible types: 'String' and 'int64'
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
22.06.2011, 10:46 20
смотри еще ошибка, ты добавляешь 2 координаты в параметрах, а функцию указал как

Delphi
1
Series1.AddY
хотя в выше стоящем примере стоит
Delphi
1
Series1.AddХY
1
22.06.2011, 10:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2011, 10:46
Помогаю со студенческими работами здесь

Импульсная и частотная характеристика, нули и полюса
Прошу помощи умных людей. Не могу вывести формулы импульсной и частотной характеристик фильтра...

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

Частотная диаграмма
Добрый день! Подскажите как вывести диаграмму на веб-форме, к примеру мне нужно вывести такое...

Частотная модуляция
По стандартной формуле ЧМ: Uчм(t)=U*cos(w0*t+Kчм*интеграл от s(b) db в пределах от - бесконечности...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru