Hi Marcus,
Thank you very much for your reply. I have few doubts. Please clarify: In the link that you sent there are total 8 sma ports for A slot and B slot LO Sharing with Neighbour TwinRXs TwinRX (A Slot) TwinRX (B Slot) J1 LO2 Export J2 LO2 Input J2 LO2 Input J1 LO2 Export J3 LO1 Export J4 LO1 Input J4 LO1 Input J3 LO1 Export But in USRP 2955R only 4 ports are exposed out, so the configuration what is given in your link is totally different than what is available in the back side of 2955 R. Do you mean to open up the box and then the 8 ports will be visible? We are using following commands on the software side: usrp->set_rx_lo_freq(frequncy+(sampleRate/2),"LO1",2); std::cout<<usrp->get_rx_lo_freq("LO1",2); usrp->set_rx_lo_source("internal",usrp->ALL_LOS,2); usrp->set_rx_lo_export_enabled(true,usrp->ALL_LOS,2); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",3); usrp->set_rx_lo_source("companion",usrp->ALL_LOS,3); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",0); usrp->set_rx_lo_source("external",usrp->ALL_LOS,0); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",1); usrp->set_rx_lo_source("external",usrp->ALL_LOS,1); Also you mentioned using "set_time_unknown_pps()" command so is this command along with the above commands enough in the software side or some more commands are there for LO sharing? If so what are those? Regards, Koyel Das Senior – Product Engineer Vehere | Proactive Communications Intelligence & Cyber Defence M: +919051132173 | T: +91 33 40545454 | F: +91 33 40545455 | W: www.vehere.com<http://www.vehere.com/> [unnamed]<https://www.linkedin.com/company/vehere-interactive-p-ltd> [unnamed (1)] <https://twitter.com/VehereIndia> [unnamed (2)] <https://www.facebook.com/VehereIndia/> Vehere is the proud recipient of the Fastest Growing Technology Company Awards in India & Asia since 2012! The content of this e-mail is confidential and intended solely for the use of the addressee. The text of this email (including any attachments) may contain information, which is proprietary and/or confidential or privileged in nature belonging to Vehere Interactive Pvt Ltd and/or its associates/ group companies/ subsidiaries. If you are not the addressee, or the person responsible for delivering it to the addressee, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it is prohibited and may be unlawful. If you have received this e-mail in error, please notify the sender and remove this communication entirely from your system. The recipient acknowledges that no guarantee or any warranty is given as to completeness and accuracy of the content of the email. The recipient further acknowledges that the views contained in the email message are those of the sender and may not necessarily reflect those of Vehere Interactive Pvt Ltd. Before opening and accessing the attachment please check and scan for virus. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. ________________________________ From: USRP-users <usrp-users-boun...@lists.ettus.com> on behalf of Marcus D. Leech via USRP-users <usrp-users@lists.ettus.com> Sent: Tuesday, April 2, 2019 7:07 PM To: usrp-users@lists.ettus.com Subject: Re: [USRP-users] not getting phase coherence between channels On 04/02/2019 01:34 AM, Koyel Das (Vehere) via USRP-users wrote: Hi, I am using the given code for data receiving from two channels. I need to do LO sharing for phase coherent application, which is done as shown in the code and externally as shown in the image attached but I am not getting constant phase difference. We have connected one antenna to input of a power splitter and then connected two output ports of the splitter to two ports of USRP. We are receiving signals (say noise) from these two ports of USRP. We are dividing the whole chunk (5*10^6 samples) of data into 5000 chunks each having 1000 continuous samples. Then we are doing FFT of each of the chunk of 1000 samples and multiplying the results from the two channels. Then averaging 1000 chunks of the multiplication (cross-power) together so we are left with 5 averaged chunks each of 1000 samples of cross-power. The phase of the cross power is omega(td1-td2), where omega is 2*pi*frequency and td1 is the time delay of channel1, td2:time delay of channel2. so omega(td1-td2) is the phase difference. Since we are doing averaging the noise effect should reduce to 0 and we should get phase difference due to time delays due to internal circuitry. Now since frequencies are in the range of 2.4*10^9 to 2.401*10^9 for 1 MHz bandwidth and td1-td2 is also expected to be very small so omega(td1-td2) for this frequency range would be almost identical, which is not happening. In short I am not getting constant phase difference. I have also made connections as shown in the attached figure. What is missing in the code below: See: https://kb.ettus.com/TwinRX_Getting_Started_Guides#LO_Sharing_with_Neighbour_TwinRXs ---------------------------------------------------------------------------------------------------------------------------------------- #include "vdds_device.h" #include "vdds_util.h" #include "vdds_device_interface.h" #include <uhd/utils/safe_main.hpp> #include <uhd/usrp/multi_usrp.hpp> #include <iostream> #include <fstream> #include <complex> #include <thread> #include <chrono> #include <QFile> #include <vector> #include <string> VDDSDevice::VDDSDevice() { deviceIPAddress="addr0=192.168.10.2"; gain=70; sampleRate=1e6; bandwidth=1e6; buffer=NULL; frequncy=2422e6; numberOfChannel=0; wrapped=false; } void VDDSDevice::init() { usrp = uhd::usrp::multi_usrp::make(deviceIPAddress.toStdString()); uhd::usrp::subdev_spec_t subdevClass = std::string("A:0 A:1 B:0 B:1"); usrp->set_rx_subdev_spec(subdevClass); numberOfChannel=usrp->get_rx_num_channels(); std::cout<<"NUmber Of Channels : "<<numberOfChannel<<std::endl; usrp->set_rx_rate(sampleRate); //Doing changes (sharing LOs) usrp->set_rx_lo_freq(frequncy+(sampleRate/2),"LO1",2); std::cout<<usrp->get_rx_lo_freq("LO1",2); usrp->set_rx_lo_source("internal",usrp->ALL_LOS,2); usrp->set_rx_lo_export_enabled(true,usrp->ALL_LOS,2); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",3); usrp->set_rx_lo_source("companion",usrp->ALL_LOS,3); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",0); usrp->set_rx_lo_source("external",usrp->ALL_LOS,0); usrp->set_rx_lo_freq(usrp->get_rx_lo_freq("LO1",2),"LO1",1); usrp->set_rx_lo_source("external",usrp->ALL_LOS,1); // Changes done */ for(size_t count=0;count<usrp->get_rx_num_channels();count++){ usrp->set_rx_gain(gain,count); usrp->set_rx_bandwidth(bandwidth,count); //usrp->set_rx_freq(frequncy,count); std::cout<<"Antenna : "<<usrp->get_rx_antenna(count)<<" is for channel : "<<count<<std::endl; } uhd::stream_args_t streamArgs("fc32"); for (size_t i = 0; i < usrp->get_rx_num_channels(); i++){ streamArgs.channels.push_back(i); } rxStream = usrp->get_rx_stream(streamArgs); MAX_SAMPLE_PER_PACKET=rxStream->get_max_num_samps(); if(buffer==NULL){ for(size_t count=0;count<MAX_CHANNEL_SUPPORTS;count++){ channelBuffers[count]=new std::complex<float>[(MAX_SAMPLE_REQUIRED_FOR_DD/MAX_SAMPLE_PER_PACKET)*MAX_SAMPLE_PER_PACKET+MAX_SAMPLE_PER_PACKET]; } buffer=new std::vector<std::complex<float>*>[(MAX_SAMPLE_REQUIRED_FOR_DD/MAX_SAMPLE_PER_PACKET)+1]; for(size_t count=0;count<(MAX_SAMPLE_REQUIRED_FOR_DD/MAX_SAMPLE_PER_PACKET)+1;count++){ for(size_t channel=0;channel<MAX_CHANNEL_SUPPORTS;channel++){ buffer[count].push_back(channelBuffers[channel]+(count*MAX_SAMPLE_PER_PACKET)); } } } uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); stream_cmd.num_samps = MAX_SAMPLE_PER_PACKET; stream_cmd.stream_now = true; stream_cmd.time_spec = uhd::time_spec_t(0.0); rxStream->issue_stream_cmd(stream_cmd); } void VDDSDevice::setFrequency(double frequncy){ for(size_t count=0;count<numberOfChannel;count++){ usrp->set_rx_freq(frequncy,count); } wrapped=false; totalNumberOfSamplesRceived=0; this->frequncy=frequncy; } void VDDSDevice::receiveBuffer(double frequncy,size_t totalNumberOfSamplesRequired){ uhd::rx_metadata_t md; totalNumberOfSamplesRceived=0; double timeout = 0.1; size_t sampleReceived = 0; setFrequency(frequncy); while(startFlag){ sampleReceived = rxStream->recv(buffer[totalNumberOfSamplesRceived/MAX_SAMPLE_PER_PACKET], MAX_SAMPLE_PER_PACKET, md, timeout,true); if (md.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE){ std::cout<<"ERROR : "<<md.to_pp_string()<<"ERROR CODE : "<<md.error_code<<" FOR DEVICE : "<<deviceIPAddress.toStdString()<<". Total Sample Received : "<<totalNumberOfSamplesRceived<<std::endl; } if(sampleReceived!=MAX_SAMPLE_PER_PACKET){ std::cout<<MAX_SAMPLE_PER_PACKET<<" != "<<sampleReceived<<","<<std::endl; } if(VDDSDeviceInterface::startScanFlag){ totalNumberOfSamplesRceived+=sampleReceived; if(totalNumberOfSamplesRceived>=totalNumberOfSamplesRequired){ totalNumberOfSamplesRceived=0; std::cout<<"Wrapping"<<std::endl; wrapped=true; } } } } void VDDSDevice::run(){ startFlag=true; init(); receiveBuffer(frequncy,MAX_SAMPLE_REQUIRED_FOR_DD); } void VDDSDevice::stop(){ startFlag=false; } void VDDSDevice::flushToFiles(const char *directory){ char fileName[256]={0}; unsigned long long int ts=VDDSUtil::getTimeInMicro(); size_t totalSamples; std::complex<float> *channelBuffer=NULL; for(size_t count=0;count<numberOfChannel;count++){ getChannelDataSamples(count,&channelBuffer,totalSamples); if(totalSamples && channelBuffer){ sprintf(fileName,"%s/%llu_%u.cfile",directory,ts,(unsigned int)count); QFile file(fileName); if(file.open(QFile::WriteOnly|QFile::Truncate)){ file.write((char*)channelBuffer,MAX_SAMPLE_REQUIRED_FOR_DD*sizeof(std::complex<float>)); file.close(); } } } } std::complex<float> * VDDSDevice::getChannelDataSamples(size_t channel){ if(channel >= MAX_CHANNEL_SUPPORTS){ return NULL; } std::cout<<channel<<","<<std::endl; return channelBuffers[channel]; } void VDDSDevice::getChannelDataSamples(size_t channel,std::complex<float> **samples,size_t &totalSamples){ totalSamples=MAX_SAMPLE_REQUIRED_FOR_DD; if(MAX_SAMPLE_REQUIRED_FOR_DD==0 || channel >= MAX_CHANNEL_SUPPORTS){ *samples=NULL; totalSamples=0; return; } *samples=channelBuffers[channel]; } --------------------------------------------------------------------------------------------------------------------------------------------------------Regards, Koyel Das Senior – Product Engineer Vehere | Proactive Communications Intelligence & Cyber Defence M: +919051132173 | T: +91 33 40545454 | F: +91 33 40545455 | W: www.vehere.com<http://www.vehere.com/> [unnamed]<https://www.linkedin.com/company/vehere-interactive-p-ltd> [unnamed (1)] <https://twitter.com/VehereIndia> [unnamed (2)] <https://www.facebook.com/VehereIndia/> Vehere is the proud recipient of the Fastest Growing Technology Company Awards in India & Asia since 2012! The content of this e-mail is confidential and intended solely for the use of the addressee. The text of this email (including any attachments) may contain information, which is proprietary and/or confidential or privileged in nature belonging to Vehere Interactive Pvt Ltd and/or its associates/ group companies/ subsidiaries. If you are not the addressee, or the person responsible for delivering it to the addressee, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it is prohibited and may be unlawful. If you have received this e-mail in error, please notify the sender and remove this communication entirely from your system. The recipient acknowledges that no guarantee or any warranty is given as to completeness and accuracy of the content of the email. The recipient further acknowledges that the views contained in the email message are those of the sender and may not necessarily reflect those of Vehere Interactive Pvt Ltd. Before opening and accessing the attachment please check and scan for virus. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. _______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com<mailto:USRP-users@lists.ettus.com> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com