Re: Taylor detector
Hi, It's not clear to me why you would want to do this. As far as I can see, the purpose of a Tayloe detector is to mix a real-valued RF signal with a complex-valued local oscillator to arrive at an intermediate frequency at or near zero frequency that can be sampled using a sound card. If you're using GR the implication is that the signal has already been sampled. An ideal hardware IQ mixer would be a pair of analogue multipliers with sine local oscillators. However, this is not practical if good linearity is required (linearity is desirable to avoid intermodulation distortion and other nasty things). This is why switches are used. The switches used to be diodes, and still are at higher frequencies, but at HF CMOS analogue switches work better. With a switch based mixer you are effectively multiplying by a square wave, which comes with the disadvantage that odd harmonics of the square local oscillator also convert signals and noise into the IF. This necessitates a filter in front of the mixer to suppress these spurious responses. When IQ mixing is required there are the added challenges of phase and amplitude balance. Sometimes things ain't pretty in the analogue world. As has already been pointed out, in GR a complex multiplier is the usual way to go. An accurate multiplier can be fed with near perfect numerically generated sine waves with perfect amplitude and phase balance. Besides, even if you wanted to simulate a square wave local oscillator in DSP you'd have to approximate by only including the harmonics up to the Nyquist frequency. On 13/8/22 03:08, david vanhorn wrote: Ive been wrestling with this for a while, and im not even seeing how to get started implementing a Taylor detector in gr. Is it even possible?
Re: ETTUS N210 spurious
Sorry for the late reply. I am guessing you are seeing aliases of the audio signal. Sampling a 1 kHz signal at 32 kHz produces aliases around multiples of the 32 kHz. In the signal processing chain the sampling rate will be increased in stages until the DAC sampling rate is reached. This process of interpolation involves inserting zero valued samples between the existing samples and then applying a digital low pass filter to attenuate the aliases. The stop band of the filter may be -70 dB so low level spurii remain. -70 dB is low enough for most intents and purposes and probably doesn't need fixing. Steve On 19/1/22 1:31 am, Fabien PELLET wrote: Hello, When I put a signal generator that produces a sinwave at 1Khz and that feeds an USRP Sink with a frequency center at 12MHz for example, I got spurs at +/-32Khz, +/-64KHz and +/-96KHz at the output of my N210 (used with LFTX and LFRX). Whatever the frequency center of the USRP and the frequency of the baseband signal, I have to spurs around -70dBc. Any idea on where it could come from ? Hardware EMC problem ? Digital treatment issue ? How to solve it ? Best regards, Fabien, F4CTZ
Re: N310 phase sync issue with antenna array
Hi Larry, I don't have experience with the N310 but I have used the X310 with a TwinRx card. I had a Gnuradio flow setup to capture both channels into files. 10Gbit network. Executing the Python script from Gnuradio resulted in captures being stored as two INT16 IQ files. When I looked at the results I found that there was a time offset between the channels, perhaps about 18 us from memory but it varied between captures. I assumed the script was starting one capture then the other but that's just speculation. Obviously this amount of offset is much more than you'd get from cables. But if you're getting the right result with cables, perhaps this is not happening. Perhaps you are seeing multipath effects. You don't mention the frequency so it's hard visualise. At 5 feet the wave front may be a long way from plane. Even in the open air you will have a ground reflection. At shallow angles the reflection coefficient can approach unity, with a 180 degree phase change so you get up to 6 dB constructive interference or almost complete destructive interference, depending on height and distance until the point at which the path difference becomes less then 1/2 wavelength. Beyond that there's a 4th power law drop off. https://en.wikipedia.org/wiki/Two-ray_ground-reflection_model I hope this helps. Steve Hubbard
Re: the principle of "constellation modulator"?
Hi , I don't know the inner workings of the module but if I want to generate, for example PSK, from first principles, I do it as follows. For QPSK there are four points in the constellation so each represents 2 bits. The points may be 1 + j, -1 - j, 1 - j and -1 + j, so a sample representing 2 bits would be one of these. If there is more than 1 sample per symbol, then the other samples are zero (interpolation). The next sample follows and so on. This forms the input to your root Nyquist filter, e.g. SRRC. The output of the filter is the modulated signal. As the previous response said, the centre frequency is zero. If you want any other frequency, a complex mix is required. To help you understand this you could try writing some code in Matlab, Octave or Python etc. to implement a simple signal chain. Regards, Steve Hubbard On 7/5/21 7:03 pm, wrote: Recently I was learning the working principle of "constellation modulator". I read the file "generic_mod_demod.py" and realized that it is a hierarchical block. I was confused about its working principle, why there is no other action after it is connected to rrc_filter. What? Shouldn't the general IQ modulation have "acoswt-bsinwt" or "(a + bi) exp(-jwt)" operation? I haven't seen similar operations in the code, but the output of the "constellation modulator" is a baseband complex modulated signal. Is there anything else I can't see? mod code: ?0?2 ?0?2 ?0?2 ?0?2 # Connect ?0?2 ?0?2 ?0?2 ?0?2 self._blocks = [self, self.bytes2chunks] ?0?2 ?0?2 ?0?2 ?0?2 if self.pre_diff_code: ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 self._blocks.append(self.symbol_mapper) ?0?2 ?0?2 ?0?2 ?0?2 if differential: ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 ?0?2 self._blocks.append(self.diffenc) ?0?2 ?0?2 ?0?2 ?0?2 self._blocks += [self.chunks2symbols, self.rrc_filter, self] ?0?2 ?0?2 ?0?2 ?0?2 self.connect(*self._blocks)
Gnuradio 3.8 on Cent OS 7
I am trying to install Gnuradio 3.8 on Cent OS 7 from source https://wiki.gnuradio.org/index.php/InstallingGR#For_GNU_Radio_3.8_or_Earlier and I get this error: -- Looked for LOG4CPP libraries named log4cpp. CMake Error at cmake/Modules/FindLOG4CPP.cmake:46 (message): Could NOT find LOG4CPP library Call Stack (most recent call first): CMakeLists.txt:467 (find_package) -- Configuring incomplete, errors occurred! See also "/root/gnuradio/build/CMakeFiles/CMakeOutput.log". See also "/root/gnuradio/build/CMakeFiles/CMakeError.log". I have installed log4cpp and log4cpp-devel. Also tried the following: [root@localhost build]# yum list | grep log4cpp log4cpp.x86_64 1.1.1-1.el7 @epel log4cpp-devel.x86_64 1.1.1-1.el7 @epel log4cpp-doc.x86_64 1.1.1-1.el7 epel [root@localhost build]# yum search all log4cpp Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.colocity.com * centos-sclo-rh: mirror.colocity.com * centos-sclo-sclo: mirror.colocity.com * elrepo: syd.mirror.rackspace.com * epel: fedora.mirror.serversaustralia.com.au * extras: mirror.colocity.com * updates: mirror.colocity.com === Matched: log4cpp === log4cpp-devel.x86_64 : Header files, libraries and development man pages : log4cpp log4cpp-doc.x86_64 : Development documentation for log4cpp log4cpp.x86_64 : C++ logging library Any ideas please? Steve
Python decimation block
Hi, I am quite new to Gnuradio and Python and have been trying to create my own functionality using the embedded Python block in GRC. A synchronous block worked fine but a decim_block complained it was only getting 4 args instead of 5. The doco at https://wiki.gnuradio.org/index.php/Types_of_Blocks#Decimation_Block shows only 4 args for Python but the C++ example shows an argument called 'decimation'. I tried this in the Python code but it didn't work. I eventually found this: https://gnuradio.blogspot.com/2018/03/discuss-gnuradio-working-with-grc.html , which shows that the missing parameter is 'decim'. So it appears the wiki is incorrect. How can this be put right? Also, it would help to be able to see what the Python base class is expecting but I don't know where these are stored or documented. Any ideas? Thanks, Steve