Question

I've written a component that reads in from a data file and pushes packets to a BULKIO output port. This output port is connected to the dataFloat_In port of a TuneFilterDecimate component. The output port of TuneFilterDecimate is then connected to the dataFloat_in port of an AmFmPmBasebandDemod component. However, I can't seem to set the properties of the TuneFilterDecimate component correctly to get the expected baseband output.

The data file that I am using as input is a recording of digitized IF data. The RF center frequency of the data file is 93 MHz. The IF center frequency is 26.75 MHz. This information is included as keywords COL_RF and CHAN_RF of the SRI respectively. The SRI also contains the reciprocal of the sample rate (83.333 MHz) of the data as xdelta.

I'd like to create a waveform to demod a standard FM broadcast at 92.5 MHz that is located in this file.

Any thoughts? What should the properties of the TuneFilterDecimate component be set to? I'd be happy to provide more information if necessary.

Thanks!

Was it helpful?

Solution

This video shows the process of doing that using an RTL receiver. This will give you the general idea of what the waveform should look like.

http://www.youtube.com/watch?v=wN9p8EjiQs4

The 1.8.4 TuneFilterDecimate component let's you tune in one of three modes: Normalized, IF, or RF. In your example, you could choose the following.

  • TuneMode=RF, TuningRF=92.5 MHz
  • TuneMode=IF, TuningIF=26.25 MHz
  • TuneMode=Norm, TuningNorm = (26.25 - 26.75 / 83333000) + .5 = 0.494

(A sample rate of 83.333 MHz seems a bit high, so you might want to double check that)

When using the RF/IF tune mode, the COL_RF/CHAN_RF keywords must be correct. Tuning using the normalized number does not require these keywords.

OTHER TIPS

Before answering your question, perhaps the most important point which is worth noting is that TuneFilterDecimate does NOT work appropriately with real data. If you try to run real data into this component you will see the following cryptic message in the log.

"Treating real data as if it were complex"

This basically tells you that TuneFilterDecimate is not going to work appropriately if the data is actually real. We are currently considering adding the feature of handling real data appropriately for this component. If your IF data is complex you are OK. IF it is real, you cannot currently use TuneFilterDecimate as the first stage of your processing.

Now back to your question. It can really be broken down into two parts. How does one set the keywords appropriately. And, given appropriate RF keywords, how should TuneFilterDecimate be configured.

The usage of the COL_RF and CHAN_RF Keywords are defined in the FrontEnd Interface spec. You can see the Documentation here.

The important thing to remember is that in both cases the purpose of these keywords is to provide a mapping between RF frequencies and the center of the data stream. If your IF data is complex, the center of the band is 0 Hz. If it is real, the center of the data stream is fs/4.

COL_RF is for the collector rf. If you are tuning your collected data, you use CHAN_RF in addition to the COL_RF so the original collector information is retained. In other words, if CHAN_RF is present, it supersedes COL_RF for your current signal to map between baseband

Thus the following equations can be used for a mapping for the KEYWORD_VALUE.:

For complex IF data:

rfFreq = KEYWORD_VALUE + ifFreq

For real IF data:

rfFreq = KEYWORD_VALUE- fs/4.0 + ifFreq

ifFreq is the frequency of your signal. rfFreq is corosponding frequency at Rf. KEYWORD_VALUE is the value of CHAN_RF if it exists OR the value of COL_RF if no CHAN_RF is present. fs is your sampling rate.

In your exmple you didn't specify whehter your if data was real or complex. Given the paramters you used I would guess it is real.

Either way, by using a non-center IF band you must adjust your keywords appropriately and solve for the Rf value that maps to the center of the band.

We can use the two equations above to solve for CHAN_RF.

IF your data is real: 93MHz = KEY_VAL - 83.333/ 4.0 + 26.75 KEY_VAL = 87.08333 MHz. This should be the Rf value of the center of your band

If your data is complex: 93MHz = CHAN_RF + 26.75 KEY_VAL = 66.25

We know that the IF value you care about is .5 MHz below the If center frequency. This value is 26.25MHz. We can check the two equations to verify the mapping is working appropriately.

For the real case: ifFreq = 92.5 - 87.08333 + 83.333/ 4.0 = 26.25

For the complex case: ifFreq = 92.5 - 66.25 = 26.25

In either case the correct value is obtained. Thus we have verified the key word values are set appropriately.

The keyword you can use for your situation can be either COL_RF or CHAN_RF, depending on which makes more sense given your collection process of obtaining your data. COL_RF is the Rf collection value. CHAN_RF is for tuning a channel out of your collected signal. If you think of your process of obtaining the data as one transformation, you should use COL_RF. If you think of your process as collecting at 93 MHz and then tuning the collected data from the center of the band to 26.75, then you can set COL_RF to 93MHz and CHAN_RF to the key value found above.

Now to the second question. Given the appropriate key word usage, you can use TuneFilterDecimate in Rf mode and set the Tuning Rf to 92.5 MHz. If you want to you can bypass all of these keywords and just use the IF mode and set the value to 26.25MHz.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top