diff options
Diffstat (limited to '')
-rw-r--r-- | src/gr-fadingui/python/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/gr-fadingui/python/__init__.py | 1 | ||||
-rw-r--r-- | src/gr-fadingui/python/multipath_fading.py | 91 | ||||
-rwxr-xr-x | src/gr-fadingui/python/qa_multipath_fading.py | 41 |
4 files changed, 136 insertions, 1 deletions
diff --git a/src/gr-fadingui/python/CMakeLists.txt b/src/gr-fadingui/python/CMakeLists.txt index 6ee73d3..95bb852 100644 --- a/src/gr-fadingui/python/CMakeLists.txt +++ b/src/gr-fadingui/python/CMakeLists.txt @@ -37,7 +37,8 @@ GR_PYTHON_INSTALL( dearpygui_sink.py xor_frame_sync.py deframer.py - frame_obj.py DESTINATION ${GR_PYTHON_DIR}/fadingui + frame_obj.py + multipath_fading.py DESTINATION ${GR_PYTHON_DIR}/fadingui ) ######################################################################## @@ -48,3 +49,4 @@ include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-fadingui) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_xor_frame_sync ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_xor_frame_sync.py) +GR_ADD_TEST(qa_multipath_fading ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_multipath_fading.py) diff --git a/src/gr-fadingui/python/__init__.py b/src/gr-fadingui/python/__init__.py index 5fdfea4..5a7b546 100644 --- a/src/gr-fadingui/python/__init__.py +++ b/src/gr-fadingui/python/__init__.py @@ -37,5 +37,6 @@ from .dearpygui_sink import dearpygui_sink from .xor_frame_sync import xor_frame_sync from .deframer import deframer from .frame_obj import frame_obj +from .multipath_fading import multipath_fading # diff --git a/src/gr-fadingui/python/multipath_fading.py b/src/gr-fadingui/python/multipath_fading.py new file mode 100644 index 0000000..01f2dbe --- /dev/null +++ b/src/gr-fadingui/python/multipath_fading.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2021 Sara Cinzia Halter. +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this software; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + + +import numpy as np +from numpy.fft import fft,ifft,fftshift +from gnuradio import gr + +from fadingui.logger import get_logger +log = get_logger("multipath_fading") + +class multipath_fading(gr.sync_block): + """ + docstring for block multipath_fading + """ + def __init__(self, amplitudes=[], delays=[], los=True): # only default arguments here + """arguments to this function show up as parameters in GRC""" + gr.sync_block.__init__( + self, + name='Embedded Python Block', # will show up in GRC + in_sig=[np.complex64], + out_sig=[np.complex64] + ) + # if an attribute with the same name as a parameter is found, + # a callback is registered (properties work, too). + self.amplitudes = amplitudes + self.delays = delays + self.temp = [0] + # if los: + # self.amplitudes.append(1) + # self.delays.append(0) + self.los= 1 + #self.fir = + + def work(self, input_items, output_items): + """example: multiply with constant""" + inp = input_items[0] + oup = output_items[0] + + if len(self.amplitudes) != len(self.delays): + raise Exception("Amplitudes and Delay length dont match") + + # raise Exception("Delay length can't be one") + #if np.min(self.delays)<=1: + # raise Exception("Delay length can't be one") + max_len = np.max(self.delays) + sum_x = np.zeros(max_len) + for(a,d) in zip(self.amplitudes,self.delays): + # if d-1 <= 0: + # x = np.concatenate([[a], np.zeros(max_len-1)]) + # else: + x = np.concatenate([np.zeros(d-1), [a], np.zeros(max_len-d)]) + sum_x += x + + sum_x[0] = self.los + log.debug(sum_x) + + #H_int = fft(sum_x) + + #h = ifft(H_int) + + #h[0]=1 + + y = np.convolve(inp, sum_x) + + y+=np.concatenate([self.temp,np.zeros(len(y)-len(self.temp))]) + + + oup[:] = y[:len(inp)] + self.temp = y[len(inp):] + + + return len(oup)
\ No newline at end of file diff --git a/src/gr-fadingui/python/qa_multipath_fading.py b/src/gr-fadingui/python/qa_multipath_fading.py new file mode 100755 index 0000000..6a27cc6 --- /dev/null +++ b/src/gr-fadingui/python/qa_multipath_fading.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2021 Sara Cinzia Halter. +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this software; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from gnuradio import gr, gr_unittest +from gnuradio import blocks +from multipath_fading import multipath_fading + +class qa_multipath_fading(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_001_t(self): + # set up fg + self.tb.run() + # check data + + +if __name__ == '__main__': + gr_unittest.run(qa_multipath_fading) |