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

Амплитудная модуляция и демодуляция сигналов в системе связи

14.09.2013, 12:23. Просмотров 2311. Ответов 1
Метки нет (Все метки)

Всем доброго времени суток.

У меня проблема: преподаватель дал задание сделать модуляцию и демодуляцию исходного сигнала.
Дал процедуры и скриншоты того что должно быть:

1. Генерация сигнала
Delphi
1
2
3
4
5
6
procedure TfrMain.GenSignal(var arr: array of single); 
var i: integer; 
begin
for i:=low(arr) to high(arr) do
arr[i]:=a_sig*(sin(i*f_sig*tau*2*pi)); 
end;
Используемые параметры a_sig – амплитуда сигнала, f_sig – фаза сигнала, tau

2. Генерация шума
Delphi
1
2
3
4
5
6
7
8
procedure TfrMain.GenNoise(var arr: array of single; apply: boolean = false); 
var i: integer; 
begin
if apply then
for i:=low(arr) to high(arr) do arr[i]:=arr[i] + a_noise * (2 * random - 1) 
else
for i:=low(arr) to high(arr) do arr[i]:=a_noise * (2 * random - 1) 
end;
Используемые параметры a_noise – сила шума.

3. Модуляция сигнала
Delphi
1
2
3
4
5
6
7
8
procedure TfrMain.ModulateIt; 
var
i: integer; 
begin
for i := 0 to BUFF_SIZE - 1 do begin
modulated[i]:=(signal[i] + a_sig + a_sig) * (sin(i*f_mod*tau*2*pi)); 
end; 
end;
Накладываются исходный сигнал на сигнал молуляции

4. Демодуляция сигнала
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TfrMain.Demodulate; 
var
i: integer; 
s: single; 
begin
for i := 0 to BUFF_SIZE - 1 do begin
demodulated[i]:=abs(spoiled[i]); 
end; 
s:=0; 
for i := 0 to BUFF_SIZE - 1 do begin
if s < demodulated[i] then s:=demodulated[i]; 
demodulated[i]:=s - a_sig - a_sig; 
s:=s * 0.98; 
end; 
end;
Принцип алгоритма в огибании модуля модулированного сигнала. Значение пика заносится во временную переменную, которая уменьшается с течением времени. Значения данной переменной заносятся в массив для демодулированного сигнала.

Амплитудная модуляция и демодуляция сигналов в системе связи

Амплитудная модуляция и демодуляция сигналов в системе связи

Амплитудная модуляция и демодуляция сигналов в системе связи


Код с учетом этих процедур я написал, но увы и ах - результат даже близко не похож на то, что на скриншотах.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
unit Main; 
  
interface
  
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, TeEngine, TeeProcs, Chart, ExtCtrls, Series, Mask, 
  DBCtrlsEh; 
  
type
  TF_Main = class(TForm) 
    Panel1: TPanel; 
    Chart1: TChart; 
    Label1: TLabel; 
    Label2: TLabel; 
    Label3: TLabel; 
    Label4: TLabel; 
    Label5: TLabel; 
    CheckBox1: TCheckBox; 
    RadioButton1: TRadioButton; 
    RadioButton2: TRadioButton; 
    RadioButton3: TRadioButton; 
    DBNumberEditEh1: TDBNumberEditEh; 
    DBNumberEditEh2: TDBNumberEditEh; 
    DBNumberEditEh3: TDBNumberEditEh; 
    DBNumberEditEh4: TDBNumberEditEh; 
    DBNumberEditEh5: TDBNumberEditEh; 
    Xmt: TFastLineSeries; 
    Modul: TFastLineSeries; 
    DeModul: TFastLineSeries; 
    Label6: TLabel; 
    Label7: TLabel; 
    DBNumberEditEh6: TDBNumberEditEh; 
    DBNumberEditEh7: TDBNumberEditEh; 
    procedure FormShow(Sender: TObject); 
    procedure GenSignal(var arr: array of single); 
    procedure GenNoise(var arr: array of single; apply: boolean = false); 
    procedure ModulateIt; 
    procedure Demodulate; 
    procedure RadioButton1Click(Sender: TObject); 
    procedure ClearGraph; 
    procedure RadioButton2Click(Sender: TObject); 
    procedure RadioButton3Click(Sender: TObject); 
  private
    { Private declarations }
    const razm=1000;//секннд= razm/sub_part 
          sub_part=100;//для сотых 
  public
    { Public declarations }
    modulated,demodulated,spoiled,signal:array [0..razm] of single; 
    a_sig,a_noise,f_sig,tau,f_mod:Single; 
    BUFF_SIZE:Integer; 
  end; 
  
var
  F_Main: TF_Main; 
  
implementation
  
{$R *.dfm}
  
procedure TF_Main.ClearGraph; 
begin
  Xmt.Clear; 
  modul.Clear; 
  DeModul.Clear; 
  a_noise:=DBNumberEditEh5.Value;//сила шума ok 
  a_sig:=DBNumberEditEh2.Value;  //амплитуда сигнала ok 
  f_sig:=DBNumberEditEh5.Value;  //фаза сигнала 
  tau:=DBNumberEditEh3.Value;    //частота дискретизации 
  f_mod:=DBNumberEditEh4.Value;  //частота модуляции ok 
  BUFF_SIZE:=DBNumberEditEh6.Value; 
