# Gr\_sync\_decimator(custom block)

**URL:** <https://www.ruby-forum.com/t/gr-sync-decimator-custom-block/239277>\
**Category:** GNU Radio\
**Created:** [February 20, 2014, 7:03am UTC](https://www.ruby-forum.com/t/gr-sync-decimator-custom-block/239277 "2014-02-20T07:03:23Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [February 20, 2014, 7:03am UTC](https://www.ruby-forum.com/t/gr-sync-decimator-custom-block/239277/1 "2014-02-20T07:03:23Z")

</div>

Hi,  
I wrote a custom block to compute beamforming weights. The block takes 8  
inputs and 8 outputs.  
It takes 64 samples from each input stream and produces 1 output in each  
output stream.I am not getting any output and GRC stops working when I  
set  
the decimation rate to 64.I tried printing noutput\_items and it is like  
64,32,16,8,4,2,1 and stops. But when I set the rate to 1 the block works  
but rather very slowly and overflows when UHD source is connected.The  
noutput\_items is always 4096 or 4095 for this case. I am not sure if I  
am  
setting the correct decimation rate and returning correct number of  
samples.Can anyone help?  
code snippet:  
beamformer\_cc\_impl::beamformer\_cc\_impl(int nsamples)  
: gr\_sync\_decimator(“beamformerr\_cc”,  
gr\_make\_io\_signature(1, -1, sizeof (gr\_complex)),  
gr\_make\_io\_signature(1, -1, sizeof (gr\_complex)),nsamples),  
d\_samples(nsamples),

```
{

}

```

int  
beamformer\_cc\_impl::work(int noutput\_items,  
gr\_vector\_const\_void\_star &input\_items,  
gr\_vector\_void\_star &output\_items)  
{  
for (int i=0;i\<ninputs;i++){  
out[i] = (gr\_complex _) output\_items[i];  
}  
for (int k=0;k\<noutput\_items;k++){  
for(unsigned int i=0;i\<ninputs;i++){  
memcpy(&in\_buffer[i][0]),&((const gr\_complex  
 )input\_items[i])[kd\_samples],d\_samples_sizeof(gr\_complex));  
}

//…signal processing on in\_buffer to compute covariance matrix and  
pseudo  
inverse of covariance matrix of size 8x8…

for (int i=0;i\<ninputs;i++){  
memcpy(&out[i][k],&weights[i],sizeof(complex));  
}  
}  
return noutput\_items;  
}

Thanks,  
Saran

---

<div class="post-metadata">

**Author:** ![sarankumar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e36b37/32.png) [@sarankumar](https://www.ruby-forum.com/u/sarankumar)\
**Post date:** [February 20, 2014, 8:36am UTC](https://www.ruby-forum.com/t/gr-sync-decimator-custom-block/239277/2 "2014-02-20T08:36:21Z")

</div>

On 02/20/2014 06:58 AM, sarankumar wrote:

> Hi,  
> I wrote a custom block to compute beamforming weights. The block takes 8  
> inputs and 8 outputs.  
> It takes 64 samples from each input stream and produces 1 output in each  
> output stream.I am not getting any output and GRC stops working when I  
> set the decimation rate to 64.I tried printing noutput\_items and it is  
> like 64,32,16,8,4,2,1 and stops. But when I set the rate to 1 the block

When you say ‘stops’, what happens to the upstream blocks?  
(also you’re using GR \< 3.7, might want to switch when you’re writing  
new stuff… but that seems unrelated).

> ```
> beamformer_cc_impl::work(int noutput_items,
> 
> ```
> 
> gr\_vector\_const\_void\_star &input\_items,  
> gr\_vector\_void\_star &output\_items)  
> {  
> return noutput\_items;  
> }

This seems correct. I’m more concerned about what’s going in upstream.

M
