From: third_person on 7 May 2010 09:03 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 7 May 2010 09:14 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 7 May 2010 10:33 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 7 May 2010 11:40 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 7 May 2010 14:26 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
|
Next
|
Last
Pages: 1 2 3 4 5 Prev: does anyone know how the "bispectrum" works? Next: On Quaternions -- Book Recommendations? |