>>Assuming this is C, which is what it looks like, you have to assign
>>some value to a pointer variable before you use it. Either newly
>>allocated, or a pointer to existing memory.
> It is C. I tried assigning the output buffer to DDR RAM.
> Xuint32 *mBuf = (Xuint32*)DDR_ADDR2; //input buffer. SAMPLES
> is the no. of samples
> Xuint32 *mOut = (Xuint32*)DDR_ADDR2 + SAMPLES*4; //output buffer
> But I am getting the same result.
Again, assuming C you should add SAMPLES, not SAMPLES*4, as C knows
to multiply by four (bytes). Assuming the DDR RAM is big enough,
that should still work, though.
-- glen
Reply by Rockerboy●December 7, 20072007-12-07
On Dec 7, 6:41 pm, Rockerboy <rka...@gmail.com> wrote:
> On Dec 7, 5:51 pm, glen herrmannsfeldt <g...@ugcs.caltech.edu> wrote:
>
>
>
> > > Xuint32* low_pass_filter(Xuint32 *aBuf)
> > > {
> > > //Lowpass:
> > > const int mSamples = SAMPLES;
> > > Xuint32 *mOut; //output buffer
>
> > Assuming this is C, which is what it looks like, you have to assign
> > some value to a pointer variable before you use it. Either newly
> > allocated, or a pointer to existing memory.
>
> > -- glen
>
> It is C. I tried assigning the output buffer to DDR RAM.
>
> Xuint32 *mBuf = (Xuint32*)DDR_ADDR2; //input buffer. SAMPLES
> is the no. of samples
> Xuint32 *mOut = (Xuint32*)DDR_ADDR2 + SAMPLES*4; //output buffer
>
> But I am getting the same result.
>
> Thanks,
> Abhishek
Th problem was that I was having a 32 bit input buffer and 32 bit
output buffer.So, when I did the filtering, I was getting an overflow.
I changed my input buffer to 16 bits and now its working!
-Abhishek
Reply by Rockerboy●December 7, 20072007-12-07
On Dec 7, 5:51 pm, glen herrmannsfeldt <g...@ugcs.caltech.edu> wrote:
>
> > Xuint32* low_pass_filter(Xuint32 *aBuf)
> > {
> > //Lowpass:
> > const int mSamples = SAMPLES;
> > Xuint32 *mOut; //output buffer
>
> Assuming this is C, which is what it looks like, you have to assign
> some value to a pointer variable before you use it. Either newly
> allocated, or a pointer to existing memory.
>
> -- glen
It is C. I tried assigning the output buffer to DDR RAM.
Xuint32 *mBuf = (Xuint32*)DDR_ADDR2; //input buffer. SAMPLES
is the no. of samples
Xuint32 *mOut = (Xuint32*)DDR_ADDR2 + SAMPLES*4; //output buffer
But I am getting the same result.
Thanks,
Abhishek
Reply by glen herrmannsfeldt●December 7, 20072007-12-07
Rockerboy wrote:
(snip)
> I am recording a sound, storing it in DDR RAM and filtering it and
> playing it back. But, the output sounds like noise for both low-pass
> and high-pass filters. Could someone please let me know what I could
> be doing wrong?
Assuming this is C, which is what it looks like, you have to assign
some value to a pointer variable before you use it. Either newly
allocated, or a pointer to existing memory.
-- glen
Reply by Rockerboy●December 7, 20072007-12-07
Hi,
I am new to DSP. I am doing a low-pass and high-pass 7-tap moving
average filter filter on Xilinx Virtex II Pro FPGA.
I am recording a sound, storing it in DDR RAM and filtering it and
playing it back. But, the output sounds like noise for both low-pass
and high-pass filters. Could someone please let me know what I could
be doing wrong?
Also, how can I calculate the cut-off frequencies for a seven-tap
moving average filter?
I have pasted my code below. I hope it is understandable. Xuint32 is
just a data type pre-defined in Xilinx libraries.
/*************************************************************
Function: low_pass_filter does the low pass 7-point moving average
filter
@Param *aBuf: This is the array of 32-bit values stored in DDR RAM
*********************************************************************/
Xuint32* low_pass_filter(Xuint32 *aBuf)
{
//Lowpass:
const int mSamples = SAMPLES;
Xuint32 *mOut; //output buffer
int i;
xil_printf("\r\nBegin loop");
for(i = 6; i<mSamples-6;i++)
{
mOut[i] = aBuf[i+6] + aBuf[i+5] + aBuf[i+4] + aBuf[i+3] + aBuf[i+2]
+ aBuf[i+1] + aBuf[i];
mOut[i] /= 7.0;
}
xil_printf("\r\nEnd loop");
return mOut;
}
/************************************************************
Function: high_pass_filter does the high pass 7-point moving average
filter
@Param *aBuf: This is the array of 32-bit values stored in DDR RAM
*****************************************************************/
Xuint32* high_pass_filter(Xuint32 *aBuf)
{
int mSamples = SAMPLES;
Xuint32 *mOut;//output buffer
int i;
xil_printf("\r\nBegin loop");
for(i = 0; i<mSamples-6;i++)
{
mOut[i] = aBuf[i+6] - aBuf[i+5] + aBuf[i+4] - aBuf[i+3] + aBuf[i+2]
- aBuf[i+1] + aBuf[i];
mOut[i] /= 7.0;
}
xil_printf("\r\nEnd loop");
return mOut;
}
/*****************************************************************
End of code
*****************************************************************/
Thanks,
Abhishek