[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] root_raised_cosine principle
From: |
Martin Braun |
Subject: |
Re: [Discuss-gnuradio] root_raised_cosine principle |
Date: |
Mon, 01 Sep 2014 17:50:12 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
Please stick to the list.
On 09/01/2014 05:35 PM, adream wrote:
> Thanks for your reply
> May be I should make my question more specifically,
>
> den = -32 * M_PI * alpha * alpha * xindx/spb;
>
> I can't understand well why there is "-32"
That I don't know. Of course, it's just a gain change, so it won't
affect the spectral shape.
Perhaps Tom can weigh in here.
M
>
> thank you
>
>
> 2014-09-01 23:18 GMT+08:00 Martin Braun <address@hidden
> <mailto:address@hidden>>:
>
> On 09/01/2014 05:01 PM, adream wrote:
> > Hi,
> > I get the source code of root_raised_cosine function in
> gr_firdes.cc,
> > but I can't understand why it writes in that way, is there any
> paper can
> > give me more details about the principle of root_raised_cosine
>
> Any standard textbook on digital communications will explain this. You
> might want to look out for keywords such as pulse shaping and Nyquist
> criterion. Have a look at the wiki page for recommended reading.
>
> M
>
> > Thank you
> >
> > this is the source code of root_raised_cosine
> > vector<float> gr_firdes::root_raised_cosine (double gain,
> > double sampling_freq,
> > double symbol_rate,
> > double alpha,
> > int ntaps)
> > {
> > ntaps |= 1; // ensure that ntaps is odd
> >
> > double spb = sampling_freq/symbol_rate; // samples per bit/symbol
> > vector<float> taps(ntaps);
> > double scale = 0;
> > for(int i=0;i<ntaps;i++)
> > {
> > double x1,x2,x3,num,den;
> > double xindx = i - ntaps/2;
> > x1 = M_PI * xindx/spb;
> > x2 = 4 * alpha * xindx / spb;
> > x3 = x2*x2 - 1;
> > if( fabs(x3) >= 0.000001 ) // Avoid Rounding errors...
> > {
> > if( i != ntaps/2 )
> > num = cos((1+alpha)*x1) +
> sin((1-alpha)*x1)/(4*alpha*xindx/spb);
> > else
> > num = cos((1+alpha)*x1) + (1-alpha) * M_PI / (4*alpha);
> > den = x3 * M_PI;
> > }
> > else
> > {
> > if(alpha==1)
> > {
> > taps[i] = -1;
> > continue;
> > }
> > x3 = (1-alpha)*x1;
> > x2 = (1+alpha)*x1;
> > num = (sin(x2)*(1+alpha)*M_PI
> > - cos(x3)*((1-alpha)*M_PI*spb)/(4*alpha*xindx)
> > + sin(x3)*spb*spb/(4*alpha*xindx*xindx));
> > den = -32 * M_PI * alpha * alpha * xindx/spb;
> > }
> > taps[i] = 4 * alpha * num / den;
> > scale += taps[i];
> > }
> >
> > for(int i=0;i<ntaps;i++)
> > taps[i] = taps[i] * gain / scale;
> >
> > return taps;
> > }
> >
> >
> > _______________________________________________
> > Discuss-gnuradio mailing list
> > address@hidden <mailto:address@hidden>
> > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> >
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden <mailto:address@hidden>
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>