From: third_person on
Hello,

I'm an undergrad student and want to learn how to implement DSP algorithms
on embedded systems.

The first step, I think should be to learn how to implement them in C or
C++, but I have two questions before I begin.

Q1) Should I start with C or C++? which is used more and why?

Q2) Recently there is a lot of talk of HDL? Should I do programming in HDL
rather than C/C++?

Q3) Is there any software (except the C/C++ compiler) within which I can
practice?

I'm looking for an interface which resembles for e.g. Code Composer Studio
so that the transition from practice to actually embedding will be smooth.

Regards,

3P
From: Rune Allnor on
On 7 Mai, 15:03, "third_person" <third_person(a)n_o_s_p_a_m.ymail.com>
wrote:
> Hello,
>
> I'm an undergrad student and want to learn how to implement DSP algorithms
> on embedded systems.

What do you mean by 'embedded systems'? If you include mobile
phones among 'embedded systems', you might want to know that
there exist C++ tools (Qt) for developing applications for these
kinds of things.

> The first step, I think should be to learn how to implement them in C or
> C++, but I have two questions before I begin.
>
> Q1) Should I start with C or C++? which is used more and why?

C++ is more generic, and hides some technical details from the user.
C++ might be easier to use, but this brings a performance penalty.
If you want to play with bare-bone DSP chips, you might find that
C is more widely used.

> Q2) Recently there is a lot of talk of HDL? Should I do programming in HDL
> rather than C/C++?

No. Learn C or C++ first, and then expand into HDL as needed.

> Q3) Is there any software (except the C/C++ compiler) within which I can
> practice?
>
> I'm looking for an interface which resembles for e.g. Code Composer Studio
> so that the transition from practice to actually embedding will be smooth.

Again, this depends on what you want to do. C and C++ are
standardized,
so if you can get the code to work on one platform, it compiles and
runs similarly on the other platform. Cross-platform C++ libraries
like
Qt aim at hiding the variability from you as user, which means that
you
in principle code your application once, and then comiles one time
for
each platform.

Rune
From: Chris Maryan on
On May 7, 9:03 am, "third_person" <third_person(a)n_o_s_p_a_m.ymail.com>
wrote:
> Hello,
>
> I'm an undergrad student and want to learn how to implement DSP algorithms
> on embedded systems.
>
> The first step, I think should be to learn how to implement them in C or
> C++, but I have two questions before I begin.
>
> Q1) Should I start with C or C++? which is used more and why?
>

At the introductory level, start with C. This is for the simple reason
that the C compilers for many embedded platforms tend to be free, and
the C++ equivalents usually cost more than an undergrad is willing to
spend. From the low level algorithm point of view, the C and C++
implementations will probably be identical, at the high level the two
start to diverge. The Microchip PIC dsp chips are a good start, again
because samples are free (or at least they used to be), C compilers
are free, and development boards are very cheap.

> Q2) Recently there is a lot of talk of HDL? Should I do programming in HDL
> rather than C/C++?
>

Start by understanding the fundamentals, i.e. how to program basic
algorithms to operate in real time in C. Doing anything in an FPGA
(VHDL/verilog) is a bit more complicated and you'll spend more time on
learning how to code hardware than on the DSP basics themselves.

> Q3) Is there any software (except the C/C++ compiler) within which I can
> practice?
>

There are people here who will tell you that Matlab is the worst thing
in the world, I think it's a decent place to start and a great
prototyping tool. But make sure you try whatever you plan to do in C
eventually. When you get out into industry and are asked to implement
an algorithm in an embedded environment Matlab might not even be
available in the company.

> I'm looking for an interface which resembles for e.g. Code Composer Studio
> so that the transition from practice to actually embedding will be smooth..

Learn about makefiles, then you can use whatever IDE you want and
whatever compiler/target you want.



From: Tim Wescott on
third_person wrote:
> Hello,
>
> I'm an undergrad student and want to learn how to implement DSP algorithms
> on embedded systems.
>
> The first step, I think should be to learn how to implement them in C or
> C++, but I have two questions before I begin.
>
> Q1) Should I start with C or C++? which is used more and why?

