- Cyprien May 12, 2021 at 12:56 am
I am using the Spike playback functionality for interference hunting in the time domain to find infrequent pulsed emissions amongst other co-channel signals. The triggering is complex so have been recording a long sequence then sift through and pick out offending signals with unexpected waveforms.
Maybe I am overlooking something but I find I do many changes of the sweep time/sample step to look at an overview to find a cluster of pulses then zoom in to the offending pulse is a little tedious. Are there any magic keys to scroll, for example arrow keys, mouse scroll etc. to change and move the window? If not it would be really useful if the software could be enhanced a little. Also I am not sure if the capture settings always reflect what was used to capture the stream.
BTW I really appreciate many of the improvements you are making to Spike, including many of the smaller things that really improve productivity – so please keep them coming!
CyprienCyprien May 12, 2021 at 3:18 am
I was a little unclear above – I understand that you can you can zoom in on the graphs like AM vs time, but I really meant controlling the window position/dimensions in the playback IQ preview graph above the play/stop/pause button.
My workflow is to play the file from the beginning, then pause and move the rectangle slowly in an interesting part (sometimes backing up), then switch and zoom in the AM vs time graph. I loose track of specific event times in the file as I only have a offset in percentage to 2dp and cannot say move the window precisely to a time that I have previously noted.
I forgot to add that I have a repeatable issue when clicking on the graph to move the window when I have very large files (e.g. >> 8 GB) in that the little window rectangle on the preview trace only moves temporarily if too far into the file (> 8 GB it appears) and will go to back to the beginning of the stream after clicking. Finally I note that in the AM vs time graph, when you zoom in the window start/stop time is updated, but the average doesn’t appear to change.
Andrew May 12, 2021 at 2:27 pm
- This reply was modified 2 years, 7 months ago by Andrew.
Thank you for your feedback.
I agree, more functionality could definitely be added to the I/Q playback. You are running into some of the limitations of the feature. I can acknowledge some of your points.
– There is no controls or keys for scrubbing through the file, such as step forward/back/etc, other than the single step button for advancing 1 step.
– There is not currently a way to go to an exact time.
– The rectangle viewport has a minimum size so it can always be grabbed easily. This might be deceiving for very large captures.
– The resolution on the rectangle position is 1 pixel. With your file at 8GB in size, 1 pixel might be a lot of samples. Finding a signal this way will be difficult.
It was originally designed for shorter captures, and the controls reflect that. I have added some of your ideas to my notes. When we are able to revisit this portion of the software I think we should be able to add much of this.
One suggestion I might have, is to increase your sweep time to the maximum allowed, which will clamp at 4M points. This will effectively make your rectangular view into the file as large as it can be. Then you more easily use the per view zoom/scroll when you have found a signal of interest. This may not work for all use cases.
Additionally, signals can also be video triggered in the file. If your signals of interest have clear RF level rises, use the video trigger to find your signals. This might introduce some lag at large file sizes.
I should also mention, there exists third party software solutions that have extensive capabilities in this domain. See our third party vendors at this link. https://signalhound.com/support/third-party-software/ In particular, offerings from 3dB labs and Procitec have the types of features you are looking for.
I appreciate you taking the time to provide this feedback.
AndrewCyprien May 14, 2021 at 4:12 am
Thanks for the advice which is prompt and very helpful as always. I will be very happy if you are able to improve at some stage to an already great software.
CyprienAndrew May 14, 2021 at 9:08 am
If you use the time overview plot, you can drag the left/right vertical black bars to zoom in on a particular section of the plot. When you do this all other plots will update to only show this region of the capture. The AM vs time plot Avg power will update to reflect the avg power of just this region of the capture.
jorgeSigHoundParticipantjorgeSigHound May 19, 2021 at 10:56 am
I am trying to represent with MATLAB, from the processing of the IQ values in a *.iq file recorded with SPIKE, the values of ‘IQ vs. Time ‘, ‘ AM vs Time ‘, ‘ PM vs Time ‘ and ‘ FM vs Time ‘. In the process I have had the following difficulties:
1. The values of the IQ data read from the recorded file of an X signal, differ from the values of the same signal but acquired directly using the bbgetiq () function.
2. The values of the parameters’ IQ vs. Time ‘, ‘ AM vs Time ‘, ‘ PM vs Time ‘ and ‘ FM vs Time ‘. calculated and represented with MATLAB, differ from the values represented by the SPIKE software in the reproduction of the same .iq file.
I am attaching the code in order to find out which error I am making.
Thanks for the help
% SCRIPT IQ signal representation recorded with SPIKE software. clear variables; % clear functions; %% ADD TEMPORARY FOLDERS addpath('SxIQ_REC');% Folder where the * .iq and * .xml files are located %% PARAMETERS fDir='IQREC-Test1'; %IQ file of recordings with Signal Hound BB60A fDir_iq=[fDir '.iq']; fDir_xml=[fDir '.xml']; %% Reading XML file. iqXMLDoc= xmlread(fDir_xml); %<CenterFrequency> CenterFrequency_List = (iqXMLDoc.getElementsByTagName('CenterFrequency')); CeFr = str2double(CenterFrequency_List.item(0).getFirstChild.getData); %<SampleRate> SampleRate_List = (iqXMLDoc.getElementsByTagName('SampleRate')); SaRa = str2double(SampleRate_List.item(0).getFirstChild.getData); %<Decimation> Decimation_List = (iqXMLDoc.getElementsByTagName('Decimation')); Dec = str2double(Decimation_List.item(0).getFirstChild.getData); %<ScaleFactor> ScaleFactor_List = (iqXMLDoc.getElementsByTagName('ScaleFactor')); ScFa= str2double(ScaleFactor_List.item(0).getFirstChild.getData); %% Reading and processing of the .iq file f=fopen(fDir_iq,'r'); s=fread(f,'int16'); n=length(s)/2; iq = reshape(s, 2, n);% Transform s into a two-row, n-column matrix. vSh = iq(1,:) + 1i * iq(2,:);% Form the complex signal . %2) Convert 16-bit integer max scaled values to floating point values between -1 and 1. ScBin=2^16/2; vSh=vSh/ScBin; % 3) Multiply by the scale factor that the XML file has vSh=vSh*ScFa; vI = real(vSh); vQ = imag(vSh); % % Calculate the power of the samples in dBm % vS_dBm=10*log10(vI.^2+vQ.^2); %% GRAPHICS iqdata = vSh;% Vector containing the complex values of the IQ signal iqlen=length(iqdata);% iqdata = transpose(iqdata);% perform the transpose Ts=1/SaRa; subplot(2,2,1); am = 10.0 * log10(abs(iqdata).^2); plot(am); title('AM vs Time'); xlabel('Sample number'); ylabel('Amplitude (dBm)'); % subplot(2,2,3); x = linspace(1, iqlen, iqlen); plot(x, real(iqdata), x, imag(iqdata)); title('IQ vs. Time'); xlabel('Sample number'); ylabel('Amplitude ()'); subplot(2,2,2); pm=atan2(imag(iqdata),real(iqdata)); dg_pm= diff ([0;pm]);% [0;pm] so that dg_pm has the same values as pm fm=dg_pm*(SaRa/(2*pi)); plot(fm/1e6); title('FM vs Time'); xlabel('Sample number'); ylabel('Frequency (MHz)'); axis([0,length(x),-inf,inf]); subplot(2,2,4); plot(pm); title('PM vs Time'); xlabel('Sample number'); ylabel('Phase'); axis([0,length(x),-inf,inf]); %% rmpath('SxIQ_REC');% Delete the folder in the MATLAB paths
Attachments:You must be logged in to view attached files.
Justin CrooksModeratorJustin Crooks May 19, 2021 at 1:24 pm
It looks like you’re missing a scale factor on the I/Q data, and phase wrapping math on the FM plot.
Andrew May 19, 2021 at 1:35 pm
- This reply was modified 2 years, 6 months ago by Andrew.
It just looks like your scaling/conversion if off.
The Spike user manual documents the equations used to convert the file contents to scaled I/Q values, if you haven’t seen this already.
Have you stepped through your code and verified scale factor is correct?
Have you tried verifying your conversion works for fixed values? You could force 1+0i (SHRT_MAX,0) and fixed scalings to verify the conversion works properly.
That should fix the AMvTime plot. Our I/Q plot is in mV, so there would need to be another conversion if you wanted those units. Right now you are simply plotting I/Q straight from the device it appears.
I’m not sure whats happening with the FM. Maybe really small values create this? zero values? It doesn’t look like a phase discontinuity. Maybe phase wrapping like Justin said?
jorgeSigHoundParticipantjorgeSigHound May 19, 2021 at 3:45 pm
Thanks for the quick reply. I will work on your considerations. Thank you and congratulations to the Signal Hound Collective for their excellent work.
You must be logged in to reply to this topic.