summaryrefslogtreecommitdiff
path: root/macros/vco.sci
diff options
context:
space:
mode:
Diffstat (limited to 'macros/vco.sci')
-rw-r--r--macros/vco.sci64
1 files changed, 64 insertions, 0 deletions
diff --git a/macros/vco.sci b/macros/vco.sci
new file mode 100644
index 0000000..36b704c
--- /dev/null
+++ b/macros/vco.sci
@@ -0,0 +1,64 @@
+function y = vco(x,frange,fs)
+//Voltage Controlled Oscillator
+//Calling Sequence
+//y=vco(x,fc,fs)
+//y=vco(x,[fmin fmax],fs)
+//Parameters
+//x
+//A vector or a matrix
+//fc
+//Carrier frequency
+//fs
+//fmin
+//Minimum frequency of the frequency range
+//fmax
+//Maximum frequency of the frequency range
+//Description
+//y=vco(x,fc,fs)
+//Creates a frequency modulated cosine wave y whose frequency varies as the magnitude of x
+//x lies in [-1,1]. x=-1 corresponds to a frequency of 0, x=0 corresponds to a frequency of fc
+//and x=1 corresponds to a frequency of 2fc.
+//y=vco(x,[fmin fmax],fs)
+//Scales the frequency range so that x=-1 corresponds to a frequency of fmin and
+//x=1 corresponds to a frequency of fmax
+//If x is a matrix the same operation is performed on the columns on x
+//Size of y is the same as the size of x
+//Example
+//x=rand()
+// x =
+//
+// 0.2113249
+// y=vco(x,2000,8000)
+// y =
+//
+// 0.9454092
+//Author
+//Ankur Mallick
+ funcprot(0);
+ if (argn(2)<3|argn(2)>5) then
+ error('Incorrect number of input arguments.');
+ else
+ if(argn(2)<3)
+ fs=1;
+ end
+ if(argn(2)<2)
+ fc=fs/4;
+ frange=fc;
+ end
+ if(max(abs(x(:)))>1)
+ error('x must lie between -1 and 1');
+ end
+ if(length(frange)==1)
+ fc = frange(1);
+ opt = (fc/fs)*2*%pi;
+ else
+ fc = mean(frange);
+ opt = (frange(2) - fc)/fs*2*%pi;
+ end
+ if (fc>fs/2)
+ error('The career frequency must be less than half the sampling frequency.')
+ else
+ y = modulate(x,fc,fs,'fm',opt);
+ end
+ end
+endfunction