USSR (10.08.2015 07:19, просмотров: 1) ответил Крок на Чиста для сравнения с ДСПИКами изобразите?
Пока без ассемблера:
MATLAB:
>> amp = 10.0; % Амплитуда сигнала [В]
>> wlo = 1.0e3; % Нижняя частота ГКЧ [Гц]
>> whi = 1.0e4; % Верхняя частота ГКЧ [Гц]
>> fs = 1.0e5; % Частота дискретизации [Гц]
>> tsw = 1.0e-2; % Длительность импульса ГКЧ [сек]
>> dt = 1.0/fs; % Период дискретизации [сек]
>> ns = tsw/dt; % Общее число семплов в импульсе ГКЧ
>> dw = (whi-wlo)/ns; % Приращение частоты на интервале dt [Гц]
>> cosw = cos(wlo*dt); % Начальное значения параметра cosw
>> sinw = sin(wlo*dt); % Начальное значения параметра sinw
>> cosdw = cos(dw*dt); % Параметр cosdw для вычисления нового значения частоты
>> sindw = sin(dw*dt); % Параметр sindw для вычисления нового значения частоты
>> cost(1) = amp; % Начальные значения семпла cost
>> sint(1) = 0.0; % Начальные значения семпла sint
>> ii(1)=1;
>> for i=2:ns
cc = cost(i-1)*cosw;
ss = sint(i-1)*sinw;
cs = cost(i-1)*sinw;
sc = sint(i-1)*cosw;
cost(i) = cc-ss;
sint(i) = cs+sc;
cc = cosw*cosdw;
ss = sinw*sindw;
cs = cosw*sindw;
sc = sinw*cosdw;
cosw = cc-ss; % Новые значения параметров частоты
sinw = cs+sc; % Новые значения параметров частоты
ii(i)=i;
end;
>> figure(1);
>> plot(ii,cost,'r',ii,sint,'b');
>> grid on;
>> figure(2);
>> plot(cost,sint,'c');
>> grid on;
>>
С++:
// Sweep.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
// Амплитуда сигнала [В]:
double amp = 10.0;
// Нижняя частота ГКЧ [Гц]:
double wlo = 1.0e3;
// Верхняя частота ГКЧ [Гц]:
double whi = 1.0e4;
// Частота дискретизации [Гц]:
double fs = 1.0e5;
// Длительность импульса ГКЧ [сек]:
double tsw = 1.0e-2;
// Период дискретизации [сек]:
double dt = 1.0/fs;
// Общее число семплов в импульсе ГКЧ:
int ns = (int)(tsw/dt+0.5);
// Приращения частоты на интервале dt [Гц]:
double dw = (whi-wlo)/ns;
// Начальные значения параметров:
double cosw = cos(wlo*dt);
double sinw = sin(wlo*dt);
// Параметры для вычисления нового значения частоты:
double cosdw = cos(dw*dt);
double sindw = sin(dw*dt);
// Начальные значения семплов ГКЧ:
double cost = amp;
double sint = 0.0;
double cc,ss,cs,sc;
int _tmain(int argc, _TCHAR* argv[])
{
int i;
// Рекурсия:
for (i = 0; i < ns; i++)
{
printf("cos(%03d) = %+f;\tsin(%03d) = %+f;\n",i,cost,i,sint);
cc = cost*cosw;
ss = sint*sinw;
cs = cost*sinw;
sc = sint*cosw;
// Новые значения семплов ГКЧ:
cost = cc-ss;
sint = cs+sc;
cc = cosw*cosdw;
ss = sinw*sindw;
cs = cosw*sindw;
sc = sinw*cosdw;
// Новые значения параметров частоты:
cosw = cc-ss;
sinw = cs+sc;
}
return 0;
}
Вечером остальное..