end; 
  
procedure TF_Main.Demodulate; 
var
i: integer; 
s: single; 
begin
  for i := 0 to BUFF_SIZE - 1 do
    begin
      demodulated[i]:=abs(spoiled[i]); 
    end; 
  s:=0; 
  for i := 0 to BUFF_SIZE - 1 do
    begin
      if s < demodulated[i] then s:=demodulated[i]; 
      demodulated[i]:=s - a_sig - a_sig; 
      s:=s * 0.98; 
    end; 
  //Принцип алгоритма в огибании модуля модулированного сигнала. 
  //Значение пика заносится во временную переменную, которая уменьшается 
  //с течением времени. Значения данной переменной заносятся в массив 
  //для демодулированного сигнала. 
end; 
  
procedure TF_Main.FormShow(Sender: TObject); 
begin
  ClearGraph; 
end; 
  
procedure TF_Main.GenNoise(var arr: array of single; apply: boolean); 
var i: integer; 
begin
  if apply then
    for i:=low(arr) to high(arr) do
      arr[i]:=arr[i] + a_noise * (2 * random - 1) 
  else
    for i:=low(arr) to high(arr) do
      arr[i]:=a_noise * (2 * random - 1) 
  //Используемые параметры a_noise – сила шума. 
end; 
  
procedure TF_Main.GenSignal(var arr: array of single); 
var i: integer; 
begin
  for i:=low(arr) to high(arr) do
    arr[i]:=a_sig*(sin( (i/sub_part)*f_sig*tau*2*pi)); 
  //Используемые параметры a_sig – амплитуда сигнала, f_sig – фаза сигнала, tau 
end; 
  
procedure TF_Main.ModulateIt; 
var
i: integer; 
begin
  for i := 0 to BUFF_SIZE - 1 do
    begin
      modulated[i]:=(signal[i] + a_sig + a_sig) * (sin((i/sub_part)*f_mod*tau*2*pi)); 
    end; 
  //Накладываются исходный сигнал на сигнал молуляции 
end; 
  
procedure TF_Main.RadioButton1Click(Sender: TObject); 
var i:integer;  //исходный сигнал 
begin
  ClearGraph; 
  GenSignal(signal); 
  for I:=0 to razm do
    Xmt.AddXY(i/sub_part,Signal[i]); 
end; 
  
procedure TF_Main.RadioButton2Click(Sender: TObject); 
var i:integer;  //модулированный сигнал 
begin
  ClearGraph; 
  GenSignal(signal); 
  for I:=0 to razm do
    Xmt.AddXY(i/sub_part,Signal[i]); 
  
  GenNoise(spoiled); 
  ModulateIt; 
  for I:=0 to razm do
    Modul.AddXY(i/sub_part,modulated[i]); 
end; 
  
procedure TF_Main.RadioButton3Click(Sender: TObject); 
var i:integer;   //демодулированный сигнал 
begin
  ClearGraph; 
  GenSignal(signal); 
  for I:=0 to razm do
    Xmt.AddXY(i/sub_part,Signal[i]); 
  
  GenNoise(spoiled); 
  ModulateIt; 
  for I:=0 to razm do
    Modul.AddXY(i/sub_part,modulated[i]); 
  Demodulate; 
  for I:=0 to razm do
    DeModul.AddXY(i/sub_part,demodulated[i]); 
end; 
  
end.
Амплитудная модуляция и демодуляция сигналов в системе связи


Вопрос: я сделал что-то не так или процедуры неверные?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2013, 12:23
Ответы с готовыми решениями:

Модуляция и демодуляция сигналов
ну какие могут быть параметры у прямоугольного сигнала? частота, фаза и амплитуда. может еще пики...

Модуляция/демодуляция
Итак, сделала какой-никакой проект, в котором присутствует модуляция и демодуляция. Вопрос: почему...

Модуляция и демодуляция сигнала
Блок передачи данных. Блок генератор колебаний. На выходе осциллограф. Построить по ним АЧХ....

Амплитудная модуляция - соотношение со спектром
В задании подаётся на вход последовательность нулей и единиц (тут у меня 12 (0 1 1 1 1 1 0 0 0 1 0...

1
190 / 28 / 8
Регистрация: 15.09.2011
Сообщений: 415
18.09.2013, 23:32 2

Не по теме:

А что за программа на скриншотах)? Есть исходник?



Добавлено через 3 минуты
А сорр))) Ты повторить хочешь её) Значит нет исходников
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2013, 23:32

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

Амплитудная, частотная и фазовая модуляция
День добрый форум. Получил следующее задание: Генерирование различных классов цифровых фильтров,...

Амплитудная модуляция. Плюсы и минусы большого индекса модуляции
Какие плюсы и минусы можно назвать у большого индекса модуляции?

Спектральный анализ сигналов в системе Matcad
Здравствуйте! Помогите, пожалуйста, понять как исправить ошибку и что делать дальше.Заранее...

Как создать цикл на системе сигналов и слотов
Здравствуйте! Помогите, пожалуйста. Недавно начал учить ООП самостоятельно. Суть проблемы: Нужно...


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

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

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