455,903 Members | 1,115 Online Need help? Post your question and get tips & solutions from a community of 455,903 IT Pros & Developers. It's quick & easy.

# Simple Sine Wave Array

 P: n/a I'm trying to implement a basic sinewave signal using arrays, but I'm having difficulty (I'm a complete beginner!) This is what I have so far: using namespace std; double signal(double sinewave, double x); int main() { double x, sinewave, output; cout<>x; output = signal(sinewave,x); cout<
11 Replies

 P: n/a Phil Newman wrote: I'm trying to implement a basic sinewave signal using arrays, but I'm having difficulty (I'm a complete beginner!) This is what I have so far: using namespace std; double signal(double sinewave, double x); int main() { double x, sinewave, output; cout<>x; output = signal(sinewave,x); cout< #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) { v[ n ] = sin( 2*PI / n ); } } int main() { vector output( 100 ); FillSin( output ); for( int n=0; n < output.size(); ++n ) { cout << output[n] << '\n'; } return 0; } Cheers! --M Nov 2 '05 #2

 P: n/a mlimber wrote: Phil Newman wrote:I'm trying to implement a basic sinewave signal using arrays, but I'mhaving difficulty (I'm a complete beginner!)This is what I have so far: [snip]I want to swap a single value x, for an array of 100 points.Can anyone help me with this?Later, I'll need to change the frequency of the signal, but thisdoesn't matter now? Also, I'll want to plot the signal, but I thinkthis is advanced.If anyone can help, I would really appreciated it!Phil Newman Try this: #include #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) { v[ n ] = sin( 2*PI / n ); Division by Zero !! } } int main() { vector output( 100 ); FillSin( output ); for( int n=0; n < output.size(); ++n ) { cout << output[n] << '\n'; } return 0; } Stefan -- Stefan Naewe naewe.s_AT_atlas_DOT_de Nov 2 '05 #3

 P: n/a Thanks. Unfortunately, the code won't compile. i get an error saying: In function 'void FillSin(std::vector&)': 'output' undeclared Can you help there? Thanks, Phil Nov 2 '05 #4

 P: n/a [...] #include #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) ^^^ this wont compile you mean v, not output { v[ n ] = sin( 2*PI / n ); } {} are optional matter of personal preference } int main() { vector output( 100 ); FillSin( output ); for( int n=0; n < output.size(); ++n ) { cout << output[n] << '\n'; } return 0; } I have not used C++ for ages but I recall that one could use std::transform on a vector something like #include or #include std::transform(v.begin(), v.end(), std::sin) and see the result std::copy(v.begin(), s.end(), std::ostream(std::cout, " : ")); hth, Daniel ps: well about ploting C++ has nothing built-in, nothing standard so to say, you will have to use yours op libraries nowdays I code in python there you could use Tk or ploting modules matplotlib, scipy and Numeric Nov 2 '05 #5

 P: n/a > mlimber wrote: #include #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) { v[ n ] = sin( 2*PI / n ); } } int main() { vector output( 100 ); FillSin( output ); for( int n=0; n < output.size(); ++n ) { cout << output[n] << '\n'; } return 0; } Phil Newman wrote: Thanks. Unfortunately, the code won't compile. i get an error saying: In function 'void FillSin(std::vector&)': 'output' undeclared Please quote the message you are replying to (I have pasted it in manually). In FillSin, either change it to: void FillSin( vector& output ) or in the for loop, change it to: for (int n = 0; n < v.size(), ++n) -- Marcus Kwok Nov 2 '05 #6

 P: n/a yay, thanks :-) that worked nicely. cheers for the help, I get the feeling i'll be posting a few more questions on here! Phil Nov 2 '05 #7

 P: n/a Stefan Näwe wrote: mlimber wrote: Phil Newman wrote:I'm trying to implement a basic sinewave signal using arrays, but I'mhaving difficulty (I'm a complete beginner!)This is what I have so far: [snip]I want to swap a single value x, for an array of 100 points.Can anyone help me with this?Later, I'll need to change the frequency of the signal, but thisdoesn't matter now? Also, I'll want to plot the signal, but I thinkthis is advanced.If anyone can help, I would really appreciated it!Phil Newman Try this: #include #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) { v[ n ] = sin( 2*PI / n ); Division by Zero !! Oops, sorry. I just wrote that off-the-cuff. It should be: for( int n=0; n < v.size(); ++n ) { v[ n ] = sin( 2*PI / (n+1) ); } Cheers! --M Nov 2 '05 #8

 P: n/a Try this: #include #include #include using namespace std; void FillSin( vector& v ) { static const double PI = 4*atan(1.0); for( int n=0; n < output.size(); ++n ) { v[ n ] = sin( 2*PI / n ); The sine function has a period of 2*PI, so it should be: v[n] = sin(2*PI*n / v.size()); for n = [ 0 ; v.size()-1 ] } } int main() { vector output( 100 ); FillSin( output ); for( int n=0; n < output.size(); ++n ) { cout << output[n] << '\n'; } return 0; } Cheers! --M Cheers mate! -M Nov 2 '05 #9

 P: n/a Thanks, that works great. How would I be able to add white noise to the sinewave signal over 1000 samples? Phil Nov 3 '05 #10

 P: n/a "Phil Newman" wrote: How would I be able to add white noise to the sinewave signal over 1000 samples? Since no one has responded .... Here's what I would do but I can't certify anything. Decide how much noise you want and use rand() to generate a voltage in that range for a particular sample. For each sample add the two components to get signal plus noise. Make a second drawing from rand() to choose the polarity of the noise. You could speed that up, at the expense of clarity, by selecting a bit from a single drawing to define the polarity Nov 6 '05 #11

 P: n/a > I have not used C++ for ages but I recall that one could use std::transform on a vector something like #include or #include It's in std::transform(v.begin(), v.end(), std::sin) Then don't forget to fill the vector with increasing angles first. and see the result std::copy(v.begin(), s.end(), std::ostream(std::cout, " : ")); Perhaps you mean: std::copy( v.begin(), v.end(), std::ostream_iterator(std::cout, " : ")); hth, Daniel ps: well about ploting C++ has nothing built-in, nothing standard so to say, you will have to use yours op libraries nowdays I code in python there you could use Tk or ploting modules matplotlib, scipy and Numeric Not so. You can plot on the text console with letters or punctuations, although not as good looking as most other means. Ben Nov 6 '05 #12

### This discussion thread is closed

Replies have been disabled for this discussion. 