#!/usr/bin/perl

# ----------------------------------------------------------------
# John Kerl
# kerl.john.r@gmail.com
# 2005-01-14
#
# This is a data generator.  Example usage:
#
# pcisgen 16 3:1:0 7:0.1:0.3
#      0.96909830056      0.09510565163
#      0.37483752279      0.82418779914
#     -0.66170773121      0.79620743361
#     -0.99992012907     -0.44762823720
#      0.09510565163     -0.96909830056
#      0.82418779914     -0.37483752279
#      0.79620743361      0.66170773121
#     -0.44762823720      0.99992012907
#     -0.96909830056     -0.09510565163
#     -0.37483752279     -0.82418779914
#      0.66170773121     -0.79620743361
#      0.99992012907      0.44762823720
#     -0.09510565163      0.96909830056
#     -0.82418779914      0.37483752279
#     -0.79620743361     -0.66170773121
#      0.44762823720     -0.99992012907
# ----------------------------------------------------------------

sub usage() {
	die "Usage: $0 {N} {k ...}\n",
}

usage() if @ARGV < 2;
$N = shift @ARGV;
$numk = @ARGV;

$pi = 4.0 * atan2(1.0, 1.0);

for ($i = 0; $i < $numk; $i++) {
	$freq = 0.0;
	$mag  = 1.0;
	$phz  = 0.0;

	@fields = split /:/, $ARGV[$i];
	if (@fields == 3) {
		$freq = $fields[0];
		$mag  = $fields[1];
		$phz  = $fields[2];
	}
	elsif (@fields == 2) {
		$freq = $fields[0];
		$mag  = $fields[1];
		$phz = 0.0;
	}
	elsif (@fields == 1) {
		$freq = $fields[0];
		$mag = 1.0;
		$phz = 0.0;
	}
	else {
		usage();
	}

	$phz *= 2.0 * $pi;

	$kfreq[$i] = $freq;
	$kmag[$i]  = $mag;
	$kphz[$i]  = $phz;
}

for ($j = 0; $j < $N; $j++) {
	$re = 0.0;
	$im = 0.0;
	for ($i = 0; $i < $numk; $i++) {
		$arg = 2.0 * $pi * $kfreq[$i] * $j / $N;
		$re += $kmag[$i] * cos($arg + $kphz[$i]);
		$im += $kmag[$i] * sin($arg + $kphz[$i]);
	}
	printf "%18.11f %18.11f\n", $re, $im;
}
