-
Notifications
You must be signed in to change notification settings - Fork 62
/
amenvelopedemodulator.lua
38 lines (31 loc) · 1.23 KB
/
amenvelopedemodulator.lua
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
---
-- Demodulate a baseband, double-sideband amplitude modulated complex-valued
-- signal with an envelope detector.
--
-- $$ y[n] = \text{AMDemodulate}(x[n], \text{bandwidth}) $$
--
-- @category Demodulation
-- @block AMEnvelopeDemodulator
-- @tparam[opt=5e3] number bandwidth Bandwidth in Hz
--
-- @signature in:ComplexFloat32 > out:Float32
--
-- @usage
-- -- AM demodulator with 5 kHz bandwidth
-- local demod = radio.AMEnvelopeDemodulator(5e3)
local block = require('radio.core.block')
local types = require('radio.types')
local blocks = require('radio.blocks')
local AMEnvelopeDemodulator = block.factory("AMEnvelopeDemodulator", blocks.CompositeBlock)
function AMEnvelopeDemodulator:instantiate(bandwidth)
blocks.CompositeBlock.instantiate(self)
bandwidth = bandwidth or 5e3
local am_demod = blocks.ComplexMagnitudeBlock()
local dcr_filter = blocks.SinglepoleHighpassFilterBlock(100)
local af_filter = blocks.LowpassFilterBlock(128, bandwidth)
self:connect(am_demod, dcr_filter, af_filter)
self:add_type_signature({block.Input("in", types.ComplexFloat32)}, {block.Output("out", types.Float32)})
self:connect(self, "in", am_demod, "in")
self:connect(self, "out", af_filter, "out")
end
return AMEnvelopeDemodulator