Re: Taylor detector

2022-08-13 Thread Steve Hubbard

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

2022-02-01 Thread Steve Hubbard
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

2021-07-01 Thread Steve Hubbard

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"?

2021-05-07 Thread Steve Hubbard

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

2020-05-18 Thread Steve Hubbard
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

2020-05-13 Thread Steve Hubbard

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