#include #include #include double a, b; void konstanty(double f) { double th = 2.0 * M_PI * f / 8000.0; //urci hodnoty a,b podle vstupni frekvence, vypocita thetu a = sin(th); b = 2.0 * cos(th); } void sinusovka(double amp, double f, int t) { //urci parametry pro sinusovku int vz = 8000 * t / 1000; //pocet vzorku konstanty(f); double y_ted = 0.0, y_zpoz = 0.0, y_2_zpoz = 0.0; //nastavi hodnoty do 0 (s desetinnou carkou protoze to je double) for (int i = 0; i < vz; ++i) { double y_sin = amp * sin(2.0 * M_PI * f * i / 8000.0); //vypocita sinusovku double y_dsp = a * (y_ted + y_2_zpoz) - y_zpoz; //vypocita sinusovku pomoci DSP printf("%lf\t%lf\t%lf\n", i / 8000.0, y_sin, y_dsp); //vytiskne hodnoty pro cas,sinusovku a DSP sinusovku y_2_zpoz = y_zpoz; //posune hodnoty pro dalsi vzorky, zpozdeni-2 je ted zpozdeni-1, zpozdeni-1 je "ted" a "ted" je hodnota DSP y_zpoz = y_ted; y_ted = y_dsp; } } int main(int argc, char *argv[]) { if (argc != 4) { //pokud zadame vice nez 4 parametry,napise to error zpravu printf("Zadejte maximalne 3 parametry\n"); return 1; } double amp = atof(argv[1]); //argv je oznaceni argumentu, zacina az od 2 protoze 1 je nazev programu, atof atoi prevadi string na float a int double f = atof(argv[2]); int t = atoi(argv[3]); if (amp <= 0 ,f <= 0 ,t<= 0) { printf("Zadejte platne hodnoty\n"); //pokud zadame zapornou hodnotu, napise to taky error zpravu return 1; } printf("Amplituda: %lf V\n Frekvence: %lf Hz\n Cas: %d ms\n", amp, f, t); //vyprintne to prehled o hodnotach ktere jsme zadali sinusovka(amp, f, t); return 0; }