<< Chapter < Page | Chapter >> Page > |
out=conv(fliplr(h),t);
% Filter t with FIR filter h
out=out(1:500);
% Keep first 500 elements of out
The
main.c
file needs to be told to take input from memory on the DSP. Fortunately, the changes have already been made in the files. The test vector is stored
in a block of memory on the DSP just like other variables.The memory block that holds the test
vector is large enough to hold a vector up to 4,000 elementslong. The test vector stores data for all four channels of input
and from four channels of output.
To run your program with test vectors, you will need to
modify
main.c
as well as
filtercode.asm
. Both are simply text files and can be edited using the editor of
your preference, including WordPad, Emacs, and VI. (The changes have already been made, but please visually verify the changes are there.) Within
main.c
, uncomment the
#define FILE_INPUT
line so that your program will rewrite input from the A/D with the test vector you specified and then save the output into a block of memory.
In
filtercode.asm
, uncomment the
.copy "testvect.asm"
line. Make sure this Matlab generated file is in the same directory as
filtercode.asm
.
;
signifies a comment.These changes will copy in the test vector. After modifying your code,
assemble it, then load and run the file using Code Composeras before. After a few seconds, halt the DSP (using the
Halt
command under the
Target
menu). How many seconds do you think it should take?
tv_outbuf
in
Data
memory. There are four output channels and the memory is interleaved in time. Therefore, we will have to collect 2000 (4 channels time 500 samples) memory elements.
View>Memory
output.dat
and save filetype as TI data formathex
tv_outbuf
data
2000
Last, use the
read_vector
(available as
read_vector.m ) function to read
the saved result into MATLAB. Do this using the followingMATLAB command:
[ch1,ch2,ch3,ch4] = read_vector('output.dat');
Now, the MATLAB vector
ch1
corresponds to the
filtered version of the test signal you generated. TheMATLAB vector
ch2
should be nearly identical to
the test vector you generated, as it was passed from the DSPsystem's input to its output unchanged.
ch2
will not be identical to the MATLAB
generated test vector.After loading the output of the filter into MATLAB, compare
the expected output (calculated as
out
above)
and the output of the filter (in
ch1
from
above). This can be done graphically by simply plotting thetwo curves on the same axes; for example:
plot(out,'r');
% Plot the expected curve in red
hold on
% Plot the next plot on top of this one
plot(ch1,'g');
% Plot the expected curve in green
hold off
You should also ensure that the difference between the two outputs is near zero. This can be done by plotting thedifference between the two vectors:
plot(out(1:length(ch1))-ch1);
% Plot error signal
You will observe that the two sequences are not exactly the same; this is due to the fact that the DSP computes itsresponse to 16 bits precision, while MATLAB uses 64-bit floating point numbers for its arithmetic. Blocks of output samples may also be missing from the test vector output due to a bug in the test vector core. Nonetheless, the test vector environment allows one to run repeatable experiments using the same known test input for debugging.
Before exiting Code Composer, make sure to disconnect properly from the DSP:
Target>Halt
)Target>Connect
will toggle between connecting and disconnecting)Notification Switch
Would you like to follow the 'Digital signal processing laboratory (ece 420 55x)' conversation and receive update notifications?