This is almost a null question. Which do you know better? You should
hone your programming skills separately from your algorithmic
development skills, then put them together at a later date.

There are really separate camps when it comes to C and C++ in embedded
systems. They're not as hostile as they used to be, but they are still
largely disjoint. C++ is a really good tool for the smooth development
of big systems, so you tend to see it used on processors that have a
large requirements list and a correspondingly large memory space.
Projects and products that revolve around small processors often lean
toward C, because it has lower overhead.

Learn how to write your algorithms in C that's written in such a way
that it'll compile under C++, and you'll do fine.

You're leaving out assembly language -- while more and more compilers
understand DSP chips well enough to optimize inner loops into hardware,
not all do. Knowing at least enough assembly language programming so
that you can look at someone's assembly and understand it would be a
really good thing.

> Q2) Recently there is a lot of talk of HDL? Should I do programming in HDL
> rather than C/C++?

What are you going to do with your life? Writing code (I can't call it
'programming') in HDL is what you do if your target system is an FPGA or
an ASIC -- are you going to implement your algorithms on FPGAs, ASICs,
or processors?

My comment about assembly language holds here, too, in a way: if you
don't understand how logic works at the gate level then you'll never
write really superlative HDL descriptions.

> Q3) Is there any software (except the C/C++ compiler) within which I can
> practice?

Scilab/Matlab/Octave. I develop _algorithms_ in these environments,
then I -- or my client -- will translate the code into whatever language
is appropriate for the problem at hand.

> I'm looking for an interface which resembles for e.g. Code Composer Studio
> so that the transition from practice to actually embedding will be smooth.

Get used to the fact RIGHT NOW that you are going to have to be facile
in a number of different environments. If you must settle on just one,
I would say "Eclipse". But the proficiency from which all other
proficiencies will flow is the ability to dispense with the IDE
entirely, and work with a plain ol' text editor and the command line.

--
Tim Wescott
Control system and signal processing consulting
www.wescottdesign.com
From: Rob Gaddi on
On 5/7/2010 6:03 AM, third_person wrote:
> Hello,
>
> I'm an undergrad student and want to learn how to implement DSP algorithms
> on embedded systems.
>
> The first step, I think should be to learn how to implement them in C or
> C++, but I have two questions before I begin.
>
> Q1) Should I start with C or C++? which is used more and why?
>

From an algorithmic point of view, there really shouldn't be much
difference; any actual signal processing you do will probably be written
in the 80% of the language that's the same. There may be some
malloc/free v. new/delete stuff, but that's all overhead and outside of
any real "processing". But if you need to get a system up and running
C's probably the better start.

> Q2) Recently there is a lot of talk of HDL? Should I do programming in HDL
> rather than C/C++?
>

FPGAs are a great target for DSP algorithms. They're massively
parallel, which means that you can throw some really awe inspiring
amounts of horsepower at your problems. They also require that you
understand, not only the algorithm that you're trying to implement, but
how to parallelize it efficiently. That's usually substantially more
work than writing out the algorithm serially for execution on a
sequential processor.

C/C++ isn't a stopping point between understanding DSP on an algorithmic
level and being able to implement it in an HDL, it's a different
direction entirely. If you're looking to explore the algorithms from a
purely mathematical sense, you'd be better off working in some higher
level abstraction than either one; either Matlab/Octave or Python or
anything else that doesn't force you to deal with so many low level
issues as either the "real" software (C/C++) or hardware tracks. Then
how you implement that algorithm on something that's not $1K+ of
computer, be it a sequential processor or hardware, it another issue
entirely.

> Q3) Is there any software (except the C/C++ compiler) within which I can
> practice?
>
> I'm looking for an interface which resembles for e.g. Code Composer Studio
> so that the transition from practice to actually embedding will be smooth.
>

Tim nailed this one. Don't get yourself wed to a GUI and think it's the
be all and end all of programming. Mostly I find they just get in the
way, but even the folks who like them will tell you that from one
release to the next you'll get substantial changes to how to perform any
given task through the GUI. Holding any kind of expectations about how
they're going to perform is just asking for disappointment.

--
Rob Gaddi, Highland Technology
Email address is currently out of order