1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647
|
liquid-dsp examples
===================
This directory contains all the examples for interfacing the liquid modules.
* `agc_crcf_example.c`:
Automatic gain control example demonstrating its transient response.
* `agc_crcf_qpsk_example.c`:
Automatic gain control test for data signals with fluctuating signal
levels. QPSK modulation introduces periodic random zero-crossings which
gives instantaneous amplitude levels near zero. This example tests the
response of the AGC to these types of signals.
* `ampmodem_example.c`:
Tests simple modulation/demodulation of the ampmodem (analog amplitude
modulator/demodulator) with noise, carrier phase, and carrier frequency
offsets.
* `asgramcf_example.c`:
ASCII spectrogram example for complex inputs. This example demonstrates
the functionality of the ASCII spectrogram. A sweeping complex sinusoid
is generated and the resulting spectral periodogram is printed to the
screen.
* `asgramf_example.c`:
ASCII spectrogram example for real-valued input. This example demonstrates
the functionality of the ASCII spectrogram for real-valued input siganls.
A cosine signal with time-varying frequency is generated and the resulting
spectral periodogram is printed to the screen. Because the time signal has
no complex component, its spectrum is symmetric.
* `autocorr_cccf_example.c`:
This example demonstrates the autocorr (auto-correlation) object
functionality. A random time-domain sequence is generated which exhibits
time-domain repetitions (auto-correlation properties), for example:
abcdabcdabcd....abcd. The sequence is pushed through the autocorr object,
and the results are written to an output file. The command-line arguments
allow the user to experiment with the sequence length, number of sequence
repetitions, and properties of the auto-correlator, as well as signal-to-
noise ratio.
* `bpacketsync_example.c`:
* `bpresync_example.c`:
This example demonstrates the binary pre-demodulator synchronizer. A random
binary sequence is generated, modulated with BPSK, and then interpolated.
The resulting sequence is used to generate a bpresync object which in turn
is used to detect a signal in the presence of carrier frequency and timing
offsets and additive white Gauss noise.
* `bsequence_example.c`:
This example demonstrates the interface to the bsequence (binary sequence)
object. The bsequence object acts like a buffer of bits which are stored
and manipulated efficiently in memory.
* `bufferf_example.c`:
* `cgsolve_example.c`:
Solve linear system of equations `Ax = b` using the conjugate-
gradient method where A is a symmetric positive-definite matrix.
Compare speed to matrixf_linsolve() for same system.
* `chromosome_example.c`:
* `compand_cf_example.c`:
* `compand_example.c`:
This example demonstrates the interface to the compand function
(compression, expansion). The compander is typically used with the
quantizer to increase the dynamic range of the converter, particularly for
low-level signals. The transfer function is computed (empirically) and
printed to the screen.
* `complementary_codes_example.c`:
This example demonstrates how to generate complementary binary codes
in liquid. A pair of codes is generated using the bsequence
interface, their auto-correlations are computed, and the result is
summed and printed to the screen. The results are also printed to
an output file, which plots the sequences and their
auto-correlations.
SEE ALSO: `bsequence_example.c`
`msequence_example.c`
* `cpfskmodem_example.c`:
* `conversion_example.c`:
This example demonstrates conversion from complex baseband to a real-valued
signal, and then down-conversion back to complex baseband while removing the
negative image.
STEP 1: A signal is generated at complex baseband consisting of narrow-band
filtered noise and an offset tone (to show asymmetry in the transmit
spectrum).
STEP 2: The signal is mixed up to a carrier 'fc' (relative to the sampling
frequency) and the real-component of the result is retained. This is
the DAC output. The spectrum of this signal has two images: one at
+fc, the other at -fc.
STEP 3: The DAC output is mixed back down to complex baseband and the lower
image is (mostly) filtered off. Reminants of the lower frequency
component are still visible due to the wide-band and low-order
filter on the receiver. The received complex baseband signal also
has a reduction in power by 2 because half the signal's energy (the
negative image) is filtered off.
* `crc_example.c`:
Cyclic redundancy check (CRC) example. This example demonstrates how a
CRC can be used to validate data received through un-reliable means (e.g.
a noisy channel). A CRC is, in essence, a strong algebraic error
detection code that computes a key on a block of data using base-2
polynomials. Also available is a checksum for data validation.
SEE ALSO: `fec_example.c`
* `cvsd_example.c`:
Continuously-variable slope delta example, sinusoidal input. This example
demonstrates the CVSD audio encoder interface, and its response to a
sinusoidal input. The output distortion ratio is computed, and the
time-domain results are written to a file.
* `dds_cccf_example.c`:
Direct digital synthesizer example. This example demonstrates
the interface to the direct digital synthesizer. A baseband
pulse is generated and then efficiently up-converted
(interpolated and mixed up) using the DDS object. The resulting
signal is then down-converted (mixed down and decimated) using
the same DDS object. Results are written to a file.
* `dotprod_cccf_example.c`:
This example demonstrates the interface to the complex
floating-point dot product object (dotprod_cccf).
* `dotprod_rrrf_example.c`:
This example demonstrates the interface to the floating-point dot
product object (dotprod_rrrf).
* `eqlms_cccf_blind_example.c`:
This example tests the least mean-squares (LMS) equalizer (EQ) on a
signal with an unknown modulation and carrier frequency offset. That
is, the equalization is done completely blind of the modulation
scheme or its underlying data set. The error estimate assumes a
constant modulus linear modulation scheme. This works surprisingly
well even more amplitude-modulated signals, e.g. 'qam16'.
* `eqlms_cccf_block_example.c`:
This example tests the least mean-squares (LMS) equalizer (EQ) on a
signal with an unknown modulation and carrier frequency offset.
Equalization is performed blind on a block of samples and the reulting
constellation is output to a file for plotting.
* `eqlms_cccf_decisiondirected_example.c`:
Tests least mean-squares (LMS) equalizer (EQ) on a signal with a known
linear modulation scheme, but unknown data. The equalizer is updated
using decision-directed demodulator output samples.
* `eqlms_cccf_example.c`:
* `eqrls_cccf_example.c`:
* `error_handling_example.c`:
This example demonstrates error handling in liquid.
* `fct_example.c`:
* `fec_example.c`:
This example demonstrates the interface for forward error-correction (FEC)
codes. A buffer of data bytes is encoded and corrupted with several
errors. The decoder then attempts to recover the original data set. The
user may select the FEC scheme from the command-line interface.
SEE ALSO: `crc_example.c`
`checksum_example.c`
`packetizer_example.c`
* `fec_soft_example.c`:
This example demonstrates the interface for forward error-correction
(FEC) codes with soft-decision decoding. A buffer of data bytes is
encoded before the data are corrupted with at least one error and
noise. The decoder then attempts to recover the original data set
from the soft input bits. The user may select the FEC scheme from
the command-line interface.
SEE ALSO: `fec_example.c`
`packetizer_soft_example.c`
* `fft_example.c`:
This example demonstrates the interface to the fast discrete Fourier
transform (FFT).
SEE ALSO: `mdct_example.c`
`fct_example.c`
* `fftfilt_crcf_example.c`
Complex FFT-based finite impulse response filter example. This example
demonstrates the functionality of firfilt by designing a low-order
prototype and using it to filter a noisy signal. The filter coefficients
are real, but the input and output arrays are complex. The filter order
and cutoff frequency are specified at the beginning, and the result is
compared to the regular corresponding firfilt_crcf output.
SEE ALSO: `firfilt_crcf_example.c`
* `firdecim_crcf_example.c`:
This example demonstrates the interface to the firdecim (finite
impulse response decimator) family of objects.
Data symbols are generated and then interpolated according to a
finite impulse response square-root Nyquist filter. The resulting
sequence is then decimated with the same filter, matched to the
interpolator.
SEE ALSO: `firinterp_crcf_example.c`
* `firdes_kaiser_example.c`:
This example demonstrates finite impulse response filter design using a
Kaiser window.
SEE ALSO: `firdespm_example.c`
* `firdespm_example.c`:
This example demonstrates finite impulse response filter design using the
Parks-McClellan algorithm.
SEE ALSO: `firdes_kaiser_example.c`
* `firfarrow_rrrf_sine_example.c`:
* `firfilt_rrrf_example.c`:
* `firfilt_cccf_example.c`:
This example demonstrates the finite impulse response (FIR) filter
with complex coefficients as a cross-correlator between transmitted
and received sequences.
* `firfilt_crcf_example.c`:
Complex finite impulse response filter example. Demonstrates the
functionality of firfilt by designing a low-order prototype and using it
to filter a noisy signal. The filter coefficients are real, but the
input and output arrays are complex. The filter order and cutoff
frequency are specified at the beginning.
* `firhilb_decim_example.c`:
Hilbert transform: 2:1 real-to-complex decimator. This example
demonstrates the functionality of firhilb (finite impulse response Hilbert
transform) decimator which converts a real time series into a complex one
with half the number of samples. The input is a real-valued sinusoid of N
samples. The output is a complex-valued sinusoid of N/2 samples.
SEE ALSO: `firhilb_interp_example.c`
* `firhilb_example.c`:
* `firhilb_interp_example.c`:
Hilbert transform: 1:2 complex-to-real interpolator. This example
demonstrates the functionality of firhilb (finite impulse response Hilbert
transform) interpolator which converts a complex time series into a real
one with twice the number of samples. The input is a complex-valued
sinusoid of N samples. The output is a real-valued sinusoid of 2*N
samples.
SEE ALSO: `firhilb_decim_example.c`
* `firpfbch2_crcf_example.c`:
Example of the finite impulse response (FIR) polyphase filterbank
(PFB) channelizer with an output rate of 2 Fs / M as an (almost)
perfect reconstructive system.
* `firinterp_crcf_example.c`:
This example demonstrates the interp object (interpolator)
interface. Data symbols are generated and then interpolated
according to a finite impulse response Nyquist filter.
* `firpfbch_crcf_analysis_example.c`:
Example of the analysis channelizer filterbank. The input signal is
comprised of several signals spanning different frequency bands. The
channelizer downconverts each to baseband (maximally decimated), and
the resulting spectrum of each is plotted.
* `firpfbch_crcf_example.c`:
Finite impulse response (FIR) polyphase filter bank (PFB)
channelizer example. This example demonstrates the functionality of
the polyphase filter bank channelizer and how its output is
mathematically equivalent to a series of parallel down-converters
(mixers/decimators). Both the synthesis and analysis filter banks
are presented.
* `firpfbch_crcf_synthesis_example.c`:
Example of the synthesis channelizer filterbank. Random symbols are
generated and loaded into the bins of the channelizer and the
time-domain signal is synthesized. Subcarriers around the band
edges are disabled as well as those near 0.25 to demonstrate the
synthesizer's ability to efficiently notch the spectrum. The results
are printed to a file for plotting.
* `flexframesync_example.c`:
This example demonstrates the basic interface to the flexframegen and
flexframesync objects used to completely encapsulate raw data bytes
into frame samples (nearly) ready for over-the-air transmission. A
14-byte header and variable length payload are encoded into baseband
symbols using the flexframegen object. The resulting symbols are
interpolated using a root-Nyquist filter and the resulting samples are
then fed into the flexframesync object which attempts to decode the
frame. Whenever frame is found and properly decoded, its callback
function is invoked.
* `flexframesync_reconfig_example.c`:
Demonstrates the reconfigurability of the flexframegen and
flexframesync objects.
* `framesync64_example.c`:
This example demonstrates the interfaces to the framegen64 and
framesync64 objects used to completely encapsulate data for
over-the-air transmission. A 24-byte header and 64-byte payload are
encoded, modulated, and interpolated using the framegen64 object.
The resulting complex baseband samples are corrupted with noise and
moderate carrier frequency and phase offsets before the framesync64
object attempts to decode the frame. The resulting data are
compared to the original to validate correctness.
SEE ALSO: `flexframesync_example.c`
* `freqmodem_example.c`:
* `fskmodem_example.c`:
This example demonstrates the M-ary frequency-shift keying
(MFSK) modem in liquid. A message signal is modulated and the
resulting signal is recovered using a demodulator object.
* `gasearch_example.c`:
* `gasearch_knapsack_example.c`:
* `gmskmodem_example.c`:
* `gradsearch_example.c`:
* `gradsearch_datafit_example.c`:
Fit 3-parameter curve to sampled data set in the minimum
mean-squared error sense.
* `iirdes_analog_example.c`:
Tests infinite impulse response (IIR) analog filter design. While this
example seems purely academic as IIR filters used in liquid are all
digital, it is important to realize that they are all derived from their
analog counterparts. This example serves to check the response of the
analog filters to ensure they are correct. The results of design are
written to a file.
SEE ALSO: `iirdes_example.c`
`iirfilt_crcf_example.c`
* `iirdes_example.c`:
Tests infinite impulse response (IIR) digital filter design.
SEE ALSO: `iirdes_analog_example.c`
`iirfilt_crcf_example.c`
* `iirdes_pll_example.c`:
This example demonstrates 2nd-order IIR phase-locked loop filter
design with a practical simulation.
SEE ALSO: `nco_pll_example.c`
`nco_pll_modem_example.c`
* `iirfilt_cccf_example.c`:
Complex infinite impulse response filter example. Demonstrates the
functionality of iirfilt with complex coefficients by designing a
filter with specified parameters and then filters noise.
* `iirfilt_crcf_example.c`:
Complex infinite impulse response filter example. Demonstrates the
functionality of iirfilt by designing a low-order prototype (e.g.
Butterworth) and using it to filter a noisy signal. The filter
coefficients are real, but the input and output arrays are complex. The
filter order and cutoff frequency are specified at the beginning.
* `iirinterp_crcf_example.c`:
This example demonstrates the iirinterp object (IIR interpolator)
interface.
* `interleaver_example.c`:
This example demonstrates the functionality of the liquid interleaver
object. Interleavers serve to distribute grouped bit errors evenly
throughout a block of data. This aids certain forward error-correction
codes in correcting bit errors. In this example, data bits are
interleaved and de-interleaved; the resulting sequence is validated to
match the original.
SEE ALSO: `packetizer_example.c`
* `interleaver_scatterplot_example.c`:
* `interleaver_soft_example.c`:
* `kbd_window_example.c`:
* `lpc_example.c`:
This example demonstrates linear prediction in liquid. An input signal
is generated which exhibits a strong temporal correlation. The linear
predictor generates an approximating all-pole filter which minimizes
the squared error between the prediction and the actual output.
* `matched_filter_example.c`:
* `math_lngamma_example.c`:
Demonstrates accuracy of lngamma function.
* `mdct_example.c`:
* `modem_arb_example.c`:
This example demonstrates the functionality of the arbitrary modem, a
digital modulator/demodulator object with signal constellation points
chosen arbitrarily. A simple bit-error rate simulation is then run to
test the performance of the modem. The results are written to a file.
SEE ALSO: `modem_example.c`
* `modem_example.c`:
This example demonstrates the digital modulator/demodulator (modem) object.
Data symbols are modulated into complex samples which are then demodulated
without noise or phase offsets. The user may select the modulation scheme
via the command-line interface.
SEE ALSO: `modem_arb_example.c`
* `modem_soft_example.c`:
This example demonstrates soft demodulation of linear
modulation schemes.
* `modular_arithmetic_example.c`:
This example demonstrates some modular arithmetic functions.
* `msequence_example.c`:
This example demonstrates the auto-correlation properties of a
maximal-length sequence (m-sequence). An m-sequence of a certain length
is used to generate two binary sequences (buffers) which are then
cross-correlated. The resulting correlation produces -1 for all values
except at index zero, where the sequences align.
SEE ALSO: `bsequence_example.c`
* `msourcecf_example.c`:
This example demonstrates generating multiple signal sources simultaneously
for testing using the msource (multi-source) family of objects.
* `msresamp_crcf_example.c`:
Demonstration of the multi-stage arbitrary resampler.
* `msresamp2_crcf_example.c`:
Demonstration of the multi-stage half-band resampler.
* `nco_example.c`:
This example demonstrates the most basic functionality of the
numerically-controlled oscillator (NCO) object.
SEE ALSO: `nco_pll_example.c`
`nco_pll_modem_example.c`
* `nco_pll_example.c`:
This example demonstrates how the use the nco/pll object
(numerically-controlled oscillator with phase-locked loop) interface for
tracking to a complex sinusoid. The loop bandwidth, phase offset, and
other parameter can be specified via the command-line interface.
SEE ALSO: `nco_example.c`
`nco_pll_modem_example.c`
* `nco_pll_modem_example.c`:
This example demonstrates how the nco/pll object (numerically-controlled
oscillator with phase-locked loop) can be used for carrier frequency
recovery in digital modems. The modem type, SNR, and other parameters are
specified via the command-line interface.
SEE ALSO: `nco_example.c`
`nco_pll_example.c`
* `nyquist_filter_example.c`:
* `ofdmflexframesync_example.c`:
* `ofdmframegen_example.c`:
* `ofdmframesync_example.c`:
* `packetizer_example.c`:
Demonstrates the functionality of the packetizer object. Data are encoded
using two forward error-correction schemes (an inner and outer code)
before data errors are introduced. The decoder then tries to recover the
original data message.
SEE ALSO: `fec_example.c`
`crc_example.c`
* `packetizer_soft_example.c`:
This example demonstrates the functionality of the packetizer object
for soft-decision decoding. Data are encoded using two forward error-
correction schemes (an inner and outer code) before noise and data
errors are added. The decoder then tries to recover the original data
message. Only the outer code uses soft-decision decoding.
SEE ALSO: `fec_soft_example.c`
`packetizer_example.c`
* `pll_example.c`:
Demonstrates a basic phase-locked loop to track the phase of a
complex sinusoid.
* `poly_findroots_example.c`:
* `polyfit_example.c`:
Test polynomial fit to sample data.
SEE ALSO: `polyfit_lagrange_example.c`
* `polyfit_lagrange_example.c`:
Test exact polynomial fit to sample data using Lagrange interpolating
polynomials.
SEE ALSO: `polyfit_example.c`
* `qdetector_cccf_example.c`:
This example demonstrates the functionality of the qdetector object
to detect an arbitrary signal in time in the presence of noise,
carrier frequency/phase offsets, and fractional-sample timing
offsets.
* `qpacketmodem_example.c`:
This example demonstrates the basic packet modem encoder/decoder
operation. A packet of data is encoded and modulated into symbols,
channel noise is added, and the resulting packet is demodulated
and decoded.
* `qnsearch_example.c`:
* `quantize_example.c`:
* `random_histogram_example.c`:
This example tests the random number generators for different
distributions.
* `repack_bytes_example.c`:
This example demonstrates the repack_bytes() interface by packing a
sequence of three 3-bit symbols into five 2-bit symbols. The
results are printed to the screen. Because the total number of bits
in the input is 9 and not evenly divisible by 2, the last of the 5
output symbols has a zero explicitly padded to the end.
* `resamp2_cccf_example.c`
This example demonstrates the halfband resampler cenetered at the
quarter sample rate to split the signal into positive and negative
frequency bands. Two distinct narrow-band signals are generated; one
at a positive frequency and one at a negative frequency. The resamp2
object is run as a filter to separate the two about the zero-
frequency center point.
* `resamp2_crcf_example.c`:
This example demonstrates the halfband resampler running as both an
interpolator and a decimator. A narrow-band signal is first
interpolated by a factor of 2, and then decimated. The resulting RMS
error between the final signal and original is computed and printed
to the screen.
* `resamp2_crcf_decim_example.c`:
Halfband decimator. This example demonstrates the interface to the
decimating halfband resampler. A low-frequency input sinusoid is
generated and fed into the decimator two samples at a time, producing one
output at each iteration. The results are written to an output file.
SEE ALSO: `resamp2_crcf_interp_example.c`
`decim_rrrf_example.c`
* `resamp2_crcf_filter_example.c`:
Halfband (two-channel) filterbank example. This example demonstrates
the analyzer/synthesizer execute() methods for the resamp2_xxxt
family of objects.
NOTE: The filterbank is not a perfect reconstruction filter; a
significant amount of distortion occurs in the transition band
of the half-band filters.
* `resamp2_crcf_interp_example.c`:
Halfband interpolator. This example demonstrates the interface to the
interpolating halfband resampler. A low-frequency input sinusoid is
generated and fed into the interpolator one sample at a time, producing
two outputs at each iteration. The results are written to an output file.
SEE ALSO: `resamp2_crcf_decim_example.c`
`interp_crcf_example.c`
* `resamp_crcf_example.c`:
* `scramble_example.c`:
Data-scrambling example. Physical layer synchronization of received
waveforms relies on independent and identically distributed underlying
data symbols. If the message sequence, however, is '00000....' and the
modulation scheme is BPSK, the synchronizer probably won't be able to
recover the symbol timing. It is imperative to increase the entropy of
the data for this to happen. The data scrambler routine attempts to
'whiten' the data sequence with a bit mask in order to achieve maximum
entropy. This example demonstrates the interface.
* `smatrix_example.c`:
* `spgramcf_example.c`:
Spectral periodogram example with complex inputs.
* `spgramf_example.c`:
Spectral periodogram example with real inputs.
* `symsync_crcf_example.c`:
This example demonstrates the basic principles of the symbol timing
recovery family of objects, specifically symsync_crcf. A set of random
QPSK symbols are generated and interpolated with a timing offset. The
resulting signal is run through the symsync_crcf object which applies a
matched filter and recovers timing producing a clean constellation.
* `symsync_crcf_full_example.c`:
This example extends that of `symsync_crcf_example.c` by including options
for simulating a timing rate offset in addition to just a timing phase
error. The resulting output file shows not just the constellation but the
time domain sequence as well as the timing phase estimate over time.
* `symsync_crcf_kaiser_example.c`:
This is a simplified example of the symync family of objects to show how
symbol timing can be recovered after the matched filter output.
* `symtrack_cccf_example.c`:
This example demonstrates how to recover data symbols using the symtrack
object. A stream of modulated and interpolated symbols are generated using
the symstream object. The resulting samples are passed through a channel
to add various impairments. The symtrack object recovers timing, carrier,
and other information imparted by the channel and returns data symbols
ready for demodulation.
* `wdelayf_example.c`:
* `windowf_example.c`:
This example demonstrates the functionality of a window buffer (also
known as a circular or ring buffer) of floating-point values.
Values are written to and read from the buffer using several
different methods.
SEE ALSO: `bufferf_example.c`
`wdelayf_example.c`
|