├── FQM Utility
├── FQM Utilities 4.1.1 - Source Code
│ ├── doc
│ │ ├── package-list
│ │ ├── resources
│ │ │ └── inherit.gif
│ │ ├── allclasses-noframe.html
│ │ ├── allclasses-frame.html
│ │ ├── view
│ │ │ ├── package-frame.html
│ │ │ └── package-summary.html
│ │ ├── package-frame.html
│ │ ├── overview-frame.html
│ │ ├── index.html
│ │ ├── stylesheet.css
│ │ ├── data
│ │ │ ├── package-frame.html
│ │ │ ├── package-tree.html
│ │ │ └── package-summary.html
│ │ ├── logfile.txt
│ │ ├── constant-values.html
│ │ ├── overview-summary.html
│ │ ├── package-tree.html
│ │ └── package-summary.html
│ ├── README.TXT
│ ├── view
│ │ ├── ColorLibrary.java
│ │ ├── ConverterPanel.java
│ │ ├── Chooser.java
│ │ ├── GUILibrary.java
│ │ ├── package.bluej
│ │ ├── AdvancedPanel.java
│ │ └── GUI.java
│ ├── data
│ │ ├── ProgException.java
│ │ ├── Generator.java
│ │ ├── Const.java
│ │ ├── DftCoeff.java
│ │ ├── Process.java
│ │ ├── FilterCoeff.java
│ │ ├── package.bluej
│ │ └── Carriers.java
│ ├── filter_coeff.v
│ ├── package.bluej
│ ├── Main.java
│ └── dft_coeff.v
└── FQM Utility 4.1.1.jar
├── MATLAB
├── fabric_mult_perf.fig
├── state-of-the-art.fig
├── Parallel Transmitter
│ └── Implemented Transmitter
│ │ ├── transmitter_err.fig
│ │ ├── transmitter_out.fig
│ │ ├── transmitter_out_zoom.fig
│ │ ├── generate_DFT_coeff.m
│ │ ├── QAM_mapper.m
│ │ ├── transmitter.m
│ │ ├── DFT.m
│ │ ├── IDFT.m
│ │ ├── SRRC_filter.m
│ │ ├── modulator.m
│ │ └── testbench.m
├── signals.m
├── Simple Transmitter
│ └── Ideal Transmitter
│ │ ├── transmitter.m
│ │ ├── QAM_mapper.m
│ │ ├── modulator.m
│ │ ├── SRRC_filter.m
│ │ ├── DFT.m
│ │ ├── IDFT.m
│ │ └── testbench.m
├── state_of_the_art.m
├── plot_exp.m
├── exp_results.m
├── signals_parallel.m
├── plot_comp.m
├── plot_single.m
├── FQM_parallel_data_dec_Y_im.txt
├── FQM_parallel_data_dec_out.txt
└── FQM_parallel_data_dec_Y_re.txt
├── .gitignore
├── Hardware
└── FQM_16ns_NO_DSP
│ └── fourier_QAM_modulator
│ ├── filter_ceoff.v
│ ├── SRRC_filter.v
│ ├── QAM16.v
│ ├── modulator.v
│ ├── QAM64.v
│ ├── QAM.v
│ ├── QAM8.v
│ ├── idft.v
│ ├── QAM32.v
│ ├── dft.v
│ ├── transmitter.v
│ └── dft_coeff.v
└── README.md
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/package-list:
--------------------------------------------------------------------------------
1 | view
2 |
--------------------------------------------------------------------------------
/MATLAB/fabric_mult_perf.fig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/MATLAB/fabric_mult_perf.fig
--------------------------------------------------------------------------------
/MATLAB/state-of-the-art.fig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/MATLAB/state-of-the-art.fig
--------------------------------------------------------------------------------
/FQM Utility/FQM Utility 4.1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/FQM Utility/FQM Utility 4.1.1.jar
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/resources/inherit.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/resources/inherit.gif
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_err.fig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_err.fig
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_out.fig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_out.fig
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_out_zoom.fig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/asonnino/fourier-transmitter/HEAD/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter_out_zoom.fig
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # macOS
2 | .DS_Store
3 |
4 | # Compiled class file
5 | *.class
6 |
7 | # Log file
8 | *.log
9 |
10 | # BlueJ files
11 | *.ctxt
12 |
13 | # Mobile Tools for Java (J2ME)
14 | .mtj.tmp/
15 |
16 | # Package Files #
17 | #*.jar
18 | *.war
19 | *.nar
20 | *.ear
21 | *.zip
22 | *.tar.gz
23 | *.rar
24 |
25 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
26 | hs_err_pid*
27 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/README.TXT:
--------------------------------------------------------------------------------
1 | ------------------------------------------------------------------------
2 | This is the project README file. Here, you should describe your project.
3 | Tell the reader (someone who does not know anything about this project)
4 | all he/she needs to know. The comments should usually include at least:
5 | ------------------------------------------------------------------------
6 |
7 | PROJECT TITLE:
8 | PURPOSE OF PROJECT:
9 | VERSION or DATE:
10 | HOW TO START THIS PROJECT:
11 | AUTHORS:
12 | USER INSTRUCTIONS:
13 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/ColorLibrary.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import java.awt.Color;
4 |
5 | /**
6 | * Color library.
7 | *
8 | * @author Alberto Sonnino
9 | * @version 1.0.1
10 | */
11 | public class ColorLibrary
12 | {
13 | // Highline colors
14 | public static final Color APPLE_BLUE = new Color(19,144,255);
15 | public static final Color SELECTION_BLUE = new Color(14,84,205);
16 |
17 | // Greys
18 | public static final Color DARK_GREY = new Color(70, 70, 70);
19 | public static final Color LIGHT_GREY = new Color(110, 110, 110);
20 | }
21 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/generate_DFT_coeff.m:
--------------------------------------------------------------------------------
1 | function [ccos,csin] = generate_DFT_coeff(DFT_size)
2 | % GENERATE_DFT_COEFF Compute the DFT coefficients to manualy process the
3 | % DFT.
4 | %
5 | % See also DFT.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 | ccos = zeros(DFT_size,DFT_size);
11 | csin = zeros(DFT_size,DFT_size);
12 |
13 | for k=0:(DFT_size-1)
14 | for n=0:(DFT_size-1)
15 | ccos(k+1,n+1) = cos(2*pi*k*n/DFT_size);
16 | csin(k+1,n+1) = sin(2*pi*k*n/DFT_size);
17 | end
18 | end
19 |
20 | end
--------------------------------------------------------------------------------
/MATLAB/signals.m:
--------------------------------------------------------------------------------
1 | function data = signals(input, separator)
2 | % SIGNALS loads signals.
3 | %
4 | % Example:
5 | % data = signals('FQM_data_dec.txt') loads x all signals in the file
6 | % called FQM_data_dec.txt.
7 | %
8 | % AUTHOR Sonnino Alberto.
9 | % VERSION 1.0.1
10 |
11 |
12 |
13 | % Initialize defaults parameters
14 | filename = 'FQM_simple_data_dec.txt';
15 | delimiter = ',';
16 |
17 | % Update parameters
18 | switch(nargin)
19 | case 2
20 | filename = input;
21 | delimiter = separator;
22 | case 1
23 | filename = input;
24 | end
25 |
26 | % Import
27 | data = importdata(filename,delimiter);
28 |
29 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/ProgException.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 | /**
4 | * Class representing an exception.
5 | * This exception is used when trying to perform an operation that is not allowed.
6 | *
7 | * @author Sonnino
8 | * @version 12.04
9 | */
10 | public class ProgException extends Exception
11 | {
12 | /**
13 | * Constructor for objects of class Exception
14 | */
15 | public ProgException(){
16 | super();
17 | }
18 |
19 | /**
20 | * Constructor for objects of class Exception
21 | *
22 | * Make an exception with an error message
23 | */
24 | public ProgException(String message){
25 | super(message);
26 | }
27 | }
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/filter_coeff.v:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////
2 | // Auto-generated file - FQM Utility v4.1.1
3 | // Generated on 2015/10/04 11:17:52
4 | //
5 | //
6 | // Additional comments:
7 | // rescaling factor 32768.0
8 | ////////////////////////////////////////////////////////////
9 | module filter_coeff(
10 | output wire [255:0] H,
11 | output wire [15:0] H_max
12 | );
13 |
14 |
15 |
16 | assign H = 256'b0000001011100010000000111001111111110110001010111111101100110011001001110110001001000101001111110010011101100010111110110011001111110110001010110000001110011111000000101110001000000000000000000000000000000000000000000000000000000000000000000000000000000000;
17 |
18 | assign H_max = 16'b0100010100111111;
19 |
20 |
21 |
22 | endmodule
23 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/filter_ceoff.v:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////
2 | // Auto-generated file - FQM Utilities v1.1.1
3 | // Generated on 2015/09/03 15:23:28
4 | //
5 | //
6 | // Additional comments:
7 | // rescaling factor 32768.0
8 | ////////////////////////////////////////////////////////////
9 | module filter_coeff(
10 | output wire [255:0] H,
11 | output wire [15:0] H_max
12 | );
13 |
14 |
15 |
16 | assign H = 256'b0000001011100010000000111001111111110110001010111111101100110011001001110110001001000101001111110010011101100010111110110011001111110110001010110000001110011111000000101110001000000000000000000000000000000000000000000000000000000000000000000000000000000000;
17 |
18 | assign H_max = 16'b0100010100111111;
19 |
20 |
21 |
22 | endmodule
23 |
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/transmitter.m:
--------------------------------------------------------------------------------
1 | function [out_model] = transmitter(I,Q,H,cos,sin,plot_data)
2 | % TRANSMITTER Plot the ideal result and the computed theoretical output
3 | % of the transmitter block.
4 | %
5 | % See also QAM_MAPPING, FFT, SRRC_FILTER, IFFT, MODULATOR, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Initialize arguments
13 | switch(nargin)
14 | case 6
15 | display = plot_data;
16 | case 5
17 | display = 1;
18 | end
19 |
20 |
21 | % Compute theoretical values
22 | [tmp1, tmp2] = QAM_mapper(I,Q,0);
23 | [tmp1, tmp2] = DFT(tmp1,tmp2,0);
24 | [tmp1, tmp2] = SRRC_filter(tmp1,tmp2,H,0);
25 | [tmp1, tmp2] = IDFT(tmp1,tmp2,0);
26 | out_model = modulator(tmp1,tmp2,cos,sin,0);
27 |
28 |
29 | % Plot
30 | if(display)
31 | % Plot out_model
32 | plot_single(out_model','Transmitter','pro');
33 | end
34 |
35 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/allclasses-noframe.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | All Classes
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | All Classes
21 |
22 |
23 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/ConverterPanel.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import javax.swing.JPanel;
4 |
5 | /**
6 | * Panel allowing to manually user the number converter.
7 | *
8 | * @author Alberto Sonnino
9 | * @version 2.0.1
10 | */
11 | public class ConverterPanel extends JPanel
12 | {
13 | // instance variables - replace the example below with your own
14 | private int x;
15 |
16 | /**
17 | * Constructor for objects of class GeneralPanel
18 | */
19 | public ConverterPanel()
20 | {
21 | // initialise instance variables
22 | x = 0;
23 | }
24 |
25 | /**
26 | * An example of a method - replace this comment with your own
27 | *
28 | * @param y a sample parameter for a method
29 | * @return the sum of x and y
30 | */
31 | public int sampleMethod(int y)
32 | {
33 | // put your code here
34 | return x + y;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/allclasses-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | All Classes
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | All Classes
21 |
22 |
23 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/QAM_mapper.m:
--------------------------------------------------------------------------------
1 | function [I, Q] = QAM_mapper(I,Q,plot_data)
2 | % QAM_MAPPING Plot the experimental result of of a selected input of the
3 | % QAM mapping block.
4 | %
5 | % See also PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.2.1
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( size(I) == size(Q) );
14 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
15 | display('Error - QAM_MAPPER: wrong arguments size');
16 | return;
17 | end
18 |
19 | % Initialize arguments
20 | switch(nargin)
21 | case 3
22 | elem = plot_data;
23 | case 2
24 | elem = 1;
25 | end
26 |
27 |
28 | % Plot
29 | if((elem <= size(I,1)) && (elem > 0))
30 | % Plot I component
31 | plot_single(I(elem,:),'QAM MAPPER - I component','rect pro');
32 | % Plot Q component
33 | plot_single(Q(elem,:),'QAM MAPPER - Q component','rect pro');
34 | end
35 |
36 | end
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/QAM_mapper.m:
--------------------------------------------------------------------------------
1 | function [I, Q] = QAM_mapper(I,Q,plot_data)
2 | % QAM_MAPPING Plot the experimental result of the QAM mapping block.
3 | %
4 | % See also PLOT_SINGLE.
5 | %
6 | % AUTHOR Sonnino Alberto.
7 | % VERSION 1.0.1
8 |
9 |
10 |
11 | % Check argument's size
12 | sizeCheck = ( size(I) == size(Q) );
13 | if(sizeCheck == 0)
14 | displays('Error - QAM_MAPPER: wrong arguments size');
15 | return;
16 | elseif(size(I,2) ~= 1)
17 | displays('Error - QAM_MAPPER: inputs must be column vectors');
18 | return;
19 | end
20 |
21 | % Initialize arguments
22 | switch(nargin)
23 | case 3
24 | display = plot_data;
25 | case 2
26 | display = 1;
27 | end
28 |
29 |
30 | % Plot
31 | if(display)
32 | % Plot I component
33 | plot_single(I','QAM Mapping - I component','rect pro');
34 | % Plot Q component
35 | plot_single(Q','QAM Mapping - Q component','rect pro');
36 | end
37 |
38 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/package.bluej:
--------------------------------------------------------------------------------
1 | #BlueJ package file
2 | objectbench.height=76
3 | objectbench.width=722
4 | package.editor.height=561
5 | package.editor.width=614
6 | package.editor.x=173
7 | package.editor.y=23
8 | package.numDependencies=0
9 | package.numTargets=3
10 | package.showExtends=true
11 | package.showUses=true
12 | project.charset=UTF-8
13 | target1.height=62
14 | target1.name=view
15 | target1.type=PackageTarget
16 | target1.width=80
17 | target1.x=70
18 | target1.y=70
19 | target2.height=62
20 | target2.name=data
21 | target2.type=PackageTarget
22 | target2.width=80
23 | target2.x=160
24 | target2.y=10
25 | target3.editor.height=700
26 | target3.editor.width=900
27 | target3.editor.x=88
28 | target3.editor.y=24
29 | target3.height=50
30 | target3.name=Main
31 | target3.naviview.expanded=false
32 | target3.showInterface=false
33 | target3.type=ClassTarget
34 | target3.typeParameters=
35 | target3.width=80
36 | target3.x=70
37 | target3.y=10
38 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/view/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | view
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | view
21 |
22 |
23 |
24 | Classes
25 |
26 |
27 | GeneralPanel |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <Unnamed> (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | <Unnamed>
21 |
22 |
23 |
24 | Classes
25 |
26 |
27 | Main |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/MATLAB/state_of_the_art.m:
--------------------------------------------------------------------------------
1 | close all;
2 |
3 |
4 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 | % Plot state-of-the-art summary
6 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 |
8 | % Data
9 | years = [2003 2010 2010.1 2012 2013 2015];
10 | f = [55 111.11 125 128.6 650 750];
11 |
12 | % Splines
13 | xx = years(1,1) : 0.1 : years(1,end);
14 | yy = spline(years,f,xx);
15 |
16 | % Create figure
17 | figure1 = figure;
18 |
19 | % Create axes
20 | axes1 = axes('Parent',figure1,...
21 | 'ZColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
22 | 'YColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
23 | 'XColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
24 | 'FontSize',18);
25 | grid(axes1,'off');
26 | hold(axes1,'on');
27 | xlabel('years');
28 | ylabel('top frequency [MHz]');
29 |
30 | % Plot splines
31 | plot(years,f,'DisplayName','Input','LineWidth',2,...
32 | 'Color',[0 0 0]);
33 |
34 | % Plot data
35 | plot(years,f,'MarkerSize',15,'Marker','square','LineStyle','none',...
36 | 'Color',[0 0 0]);
37 |
38 |
--------------------------------------------------------------------------------
/MATLAB/plot_exp.m:
--------------------------------------------------------------------------------
1 | function [] = plot_exp(constraints,data)
2 |
3 | % Define axis and compute splines
4 | constraits_in_frequency = 1 ./ constraints .* 10^3; % in MHz
5 | data_in_frequency = 1 ./ data .* 10^3; % in MHz
6 | xx = constraits_in_frequency(1,1) : 0.1 : constraits_in_frequency(1,end);
7 | yy = spline(constraits_in_frequency,data_in_frequency,xx);
8 |
9 | % Create figure
10 | figure1 = figure;
11 |
12 | % Create axes
13 | axes1 = axes('Parent',figure1,...
14 | 'ZColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
15 | 'YColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
16 | 'XColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
17 | 'FontSize',18);
18 | grid(axes1,'on');
19 | hold(axes1,'on');
20 |
21 | % Create title
22 | %title('Fabric - Mults Design Performances','FontSize',24,'FontName','Arial',...
23 | % 'Color',[0.243137255311012 0.243137255311012 0.243137255311012],...
24 | %'FontSize',24);
25 | xlabel('clock constraints [MHz]');
26 | ylabel('top frequency [MHz]');
27 |
28 | % Plot
29 | plot(xx,yy,'DisplayName','Input','LineWidth',2,'Color',[0 0 0]);
30 | hold on;
31 | plot(constraits_in_frequency,data_in_frequency,'*k');
32 |
33 | end
34 |
--------------------------------------------------------------------------------
/MATLAB/exp_results.m:
--------------------------------------------------------------------------------
1 | close all;
2 |
3 |
4 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 | % Plot performances
6 | % Adders -> DSP & Multipliers -> Mults
7 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 |
9 | % Data
10 | constraints = [40 35 30 25 20 17 16];
11 | data = [21.383 22.800 25.780 21.632 19.973 17.000 16.000];
12 |
13 | % Plot
14 | plot_exp(constraints,data);
15 |
16 |
17 |
18 |
19 |
20 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
21 | % Plot performances
22 | % Adders -> Fabric & Multipliers -> LUTs
23 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24 |
25 | % Data
26 | constraints = [40 35 30 25 20];
27 | data = [24.487 24.110 24.067 0 0];
28 |
29 | % Plot
30 | plot_exp(constraints,data);
31 |
32 |
33 |
34 |
35 |
36 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37 | % Plot performances
38 | % Adders -> Fabric & Multipliers -> Mults
39 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40 |
41 | % Data
42 | constraints = [40 35 30 25 20 17 16];
43 | data = [21.383 22.800 25.780 21.632 19.973 17.000 16.000];
44 |
45 | % Plot
46 | plot_exp(constraints,data);
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/modulator.m:
--------------------------------------------------------------------------------
1 | function [out_th] = modulator(sn_re,sn_im,cos,sin,plot_data)
2 | % MODULATOR Plot the ideal result and the computed theoretical
3 | % output of the modulator block.
4 | %
5 | % See also RESCALE_MOD, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( ...
14 | size(sn_re) == size(sn_im) == size(cos) == size(sin) ...
15 | );
16 | if(sizeCheck == 0)
17 | displays('Error - MODULATOR: wrong arguments size');
18 | return;
19 | elseif(size(sn_re,2) ~= 1)
20 | displays('Error - MODULATOR: inputs must be column vectors');
21 | return;
22 | end
23 |
24 | % Initialize arguments
25 | switch(nargin)
26 | case 5
27 | display = plot_data;
28 | case 4
29 | display = 1;
30 | end
31 |
32 |
33 | % Compute theoretical values
34 | out_th = rescale_mod(sn_re .* cos - sn_im .* sin);
35 |
36 |
37 | % Plot
38 | if(display)
39 | % Plot out_th
40 | plot_single(out_th','Modulator','pro');
41 | end
42 |
43 | end
44 |
45 |
46 | function y = rescale_mod(x)
47 | % RESCALE_FFT Rescale the MATLAB's modulator output to match the
48 | % experimental rescaling.
49 | %
50 | % See also MODULATOR.
51 | %
52 | % AUTHOR Sonnino Alberto.
53 | % VERSION 15.8.0
54 |
55 |
56 |
57 | y = x .*2^(-16);
58 |
59 | end
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/transmitter.m:
--------------------------------------------------------------------------------
1 | function [out_model] = transmitter(I,Q,out,plot_data)
2 | % TRANSMITTER Plot the experimental result and the computed theoretical
3 | % output of the select inpur set of the transmitter block.
4 | %
5 | % See also QAM_MAPPING, DFT, SRRC_FILTER, IDFT, MODULATOR, PLOT_COMP,
6 | % PLOT_SINGLE.
7 | %
8 | % AUTHOR Sonnino Alberto.
9 | % VERSION 1.0.1
10 |
11 |
12 |
13 | % Check argument's size
14 | sizeCheck =( size(I) == size(Q) ) & ( size(I) == size(out) );
15 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
16 | display('Error - TRANSMITTER: wrong arguments size');
17 | return;
18 | end
19 |
20 | % Initialize arguments
21 | switch(nargin)
22 | case 4
23 | elem = plot_data;
24 | case 3
25 | elem = 1;
26 | end
27 |
28 |
29 | % Compute theoretical values
30 | [tmp1, tmp2] = QAM_mapper(I,Q,0);
31 | [tmp1, tmp2] = DFT(tmp1,tmp2,tmp1,tmp1,0);
32 | [tmp1, tmp2] = SRRC_filter(tmp1,tmp2,tmp1,tmp1,0);
33 | [tmp1, tmp2] = IDFT(tmp1,tmp2,tmp1,tmp1,0);
34 | out_model = modulator(tmp1,tmp2,out,0);
35 |
36 |
37 | % Plot
38 | if((elem <= size(I,1)) && (elem > 0))
39 | % Plot out and out_model
40 | plot_comp(out(elem,:),out_model(elem,:),'Data','MATLAB','Transmitter Output');
41 |
42 | % Plot the error between xk_re and xk_re_th
43 | plot_single(abs(out(elem,:)-out_model(elem,:)),'Transmitter Output Error','error');
44 |
45 | end
46 |
47 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/view/package-summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | view
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | Package view
34 |
35 |
36 |
37 |
38 | |
39 | Class Summary |
40 |
41 |
42 | | GeneralPanel |
43 | Panel allowing advanved use of the application. |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/overview-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Overview List (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
26 |
27 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Generated Documentation (Untitled)
9 |
10 |
21 |
23 |
24 |
37 |
38 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* Javadoc style sheet */
2 |
3 | /* Define colors, fonts and other style attributes here to override the defaults */
4 |
5 | /* Page background color */
6 | body { background-color: #FFFFFF; color:#000000 }
7 |
8 | /* Headings */
9 | h1 { font-size: 145% }
10 |
11 | /* Table colors */
12 | .TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
13 | .TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
14 | .TableRowColor { background: #FFFFFF; color:#000000 } /* White */
15 |
16 | /* Font used in left-hand frame lists */
17 | .FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
18 | .FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
19 | .FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
20 |
21 | /* Navigation bar fonts and colors */
22 | .NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
23 | .NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
24 | .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
25 | .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
26 |
27 | .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
28 | .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
29 |
30 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/Generator.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Abstract class Generator - Ground of all coefficients-generator class
6 | *
7 | * @author Alberto Sonnino
8 | * @version 4.0.1
9 | */
10 | public abstract class Generator
11 | {
12 | protected int size;
13 | protected double RescFactor;
14 |
15 | public Generator(int size){
16 | // initialize instance variables
17 | setSize(size);
18 | this.RescFactor = 1;
19 | }
20 |
21 | public Generator(){
22 | // initialize instance variables
23 | setSize(0);
24 | this.RescFactor = 1;
25 | }
26 |
27 | /**
28 | * @return the size of the transform
29 | */
30 | public int getSize()
31 | {
32 | return size;
33 | }
34 | /**
35 | * @param size the new size
36 | * @return -
37 | */
38 | public void setSize(int size)
39 | {
40 | this.size = (size < 0) ? 0 : size;
41 | }
42 |
43 | /**
44 | * @return the rescale factor
45 | */
46 | public double getRescFactor()
47 | {
48 | return RescFactor;
49 | }
50 | /**
51 | * @param RescFactor the rescale factor to apply
52 | * @return -
53 | */
54 | public abstract void rescale(double RescFactor);
55 |
56 | /**
57 | * @param RescFactor the applied rescale factor
58 | * @return -
59 | */
60 | protected void updateRescFactor(double newRescFactor){
61 | this.RescFactor = this.RescFactor * newRescFactor;
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/SRRC_filter.m:
--------------------------------------------------------------------------------
1 | function [Y_re_th, Y_im_th] = SRRC_filter(X_re,X_im,H,plot_data)
2 | % SRRC_FILTER Plot the ideal result and the computed theoretical output of
3 | % the SRRC filter block.
4 | %
5 | % See also RESCALE_FILTER, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( ...
14 | size(X_re) == size(X_im) == size(H) ...
15 | );
16 | if(sizeCheck == 0)
17 | displays('Error - SRRC_FILTER: wrong arguments size');
18 | return;
19 | elseif(size(X_re,2) ~= 1)
20 | displays('Error - SRRC_FILTER: inputs must be column vectors');
21 | return;
22 | end
23 |
24 | % Initialize arguments
25 | switch(nargin)
26 | case 4
27 | display = plot_data;
28 | case 3
29 | display = 1;
30 | end
31 |
32 |
33 | % Compute theoretical values
34 | Y_re_th = rescale_filter(X_re .* H);
35 | Y_im_th = rescale_filter(X_im .* H);
36 | Y_power_th = sqrt(Y_re_th.^2 + Y_im_th.^2);
37 |
38 |
39 | % Plot
40 | if(display)
41 | % Plot Y_re
42 | plot_single(Y_re_th','Filter - Real Part','pro');
43 | % Plot Y_im
44 | plot_single(Y_im_th','Filter - Imag Part','pro');
45 | % Plot Y_power_th
46 | plot_single(Y_power_th','Filter - Power','pro');
47 | end
48 |
49 | end
50 |
51 |
52 | function y = rescale_filter(x)
53 | % RESCALE_FFT Rescale the MATLAB's filter output to match the experimental
54 | % rescaling.
55 | %
56 | % See also FILTER.
57 | %
58 | % AUTHOR Sonnino Alberto.
59 | % VERSION 1.0.1
60 |
61 |
62 |
63 | y = x .*2^(-15);
64 |
65 | end
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/DFT.m:
--------------------------------------------------------------------------------
1 | function [xk_re_th, xk_im_th] = DFT(I,Q,plot_data)
2 | % FFT Plot the ideal result and the computed theoretical output of the FFT
3 | % block.
4 | %
5 | % See also RESCALE_FFT, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( size(I) == size(Q) );
14 | if(sizeCheck == 0)
15 | displays('Error: - DFT wrong arguments size');
16 | return;
17 | elseif(size(I,2) ~= 1)
18 | displays('Error - DFT: inputs must be column vectors');
19 | return;
20 | end
21 |
22 | % Initialize arguments
23 | switch(nargin)
24 | case 3
25 | display = plot_data;
26 | case 2
27 | display = 1;
28 | end
29 |
30 |
31 | % Compute theoretical values
32 | FFT_SIZE = 16;
33 | xk_th = zeros(size(I));
34 |
35 | for k=1:(size(I,1)/FFT_SIZE)
36 | index = 1+FFT_SIZE*(k-1):FFT_SIZE*k;
37 | xk_th(index,1) = fft(I(index,1)+1i*Q(index,1),FFT_SIZE);
38 | end
39 |
40 | xk_th = rescale_FFT(xk_th);
41 | xk_re_th = real(xk_th);
42 | xk_im_th = imag(xk_th);
43 | xk_power_th = sqrt(xk_re_th.^2 + xk_im_th.^2);
44 |
45 |
46 | % Plot
47 | if(display)
48 | % Plot xk_re_th
49 | plot_single(xk_re_th','DFT - Real Part','pro');
50 | % Plot xk_im_th
51 | plot_single(xk_im_th','DFT - Imag Part','pro');
52 | % Plot xk_power_th
53 | plot_single(xk_power_th','DFT - Power','pro');
54 | end
55 |
56 | end
57 |
58 |
59 | function y = rescale_FFT(x)
60 | % RESCALE_FFT Rescale the MATLAB's fft output to match the experimental
61 | % rescaling.
62 | %
63 | % See also FFT.
64 | %
65 | % AUTHOR Sonnino Alberto.
66 | % VERSION 1.0.1
67 |
68 |
69 |
70 | y = x .*2^(-5);
71 |
72 | end
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/IDFT.m:
--------------------------------------------------------------------------------
1 | function [sn_re_th, sn_im_th] = IDFT(Y_re,Y_im,plot_data)
2 | % IFFT Plot the ideal result and the computed theoretical output of the
3 | % IFFT block.
4 | %
5 | % See also RESCALE_IFFT, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( size(Y_re) == size(Y_im) );
14 | if(sizeCheck == 0)
15 | displays('Error - IDFT: wrong arguments size');
16 | return;
17 | elseif(size(Y_re,2) ~= 1)
18 | displays('Error - IDFT: inputs must be column vectors');
19 | return;
20 | end
21 |
22 | % Initialize arguments
23 | switch(nargin)
24 | case 3
25 | display = plot_data;
26 | case 2
27 | display = 1;
28 | end
29 |
30 |
31 | % Compute theoretical values
32 | IFFT_SIZE = 16;
33 | sn_th = zeros(size(Y_re));
34 |
35 | for n=1:(size(Y_re,1)/IFFT_SIZE)
36 | index = 1+IFFT_SIZE*(n-1):IFFT_SIZE*n;
37 | sn_th(index,1) = ifft(Y_re(index,1)+1i*Y_im(index,1),IFFT_SIZE);
38 | end
39 |
40 | sn_th = rescale_IFFT(sn_th);
41 | sn_re_th = real(sn_th);
42 | sn_im_th = imag(sn_th);
43 | sn_power_th = sqrt(sn_re_th.^2 + sn_im_th.^2);
44 |
45 |
46 | % Plot
47 | if(display)
48 | % Plot sn_re
49 | plot_single(sn_re_th','IDFT - Real Part','pro');
50 | % Plot sn_im
51 | plot_single(sn_im_th','IDFT - Imag Part','pro');
52 | % Plot sn_power_th
53 | plot_single(sn_power_th','IDFT - Power','pro');
54 | end
55 |
56 | end
57 |
58 |
59 | function y = rescale_IFFT(x)
60 | % RESCALE_IFFT Rescale the MATLAB's fft output to match the experimental
61 | % rescaling.
62 | %
63 | % See also IFFT.
64 | %
65 | % AUTHOR Sonnino Alberto.
66 | % VERSION 1.0.1
67 |
68 |
69 |
70 | y = x .*2^(-5) .*2^4;
71 |
72 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/data/package-frame.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | data (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | data
21 |
42 |
43 |
44 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/Const.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Class containing the global constant fields.
6 | *
7 | * @author Sonnino Alberto
8 | * @version 1.1.1
9 | */
10 | public class Const
11 | {
12 | // general constants
13 | public static final String NAME = "FQM Utility";
14 | public static final String VERSION = "4.1.1";
15 | public static final String AUTHOR = "Sonnino Alberto";
16 |
17 |
18 | // default general parameters
19 | public static final String VERILOG_EXTENSION = ".v";
20 | public static final int DEFAULT_PRECISION = 16;
21 |
22 | // default DFT parameters
23 | public static final String DEFAULT_DFT_MODULENAME = "dft_coeff";
24 | public static final int DEFAULT_DFT_SIZE = 16;
25 | public static final double DEFAULT_DFT_RESC_FACTOR = Math.pow(2,14);
26 |
27 | // default filter parameters
28 | public static final String DEFAULT_FILTER_MODULENAME = "filter_coeff";
29 | public static final int DEFAULT_FILTER_SIZE = 16;
30 | public static final double DEFAULT_FILTER_RESC_FACTOR = Math.pow(2,15);
31 | public static final double[] DEFAULT_FILTER_COEFF = {
32 | 0.022507907903927645,
33 | 0.028298439380057477,
34 | -0.076801948979409798,
35 | -0.037500771921555154,
36 | 0.3076724792547561,
37 | 0.54098593171027443,
38 | 0.3076724792547561,
39 | -0.037500771921555154,
40 | -0.076801948979409798,
41 | 0.028298439380057477,
42 | 0.022507907903927645,
43 | };
44 |
45 | // default carriers parameters
46 | public static final String DEFAULT_CARRIERS_MODULENAME = "carriers";
47 | public static final int DEFAULT_INPUT_NUMBER = 16;
48 | public static final double DEFAULT_CARRIERS_FREQUENCY = 100; // Hertz
49 | public static final double DEFAULT_CARRIERS_RESC_FACTOR = Math.pow(2,14);
50 | }
51 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # fourier-transmitter
2 | [](https://github.com/asonnino/fourier-transmitter/blob/master/LICENSE)
3 |
4 | A variable FPGA-based QAM transmitter with scalable mixed time and frequency domain signal processing. Details and explanations can be found in the [paper](https://sonnino.com/papers/figuli2016variable.pdf).
5 |
6 | The flexibility of Field Programmable Gate Arrays (FPGAs) as well as their parallel processing capabilities make them a good choice for digital signal processing in communication systems. However, today, further improvements in performance hang in mid-air as we run into the frequency wall and FPGA based devices are clocked below 1GHz. New methodologies which can cater performance optimization within the frequency wall limitation become highly essential. In this context, efficient modulation techniques like Quadrature Amplitude Modulation (QAM) and mixed time and frequency domain approach have been utilized in this paper to employ a generic scalable FPGA based QAM transmitter with the filter parallelization being executed in mixed domain. The system developed in this paper achieves a throughput of 4Gb/s for QAM-16 format with a clock frequency as low as 62.5MHz, thereby, paves down a promising methodology for applications where having higher clock frequencies is a hard limit.
7 |
8 | A link to the full paper is available at the following address: [https://sonnino.com/papers/figuli2016variable.pdf](https://sonnino.com/papers/figuli2016variable.pdf).
9 |
10 | This project is the result of my master thesis at the [Karlsruhe Institute of Technologies (KIT)](http://kit.edu), and is available [here](https://sonnino.com/theses/kit-master.pdf).
11 |
12 | ## Edits
13 | An updated paper integrating forward error correction and achieving better performance is available [here](https://sonnino.com/papers/figuli2017generic.pdf).
14 |
15 | ## License
16 | [The BSD license](https://opensource.org/licenses/BSD-3-Clause)
17 |
--------------------------------------------------------------------------------
/MATLAB/signals_parallel.m:
--------------------------------------------------------------------------------
1 | function [...
2 | data_I, data_Q, data_xk_re, data_xk_im, data_Y_re, data_Y_im,...
3 | data_sn_re, data_sn_im, data_out ...
4 | ] = signals_parallel(...
5 | input_I, input_Q, input_xk_re, input_xk_im, input_Y_re, input_Y_im, ...
6 | input_sn_re, input_sn_im, input_out,...
7 | separator...
8 | )
9 | % SIGNALS_PARALLEL loads signals.
10 | %
11 | %
12 | % AUTHOR Sonnino Alberto.
13 | % VERSION 1.2.0
14 |
15 |
16 |
17 | % Initialize parameters
18 | switch(nargin)
19 | case 10
20 | filename_I = input_I;
21 | filename_Q = input_Q;
22 | filename_xk_re = input_xk_re;
23 | filename_xk_im = input_xk_im;
24 | filename_Y_re = input_Y_re;
25 | filename_Y_im = input_Y_im;
26 | filename_sn_re = input_sn_re;
27 | filename_sn_im = input_sn_im;
28 | filename_out = input_out;
29 | delimiter = separator;
30 | case 1
31 | delimiter = separator;
32 | case 0
33 | filename_I = 'FQM_parallel_data_dec_I.txt';
34 | filename_Q = 'FQM_parallel_data_dec_Q.txt';
35 | filename_xk_re = 'FQM_parallel_data_dec_xk_re.txt';
36 | filename_xk_im = 'FQM_parallel_data_dec_xk_im.txt';
37 | filename_Y_re = 'FQM_parallel_data_dec_Y_re.txt';
38 | filename_Y_im = 'FQM_parallel_data_dec_Y_im.txt';
39 | filename_sn_re = 'FQM_parallel_data_dec_sn_re.txt';
40 | filename_sn_im = 'FQM_parallel_data_dec_sn_im.txt';
41 | filename_out = 'FQM_parallel_data_dec_out.txt';
42 | delimiter = ',';
43 | end
44 |
45 | % Import
46 | data_I = importdata(filename_I,delimiter);
47 | data_Q = importdata(filename_Q,delimiter);
48 | data_xk_re = importdata(filename_xk_re,delimiter);
49 | data_xk_im = importdata(filename_xk_im,delimiter);
50 | data_Y_re = importdata(filename_Y_re,delimiter);
51 | data_Y_im = importdata(filename_Y_im,delimiter);
52 | data_sn_re = importdata(filename_sn_re,delimiter);
53 | data_sn_im = importdata(filename_sn_im,delimiter);
54 | data_out = importdata(filename_out,delimiter);
55 |
56 | end
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/DFT.m:
--------------------------------------------------------------------------------
1 | function [xk_re_th, xk_im_th] = DFT(I,Q,xk_re,xk_im,plot_data)
2 | % FFT Plot the experimental result and the computed theoretical output of
3 | % a selected input of the DFT block.
4 | %
5 | % See also RESCALE_DFT, PLOT_COMP, PLOT_SINGLE, GENERATE_FFT_COEFF.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.2.0
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( size(I) == size(Q) ) & ( size(xk_re) == size(xk_im) ) ...
14 | & ( size(xk_re) == size(I) );
15 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
16 | display('Error - DFT: wrong arguments size');
17 | return;
18 | end
19 |
20 | % Initialize arguments
21 | switch(nargin)
22 | case 5
23 | elem = plot_data;
24 | case 4
25 | elem = 1;
26 | end
27 |
28 |
29 | % Compute theoretical values
30 | FFT_SIZE = 16;
31 | n_samples = size(I,1);
32 | xk_th = zeros(size(I));
33 |
34 | [ccos,csin] = generate_DFT_coeff(FFT_SIZE);
35 |
36 | for i=1:n_samples
37 | for k=1:FFT_SIZE
38 | xk_th(i,k) = sum( ...
39 | (I(i,:)+1i*Q(i,:)) .* (ccos(k,:)-1i*csin(k,:)) ...
40 | );
41 | end
42 | end
43 |
44 | xk_re_th = rescale_DFT(real(xk_th));
45 | xk_im_th = rescale_DFT(imag(xk_th));
46 |
47 |
48 | % Plot
49 | if((elem <= n_samples) && (elem > 0))
50 | % Plot xk_re and xk_re_th
51 | plot_comp(xk_re(elem,:),xk_re_th(elem,:),'Data','MATLAB','DFT - Real Part');
52 | % Plot xk_im and xk_im_th
53 | plot_comp(xk_im(elem,:),xk_im_th(elem,:),'Data','MATLAB','DFT - Imag Part');
54 |
55 | % Plot the error between xk_re and xk_re_th
56 | plot_single(abs(xk_re(elem,:)-xk_re_th(elem,:)),'DFT Error - Real Part','error');
57 | % Plot the error between xk_im and xk_im_th
58 | plot_single(abs(xk_im(elem,:)-xk_im_th(elem,:)),'DFT Error - Imag Part','error');
59 | end
60 |
61 | end
62 |
63 |
64 | function y = rescale_DFT(x)
65 | % RESCALE_FFT Rescale the MATLAB's DFT output to match the experimental
66 | % rescaling.
67 | %
68 | % See also DFT.
69 | %
70 | % AUTHOR Sonnino Alberto.
71 | % VERSION 1.0.1
72 |
73 |
74 |
75 | y = x .*2^(-3);
76 |
77 | end
78 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/IDFT.m:
--------------------------------------------------------------------------------
1 | function [sn_re_th, sn_im_th] = IDFT(Y_re,Y_im,sn_re,sn_im,plot_data)
2 | % IFFT Plot the experimental result and the computed theoretical output of
3 | % a selected input of the IDFT block.
4 | %
5 | % See also RESCALE_IDFT, PLOT_COMP, PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.2.0
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck =( size(Y_re) == size(Y_im) ) & ( size(sn_re) == size(sn_im) )...
14 | & ( size(Y_re) == size(sn_re) );
15 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
16 | display('Error - IDFT: wrong arguments size');
17 | return;
18 | end
19 |
20 | % Initialize arguments
21 | switch(nargin)
22 | case 5
23 | elem = plot_data;
24 | case 4
25 | elem = 1;
26 | end
27 |
28 |
29 | % Compute theoretical values
30 | FFT_SIZE = 16;
31 | n_samples = size(Y_re,1);
32 | sn_th = zeros(size(Y_re));
33 |
34 | [ccos,csin] = generate_DFT_coeff(FFT_SIZE);
35 |
36 | for i=1:n_samples
37 | for k=1:FFT_SIZE
38 | sn_th(i,k) = (1/FFT_SIZE) * sum( ...
39 | (Y_re(i,:)+1i*Y_im(i,:)) .* (ccos(k,:)+1i*csin(k,:)) ...
40 | );
41 | end
42 | end
43 |
44 | sn_re_th = rescale_IDFT(real(sn_th));
45 | sn_im_th = rescale_IDFT(imag(sn_th));
46 |
47 |
48 | % Plot
49 | if((elem <= n_samples) && (elem > 0))
50 | % Plot xk_re and xk_re_th
51 | plot_comp(sn_re(elem,:),sn_re_th(elem,:),'Data','MATLAB','IDFT - Real Part');
52 | % Plot xk_im and xk_im_th
53 | plot_comp(sn_im(elem,:),sn_im_th(elem,:),'Data','MATLAB','IDFT - Imag Part');
54 |
55 | % Plot the error between xk_re and xk_re_th
56 | plot_single(abs(sn_re(elem,:)-sn_re_th(elem,:)),'IDFT Error - Real Part','error');
57 | % Plot the error between xk_im and xk_im_th
58 | plot_single(abs(sn_im(elem,:)-sn_im_th(elem,:)),'IDFT Error - Imag Part','error');
59 | end
60 |
61 | end
62 |
63 |
64 | function y = rescale_IDFT(x)
65 | % RESCALE_DFT Rescale the MATLAB's IDFT output to match the experimental
66 | % rescaling.
67 | %
68 | % See also DFT.
69 | %
70 | % AUTHOR Sonnino Alberto.
71 | % VERSION 1.0.1
72 |
73 |
74 |
75 | y = x .*2^(-3) .*2^(4);
76 |
77 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/DftCoeff.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Class describing the DFT coefficients.
6 | *
7 | * @author Sonnino Alberto
8 | * @version 1.1.1
9 | */
10 | public class DftCoeff extends Generator
11 | {
12 | private double[][] ccos, csin;
13 |
14 | /**
15 | * Constructor for objects of class DftCoeff
16 | */
17 | public DftCoeff(int size)
18 | {
19 | // call constructor of supercalss
20 | super(size);
21 |
22 | // initialize instance variables
23 | ccos = new double[getSize()][getSize()];
24 | csin = new double[getSize()][getSize()];
25 |
26 | // generate sin and cos coefficients
27 | for(int k=0; k < size; k++){
28 | for(int n=0; n < size; n++){
29 | this.ccos[k][n] = Math.cos(2 * Math.PI * k * n / getSize());
30 | this.csin[k][n] = Math.sin(2 * Math.PI * k * n / getSize());
31 | }
32 | }
33 | }
34 |
35 | /**
36 | * @return the cos coefficients
37 | */
38 | public double[][] getCcos()
39 | {
40 | return ccos;
41 | }
42 | /**
43 | * @param ccos the cos FFT coefficients
44 | * @return -
45 | */
46 | public void setCcos(double[][] ccos)
47 | {
48 | this.ccos = ccos;
49 | }
50 |
51 | /**
52 | * @return the sin coefficients
53 | */
54 | public double[][] getCsin()
55 | {
56 | return csin;
57 | }
58 | /**
59 | * @param csin the cos FFT coefficients
60 | * @return -
61 | */
62 | public void setCsin(double[][] csin)
63 | {
64 | this.csin = csin;
65 | }
66 |
67 | /**
68 | * @param RescFactor the rescale factor to apply
69 | * @return -
70 | */
71 | public void rescale(double RescFactor)
72 | {
73 | // rescale
74 | for(int k=0; k < getSize(); k++){
75 | for(int n=0; n < getSize(); n++){
76 | getCcos()[k][n] = getCcos()[k][n] * RescFactor;
77 | getCsin()[k][n] = getCsin()[k][n] * RescFactor;
78 | }
79 | }
80 |
81 | // update the rescale factor
82 | updateRescFactor(RescFactor);
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/MATLAB/Simple Transmitter/Ideal Transmitter/testbench.m:
--------------------------------------------------------------------------------
1 | function [MATLAB_data,out_model] = testbench(plot_data)
2 | % TESTBENCH Simulate completely the QAM modulator by plotting and
3 | % outputing the ideal value.
4 | %
5 | % See also QAM_MAPPING, FFT, SRRC_FILTER, IFFT, MODULATOR, TRANSMITTER,
6 | % FIND_OFFSET.
7 | %
8 | % AUTHOR Sonnino Alberto.
9 | % VERSION 1.0.1
10 |
11 |
12 |
13 | close all;
14 |
15 | % Initialize arguments
16 | switch(nargin)
17 | case 1
18 | display = plot_data;
19 | case 0
20 | display = 1;
21 | end
22 |
23 | % Import signals
24 | data = signals();
25 | DATA_NUMBER = 80; % !!! must be a multiple of 16
26 |
27 | QAM_MAPPING_OFFSET = find_offset(data(:,1));
28 | I = data((QAM_MAPPING_OFFSET:QAM_MAPPING_OFFSET+DATA_NUMBER-1),3);
29 | Q = data((QAM_MAPPING_OFFSET:QAM_MAPPING_OFFSET+DATA_NUMBER-1),4);
30 |
31 | FFT_OFFSET = min(find_offset(data(:,5)),find_offset(data(:,6)));
32 | H = data((FFT_OFFSET:FFT_OFFSET+DATA_NUMBER-1),7);
33 |
34 | IFFT_OFFSET = min(find_offset(data(:,10)),find_offset(data(:,11)));
35 | cos = data((IFFT_OFFSET:IFFT_OFFSET+DATA_NUMBER-1),12);
36 | sin = data((IFFT_OFFSET:IFFT_OFFSET+DATA_NUMBER-1),13);
37 |
38 |
39 |
40 | % QAM mapping
41 | [I,Q] = QAM_mapper(I,Q,display);
42 |
43 | % FFT
44 | [xk_re_th, xk_im_th] = DFT(I,Q,display);
45 |
46 | % Filter
47 | [Y_re_th, Y_im_th] = SRRC_filter(xk_re_th,xk_im_th,H,display);
48 |
49 | % IFFT
50 | [sn_re_th, sn_im_th] = IDFT(Y_re_th,Y_im_th,display);
51 |
52 | % Modulator
53 | [out_th] = modulator(sn_re_th,sn_im_th,cos,sin,display);
54 |
55 | % Transmitter
56 | [out_model] = transmitter(I,Q,H,cos,sin,display);
57 |
58 |
59 |
60 | % Output Results
61 | MATLAB_data = [...
62 | I,Q,xk_re_th,xk_im_th,Y_re_th,Y_im_th,sn_re_th,sn_im_th,out_th ...
63 | ];
64 |
65 |
66 | end
67 |
68 | function offset = find_offset(x)
69 | % FIND OFFSET determine the offset introduced by hardware latency.
70 | %
71 | % See also TRANSMITTER.
72 | %
73 | % AUTHOR Sonnino Alberto.
74 | % VERSION 1.0.1
75 |
76 |
77 |
78 | % Check input format
79 | if(size(x,2) ~= 1)
80 | display('Error - TESTBENCH: input must be a column vector');
81 | return;
82 | end
83 |
84 | % Determin offset
85 | for i=1:size(x,1)
86 | if(x(i,1) ~= 0)
87 | offset = i;
88 | return;
89 | end
90 | end
91 |
92 | end
--------------------------------------------------------------------------------
/MATLAB/plot_comp.m:
--------------------------------------------------------------------------------
1 | function [] = plot_comp(y1,y2,legend1,legend2,plot_title)
2 | % PLOT_COMP Plot two signals and their spline interpolations on a standard
3 | % representation.
4 | %
5 | % See also PLOT_SINGLE.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 | % Format check
12 | if(size(y1) ~= size(y2))
13 | display('Error - PLOT_COMP: inputs must have the same size');
14 | return;
15 | elseif(size(y1,1) ~= 1 || size(y1,2) < 2)
16 | display('Error - PLOT_COMP: inputs must be vectors');
17 | return;
18 | end
19 |
20 | % Define axis and compute splines
21 | x = 0 : 1 : (size(y1,2)-1);
22 | xx = 0 : 0.1 : (size(y1,2)-1);
23 | yy1 = spline(x,y1,xx);
24 | yy2 = spline(x,y2,xx);
25 |
26 | % Create figure
27 | figure1 = figure;
28 |
29 | % Create axes
30 | axes1 = axes('Parent',figure1,...
31 | 'ZColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
32 | 'YColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
33 | 'XColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
34 | 'FontSize',18);
35 | grid(axes1,'on');
36 | hold(axes1,'on');
37 |
38 | % Create title
39 | title(plot_title,'FontSize',24,'FontName','Arial',...
40 | 'Color',[0.243137255311012 0.243137255311012 0.243137255311012],...
41 | 'FontSize',24);
42 |
43 | % Create spline plots
44 | % plot(xx,yy1,'DisplayName','Input','LineWidth',2,...
45 | % 'Color',[0.82352941 0.3254902 0.23529412]); % Orange
46 | % plot(xx,yy1,'DisplayName','Input','LineWidth',2,...
47 | % 'Color',[0.13725490 0.58431373 0.49019608]); % KIT green
48 | plot(xx,yy2,'DisplayName','Input','LineWidth',2,...
49 | 'Color',[0 0 0]);
50 | plot(xx,yy1,'DisplayName','Input','LineWidth',1,'LineStyle','--',...
51 | 'Color',[0 0 0]);
52 |
53 | % Create data plot
54 | % plot(x,y1,'MarkerSize',5,'Marker','*','LineStyle','none',...
55 | % 'Color',[0.82352941 0.3254902 0.23529412]); % Orange
56 | % plot(x,y1,'MarkerSize',5,'Marker','*','LineStyle','none',...
57 | % 'Color',[0.13725490 0.58431373 0.49019608]); % KIT green
58 | plot(x,y2,'MarkerSize',6,'Marker','*','LineStyle','none',...
59 | 'Color',[0 0 0]);
60 | plot(x,y1,'MarkerSize',6,'Marker','*','LineStyle','none',...
61 | 'Color',[0 0 0]);
62 |
63 | % Create legend
64 | legend(legend1,legend2,'Location','northwest');
65 | xlabel('samples')
66 | ylabel('amplitude')
67 |
68 | end
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/SRRC_filter.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: SRRC_filter
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // Implement a parallel SRRC filter in frequency domain.
14 | //
15 | // Dependencies:
16 | // - Multiplier 11.2
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | //////////////////////////////////////////////////////////////////////////////////
23 | module SRRC_filter #(
24 | /* Parameters */
25 | parameter N = 16 // Number of parallel inputs
26 | )(
27 | /* Input and output ports */
28 | input wire clk, // Clock
29 | input wire reset, // Reset
30 | input wire [16*N-1:0] H, // Filter coefficients
31 | input wire [16*N-1:0] X_re, X_im, // Inputs
32 | output wire [16*N-1:0] Y_re, Y_im // Outputs
33 | );
34 |
35 |
36 | /***************************************************************************
37 | * Filter and Resize by 2*(-16)
38 | ***************************************************************************/
39 | genvar i;
40 | generate
41 | for(i=0; i < N; i=i+1) begin
42 | mult mult_filter_inst_re (
43 | .clk(clk), // input clk
44 | .a(X_re[16*i+(16-1):16*i]), // input [15 : 0] a
45 | .b(H[16*(N-1-i)+(16-1):16*(N-1-i)]), // input [15 : 0] b
46 | .sclr(reset), // input sclr
47 | .p(Y_re[16*i+(16-1):16*i]) // output [15 : 0] p
48 | );
49 | mult mult_filter_inst_im (
50 | .clk(clk), // input clk
51 | .a(X_im[16*i+(16-1):16*i]), // input [15 : 0] a
52 | .b(H[16*(N-1-i)+(16-1):16*(N-1-i)]), // input [15 : 0] b
53 | .sclr(reset), // input sclr
54 | .p(Y_im[16*i+(16-1):16*i]) // output [15 : 0] p
55 | );
56 | end
57 | endgenerate
58 |
59 | /***************************************************************************/
60 |
61 |
62 | endmodule
63 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/Process.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Call containing the data processing methods.
6 | *
7 | * @author Sonnino Alberto
8 | * @version 1.0.1
9 | */
10 | public class Process
11 | {
12 | /**
13 | * Convert a signed decimal into a two's complement binary number.
14 | *
15 | * @param dec the decimal number
16 | * @return the String representation of the binary number
17 | */
18 | public static String dec2bin(int dec, int base, boolean bigEndian)
19 | {
20 | // initialize variable
21 | String bin = "";
22 |
23 | // convert
24 | // NOTE: two's complement is automatically handled by the bitwise-AND operator
25 | for(int i=0; i < base; i++){
26 | bin = ( ((1 << i & dec) != 0) ? "1" : "0" ) + bin;
27 | }
28 |
29 | // consider endianness
30 | if(bigEndian){bin = new StringBuffer(bin).reverse().toString();}
31 |
32 | // return
33 | return bin;
34 | }
35 |
36 | /**
37 | *@param x the number to compute the log
38 | *@param base the base of the logarithm
39 | *@return the log of x in the give base
40 | */
41 | public static int log(int x, int base){
42 | return (int) Math.ceil(Math.log(x) / Math.log(base));
43 | }
44 |
45 | /**
46 | * Test the method dec2bin.
47 | */
48 | public static void testDec2bin(){
49 | // declare variables
50 | int dec, base;
51 | boolean twosComplement, bigEndian;
52 |
53 | System.out.println(">>> Start test dec2bin:");
54 |
55 | // Test 1
56 | System.out.println("> Test 1:");
57 | dec = 15;
58 | base = 8;
59 | bigEndian = false;
60 | System.out.println(dec+" = "+dec2bin(dec,base,bigEndian));
61 |
62 | // Test 2
63 | System.out.println("> Test 2:");
64 | dec = -8;
65 | base = 8;
66 | bigEndian = false;
67 | System.out.println(dec+" = "+dec2bin(dec,base,bigEndian));
68 |
69 | // Test 3
70 | System.out.println("> Test 3:");
71 | dec = 15;
72 | base = 8;
73 | bigEndian = true;
74 | System.out.println(dec+"(bigendian) = "+dec2bin(dec,base,bigEndian));
75 |
76 | System.out.println(">>> End test dec2bin\n");
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/SRRC_filter.m:
--------------------------------------------------------------------------------
1 | function [Y_re_th, Y_im_th] = SRRC_filter(X_re,X_im,Y_re,Y_im,plot_data)
2 | % SRRC_FILTER Plot the experimental result and the computed theoretical
3 | % output of a selected input of the SRRC filter block.
4 | %
5 | % See also RESCALE_FILTER, GENERATE_FILTER_COEFF, PLOT_COMP.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.2.0
9 |
10 |
11 |
12 | % Check argument's size
13 | sizeCheck = ( size(X_re) == size(X_im) ) & ( size(Y_re) == size(Y_im) ) ...
14 | & ( size(X_re) == size(Y_re) );
15 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
16 | display('Error - SRRC_FILTER: wrong arguments size');
17 | return;
18 | end
19 |
20 | % Initialize arguments
21 | switch(nargin)
22 | case 5
23 | elem = plot_data;
24 | case 4
25 | elem = 1;
26 | end
27 |
28 |
29 | % Compute theoretical values
30 | H = generate_filter_coeff();
31 |
32 | Y_re_th = zeros(size(X_re));
33 | Y_im_th = zeros(size(X_im));
34 | for i=1:size(X_re,1)
35 | Y_re_th(i,:) = rescale_filter(X_re(i,:) .* H');
36 | Y_im_th(i,:) = rescale_filter(X_im(i,:) .* H');
37 | end
38 |
39 |
40 | % Plot
41 | if((elem <= size(Y_re,1)) && (elem > 0))
42 | % Plot Y_re and Y_re_th
43 | plot_comp(Y_re(elem,:),Y_re_th(elem,:),'Data','MATLAB','Filter - Real Part');
44 | % Plot Y_im and Y_im_th
45 | plot_comp(Y_im(elem,:),Y_im_th(elem,:),'Data','MATLAB','Filter - Imag Part');
46 | end
47 |
48 | end
49 |
50 |
51 | function y = rescale_filter(x)
52 | % RESCALE_FFT Rescale the MATLAB's filter output to match the experimental
53 | % rescaling.
54 | %
55 | % See also FILTER.
56 | %
57 | % AUTHOR Sonnino Alberto.
58 | % VERSION 1.0.1
59 |
60 |
61 |
62 | y = x .*2^(-1);
63 |
64 | end
65 |
66 |
67 | function [H] = generate_filter_coeff()
68 | % GENERATE_FILTER_COEFF Compute the SRRC_FILTER coefficients to manualy
69 | % process the filter operation.
70 | %
71 | % See also SRRC_FILTER.
72 | %
73 | % AUTHOR Sonnino Alberto.
74 | % VERSION 1.1.1
75 |
76 | H = [...
77 | 0.022507907903927645; ...
78 | 0.028298439380057477; ...
79 | -0.076801948979409798; ...
80 | -0.037500771921555154; ...
81 | 0.3076724792547561; ...
82 | 0.54098593171027443; ...
83 | 0.3076724792547561; ...
84 | -0.037500771921555154; ...
85 | -0.076801948979409798; ...
86 | 0.028298439380057477; ...
87 | 0.022507907903927645; ...
88 | 0;...
89 | 0;...
90 | 0;...
91 | 0;...
92 | 0;...
93 | ];
94 |
95 | end
96 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/modulator.m:
--------------------------------------------------------------------------------
1 | function [out_th] = modulator(sn_re,sn_im,out,plot_data)
2 | % MODULATOR Plot the experimental result and the computed theoretical
3 | % output of first input set of the modulator block.
4 | %
5 | % See also RESCALE_MOD, GENERATE_CARRIERS, PLOT_COMP.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.2.0
9 |
10 |
11 | % Check argument's size
12 | sizeCheck =( size(sn_re) == size(sn_im) ) & ( size(sn_re) == size(out) );
13 | if( ~(sizeCheck(1,1) && sizeCheck(1,2)) )
14 | display('Error - MODULATOR: wrong arguments size');
15 | return;
16 | end
17 |
18 | % Initialize arguments
19 | switch(nargin)
20 | case 4
21 | elem = plot_data;
22 | case 3
23 | elem = 1;
24 | end
25 |
26 |
27 | % Compute theoretical values
28 | F = 100;
29 | N = 16;
30 | [cos_carrier,sin_carrier] = generate_carriers(F,N);
31 |
32 | out_th = zeros(size(sn_re));
33 | for i=1:size(sn_re,1)
34 | % calculate index
35 | j = mod(i,size(cos_carrier,1));
36 | index = (j-1)*N+1 : (j-1)*N+1 + (N-1);
37 | % assign output
38 | out_th(i,:) = rescale_mod(...
39 | sn_re(i,:) .* cos_carrier(index,1)' - ...
40 | sn_im(i,:) .* sin_carrier(index,1)'...
41 | );
42 | end
43 |
44 |
45 | % Plot
46 | if((elem <= size(sn_re,1)) && (elem > 0))
47 | % Plot out and out_th
48 | plot_comp(out(elem,:),out_th(elem,:),'Data','MATLAB','Modulator');
49 | end
50 |
51 | end
52 |
53 |
54 | function y = rescale_mod(x)
55 | % RESCALE_FFT Rescale the MATLAB's modulator output to match the
56 | % experimental rescaling.
57 | %
58 | % See also MODULATOR.
59 | %
60 | % AUTHOR Sonnino Alberto.
61 | % VERSION 1.0.1
62 |
63 |
64 |
65 | y = x .*2^(-2);
66 |
67 | end
68 |
69 |
70 | function [cos_carrier,sin_carrier] = generate_carriers(f,n)
71 | % GENERATE_DFT_COEFF Compute the MODULATOR coefficients to manualy process
72 | % the modulation.
73 | %
74 | % See also MODULATOR.
75 | %
76 | % AUTHOR Sonnino Alberto.
77 | % VERSION 1.0.1
78 |
79 | % Number of samples
80 | n_samples = 4*f; % avoid aliasing
81 | for i=0:(n-1)
82 | if(mod(n_samples,n) == 0) % rest of division
83 | break;
84 | end
85 | n_samples = n_samples+1;
86 | end
87 |
88 | % Time specifications:
89 | StopTime = 1/f; % seconds
90 | dt = StopTime/n_samples; % interval between samples
91 | t = (0:dt:StopTime - dt)'; % seconds
92 | % Sine wave:
93 | cos_carrier = cos(2*pi*f*t);
94 | sin_carrier = sin(2*pi*f*t);
95 |
96 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/Chooser.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import javax.swing.JFileChooser;
4 | import javax.swing.filechooser.FileNameExtensionFilter;
5 | import javax.swing.JComponent;
6 |
7 | import java.io.File;
8 |
9 | /**
10 | * Write a description of class MenuApplication here.
11 | *
12 | * @author ALF CORP
13 | * @version 2012
14 | */
15 | public class Chooser extends JFileChooser
16 | {
17 | private int status;
18 |
19 | public Chooser(){
20 | super();
21 | init("", null, this.FILES_ONLY);
22 | }
23 | public Chooser(String[] chooseTab) {
24 | super();
25 | init("", chooseTab, this.FILES_ONLY);
26 | }
27 | public Chooser(String choose) {
28 | super();
29 | init(choose, null, this.FILES_ONLY);
30 | }
31 | public Chooser(String choose, String[] chooseTab) {
32 | super();
33 | init(choose, chooseTab, this.FILES_ONLY);
34 | }
35 | public Chooser(int mode) {
36 | super();
37 | init("", null, mode);
38 | }
39 | public Chooser(String choose, String[] chooseTab, int mode) {
40 | super();
41 | init(choose, chooseTab, mode);
42 | }
43 |
44 | public void init(String text, String[] extensions, int mode){
45 | if(extensions != null){this.setFileFilter(new FileNameExtensionFilter(text, extensions));}
46 |
47 | setMode(mode);
48 |
49 | status = -1;
50 | }
51 |
52 | public void setMode(int mode){
53 | this.setFileSelectionMode(mode);
54 | }
55 |
56 | public void show(){
57 | this.status = status = this.showOpenDialog(null);
58 | }
59 | public void show(JComponent component){
60 | this.status = status = this.showOpenDialog(component);
61 | }
62 |
63 | public int getStatus(){
64 | return this.status;
65 | }
66 |
67 | public String getFileName(){
68 | if(this.getSelectedFile() == null || this.getSelectedFile().getName() == null){return null;}
69 | return this.getSelectedFile().getName();
70 | }
71 | public String getFileParent(){
72 | if(this.getSelectedFile() == null || this.getSelectedFile().getParent() == null){return null;}
73 | return this.getSelectedFile().getParent();
74 | }
75 | public String getFilePath(){
76 | if(this.getSelectedFile() == null || this.getSelectedFile().getPath() == null){return null;}
77 | return this.getSelectedFile().getPath();
78 | }
79 |
80 | public boolean isAccepted(){
81 | if (getStatus() == JFileChooser.APPROVE_OPTION) {return true;}
82 | else if (getStatus() == JFileChooser.CANCEL_OPTION) {return false;}
83 | return false;
84 | }
85 | }
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/logfile.txt:
--------------------------------------------------------------------------------
1 | Class documentation
2 | <---- javadoc command: ---->
3 | /Applications/BlueJ.app/Contents/Frameworks/jdk.framework/Versions/A/Contents/Home/bin/javadoc
4 | -author
5 | -version
6 | -nodeprecated
7 | -package
8 | -noindex
9 | -notree
10 | -nohelp
11 | -nonavbar
12 | -source
13 | 1.8
14 | -classpath
15 | /Applications/BlueJ.app/Contents/Resources/Java/bluejcore.jar:/Applications/BlueJ.app/Contents/Resources/Java/junit-4.8.2.jar:/Applications/BlueJ.app/Contents/Resources/Java/userlib/pi4j-core.jar:/Applications/BlueJ.app/Contents/Resources/Java/userlib/pi4j-device.jar:/Applications/BlueJ.app/Contents/Resources/Java/userlib/pi4j-gpio-extension.jar:/Applications/BlueJ.app/Contents/Resources/Java/userlib/pi4j-service.jar:/Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2
16 | -d
17 | /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc
18 | -encoding
19 | UTF-8
20 | -charset
21 | UTF-8
22 | -docletpath
23 | /Applications/BlueJ.app/Contents/Resources/Java/bjdoclet.jar
24 | -doclet
25 | bluej.doclet.doclets.formats.html.HtmlDoclet
26 | /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/view/GeneralPanel.java
27 | <---- end of javadoc command ---->
28 | Loading source file /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/view/GeneralPanel.java...
29 | Constructing Javadoc information...
30 | Standard Doclet version 1.8.0_20
31 | Building tree for all the packages and classes...
32 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/view/GeneralPanel.html...
33 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/view/package-frame.html...
34 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/view/package-summary.html...
35 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/constant-values.html...
36 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/serialized-form.html...
37 | Building index for all the packages and classes...
38 | Building index for all classes...
39 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/allclasses-frame.html...
40 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/allclasses-noframe.html...
41 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/index.html...
42 | Generating /Users/albertosonnino/Mega/Master Thesis/FQM Utilities/FQM Utilities/FQM Utilities 4.0.2/doc/stylesheet.css...
43 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/GUILibrary.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import javax.swing.ImageIcon;
4 | import javax.swing.JComponent;
5 | import javax.swing.Box;
6 | import javax.swing.border.Border;
7 | import javax.swing.border.EmptyBorder;
8 | import javax.swing.border.CompoundBorder;
9 |
10 | /**
11 | * Class containing GUI utilities.
12 | *
13 | * @author Alf Corp
14 | * @version 1.0.1
15 | */
16 | public class GUILibrary
17 | {
18 | /**
19 | * @param enter the path.
20 | * @return return an ImageIcon with the image.
21 | */
22 | public static ImageIcon getImg(String path){
23 | java.net.URL imgURL = GUILibrary.class.getResource(path);
24 | if (imgURL == null) {new Error("File "+path+" not found"); return null;}
25 | return new ImageIcon(imgURL);
26 | }
27 |
28 | /**
29 | * @param enter a JComponent
30 | * @return return an horizontal box with the component at its center
31 | */
32 | public static Box centerComponent(JComponent com){
33 | Box hBox = Box.createHorizontalBox();
34 | hBox.add(Box.createHorizontalGlue());hBox.add(com);hBox.add(Box.createHorizontalGlue());
35 | return hBox;
36 | }
37 |
38 | /**
39 | * @param enter a JComponent
40 | * @return return an horizontal box with the component at its right
41 | */
42 | public static Box centerRightComponent(JComponent com){
43 | Box hBox = Box.createHorizontalBox();
44 | hBox.add(Box.createHorizontalGlue());hBox.add(com);
45 | return hBox;
46 | }
47 | /**
48 | * @param enter a JComponent
49 | * @return return an horizontal box with the component at its right
50 | */
51 | public static Box centerRightComponent(JComponent com, int strut){
52 | Box hBox = Box.createHorizontalBox();
53 | hBox.add(Box.createHorizontalGlue());hBox.add(com);hBox.add(Box.createHorizontalStrut(strut));
54 | return hBox;
55 | }
56 |
57 | /**
58 | * @param enter a JComponent
59 | * @return return an horizontal box with the component at its left
60 | */
61 | public static Box centerLeftComponent(JComponent com){
62 | Box hBox = Box.createHorizontalBox();
63 | hBox.add(com);hBox.add(Box.createHorizontalGlue());
64 | return hBox;
65 | }
66 |
67 | /**
68 | * @param enter a JComponent and the padding distance
69 | * @return return the component with padded borders
70 | */
71 | public static JComponent addBorderPadding(JComponent comp, int p1, int p2, int p3, int p4){
72 | Border border = comp.getBorder(); Border margin = new EmptyBorder(p1,p2,p3,p4);
73 | comp.setBorder(new CompoundBorder(border, margin));
74 | return comp;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/Main.java:
--------------------------------------------------------------------------------
1 | import data.DftCoeff;
2 | import data.Carriers;
3 | import data.FilterCoeff;
4 | import data.Const;
5 | import data.Export;
6 | import data.ProgException;
7 |
8 | import view.GUI;
9 |
10 | /**
11 | * Class containing the main method.
12 | *
13 | * @author Sonnino Alberto
14 | * @version 1.1.1
15 | */
16 | public class Main
17 | {
18 | /**
19 | * Main method
20 | *
21 | * @param args generic input parameters
22 | * @return -
23 | */
24 | public static void main(String[] args)
25 | {
26 | new GUI();
27 | }
28 |
29 | /**
30 | * Run with default parameters
31 | */
32 | public static void runWithDefParameters()
33 | {
34 | /*
35 | * Declare variables
36 | */
37 | String modulename;
38 | String outputfile;
39 |
40 |
41 |
42 | /*
43 | * DFT coefficients
44 | */
45 | // output file
46 | modulename = Const.DEFAULT_DFT_MODULENAME;
47 | outputfile = modulename+Const.VERILOG_EXTENSION;
48 |
49 | // generate coefficients
50 | DftCoeff dftCoeff = new DftCoeff(Const.DEFAULT_DFT_SIZE);
51 |
52 | // rescale
53 | dftCoeff.rescale(Const.DEFAULT_DFT_RESC_FACTOR);
54 |
55 | // export
56 | try{Export.exportForVerilog(dftCoeff, Const.DEFAULT_PRECISION, modulename, outputfile);}
57 | catch(ProgException exc){System.err.println(exc.getMessage());}
58 |
59 |
60 |
61 | /*
62 | * Filter coefficients
63 | */
64 | // output file
65 | modulename = Const.DEFAULT_FILTER_MODULENAME;
66 | outputfile = modulename+Const.VERILOG_EXTENSION;
67 |
68 | // generate coefficients
69 | FilterCoeff filterCoeff = new FilterCoeff(Const.DEFAULT_FILTER_SIZE,Const.DEFAULT_FILTER_COEFF);
70 |
71 | // rescale
72 | filterCoeff.rescale(Const.DEFAULT_FILTER_RESC_FACTOR);
73 |
74 | // export
75 | try{Export.exportForVerilog(filterCoeff, Const.DEFAULT_PRECISION, modulename, outputfile);}
76 | catch(ProgException exc){System.err.println(exc.getMessage());}
77 |
78 |
79 |
80 | /*
81 | * Carriers
82 | */
83 | // output file
84 | modulename = Const.DEFAULT_CARRIERS_MODULENAME;
85 | outputfile = modulename+Const.VERILOG_EXTENSION;
86 |
87 | // generate coefficients
88 | Carriers carriers = new Carriers(Const.DEFAULT_CARRIERS_FREQUENCY, Const.DEFAULT_INPUT_NUMBER);
89 |
90 | // rescale
91 | carriers.rescale(Const.DEFAULT_CARRIERS_RESC_FACTOR);
92 |
93 | // export
94 | try{Export.exportForVerilog(carriers, Const.DEFAULT_PRECISION, modulename, outputfile);}
95 | catch(ProgException exc){System.err.println(exc.getMessage());}
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/MATLAB/Parallel Transmitter/Implemented Transmitter/testbench.m:
--------------------------------------------------------------------------------
1 | function [exp_data,MATLAB_data,out_model] = testbench(plot_data)
2 | % TESTBENCH Simulate completely the QAM modulator by plotting and
3 | % outputing the experimental data and the computed theoretical
4 | % values.
5 | %
6 | % See also QAM_MAPPING, FFT, SRRC_FILTER, IFFT, MODULATOR, TRANSMITTER,
7 | % FIND_OFFSET, SIGNAL_PARALLEL.
8 | %
9 | % AUTHOR Sonnino Alberto.
10 | % VERSION 1.2.1
11 |
12 |
13 |
14 | close all;
15 |
16 | % Initialize arguments
17 | switch(nargin)
18 | case 1
19 | elem = plot_data;
20 | case 0
21 | elem = 1;
22 | end
23 |
24 |
25 | % Import signals
26 | [
27 | data_I, data_Q, data_xk_re, data_xk_im, data_Y_re, data_Y_im, ...
28 | data_sn_re, data_sn_im, data_out...
29 | ] = signals_parallel();
30 | DATA_NUMBER = 20;
31 |
32 | QAM_MAPPING_OFFSET = 1;
33 | I = data_I((QAM_MAPPING_OFFSET:QAM_MAPPING_OFFSET+DATA_NUMBER-1),:);
34 | Q = data_Q((QAM_MAPPING_OFFSET:QAM_MAPPING_OFFSET+DATA_NUMBER-1),:);
35 |
36 | FFT_OFFSET = min(find_offset(data_xk_re),find_offset(data_xk_im));
37 | xk_re = data_xk_re((FFT_OFFSET:FFT_OFFSET+DATA_NUMBER-1),:);
38 | xk_im = data_xk_im((FFT_OFFSET:FFT_OFFSET+DATA_NUMBER-1),:);
39 |
40 | FILTER_OFFSET = min(find_offset(data_Y_re),find_offset(data_Y_im));
41 | Y_re = data_Y_re((FILTER_OFFSET:FILTER_OFFSET+DATA_NUMBER-1),:);
42 | Y_im = data_Y_im((FILTER_OFFSET:FILTER_OFFSET+DATA_NUMBER-1),:);
43 |
44 | IFFT_OFFSET = min(find_offset(data_sn_re),find_offset(data_sn_im));
45 | sn_re = data_sn_re((IFFT_OFFSET:IFFT_OFFSET+DATA_NUMBER-1),:);
46 | sn_im = data_sn_im((IFFT_OFFSET:IFFT_OFFSET+DATA_NUMBER-1),:);
47 |
48 | MOD_OFFSET = find_offset(data_out);
49 | out = data_out((MOD_OFFSET:MOD_OFFSET+DATA_NUMBER-1),:);
50 |
51 |
52 |
53 | % QAM mapping
54 | [I,Q] = QAM_mapper(I,Q,elem);
55 |
56 | % FFT
57 | [xk_re_th, xk_im_th] = DFT(I,Q,xk_re,xk_im,elem);
58 |
59 | % Filter
60 | [Y_re_th, Y_im_th] = SRRC_filter(xk_re,xk_im,Y_re,Y_im,elem);
61 |
62 | % IFFT
63 | [sn_re_th, sn_im_th] = IDFT(Y_re,Y_im,sn_re,sn_im,elem);
64 |
65 | % Modulator
66 | [out_th] = modulator(sn_re,sn_im,out,elem);
67 |
68 | % Transmitter
69 | [out_model] = transmitter(I,Q,out,elem);
70 |
71 |
72 |
73 | % Output Results
74 | exp_data = [...
75 | I Q xk_re xk_im Y_re Y_im sn_re sn_im out ...
76 | ];
77 | MATLAB_data = [...
78 | I Q xk_re_th xk_im_th Y_re_th Y_im_th sn_re_th sn_im_th out_th ...
79 | ];
80 |
81 |
82 | end
83 |
84 | function offset = find_offset(x)
85 | % FIND OFFSET determine the offset introduced by hardware latency.
86 | %
87 | % See also TRANSMITTER.
88 | %
89 | % AUTHOR Sonnino Alberto.
90 | % VERSION 1.0.1
91 |
92 |
93 |
94 | % Initialize variable
95 | offset = size(x,1);
96 |
97 | % Determin offset
98 | for i=1:size(x,2)
99 | for j=1:size(x,i)
100 | if(x(j,1) ~= 0)
101 | offset = min(offset,j);
102 | return;
103 | end
104 | end
105 | end
106 |
107 | end
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/QAM16.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: QAM16
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // QAM 16 mapping operation
14 | //
15 | // Dependencies:
16 | // -
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | // Three times the constallation distance 3*D equals the higest filter value:
23 | // 3*D = 0.54098593171027443
24 | // After rescaling (mult. by 2^15) we obtain 3*D = 17727.
25 | // Assign to I and Q value is done using the following convention:
26 | // [3] [2] [1] [0] I = {I1, I2} = 10
27 | // I1 Q1 I2 Q2 => Q = {Q1, Q2} = 10
28 | // 1 1 0 0
29 | // This will ensure Gray Coding
30 | //////////////////////////////////////////////////////////////////////////////////
31 | module QAM16 #(
32 | /* Parameters */
33 | parameter N = 16, // Number of parallel inputs
34 | parameter W = 16 // Bus width
35 | )(
36 | /* Input and output ports */
37 | input wire [4*N-1:0] in, // Clustered input stream
38 | input wire [W-1:0] last, // Last constellation point
39 | output reg [W*N-1:0] I, // In-phase component
40 | output reg [W*N-1:0] Q // Quadrature component
41 | );
42 |
43 |
44 | /***************************************************************************
45 | * Internal Signals
46 | ***************************************************************************/
47 | wire [W-1:0] p1; // First constellation point
48 |
49 | /***************************************************************************
50 | * Config.
51 | ***************************************************************************/
52 | // Compute other constellation point
53 | assign p1 = last / 3; // *(1/3)
54 |
55 |
56 | /***************************************************************************
57 | * QAM Mapping
58 | ***************************************************************************/
59 | genvar i;
60 | generate for(i=0; i < N; i=i+1)
61 | always@(*) begin
62 | case({in[4*i+3],in[4*i+1]}) // assign I value
63 | 2'b00: I[W*i+(W-1):W*i] = p1;
64 | 2'b01: I[W*i+(W-1):W*i] = last;
65 | 2'b10: I[W*i+(W-1):W*i] = -p1;
66 | 2'b11: I[W*i+(W-1):W*i] = -last;
67 | default: I[W*i+(W-1):W*i] = 'dx;
68 | endcase
69 | case({in[4*i+2],in[4*i]}) // assign Q value
70 | 2'b00: Q[W*i+(W-1):W*i] = p1;
71 | 2'b01: Q[W*i+(W-1):W*i] = last;
72 | 2'b10: Q[W*i+(W-1):W*i] = -p1;
73 | 2'b11: Q[W*i+(W-1):W*i] = -last;
74 | default: Q[W*i+(W-1):W*i] = 'dx;
75 | endcase
76 | end
77 | endgenerate
78 |
79 | /***************************************************************************/
80 |
81 |
82 | endmodule
83 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/modulator.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: SRRC_filter
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // Modulate the input signal by the intput carriers following the QAM scheme.
14 | //
15 | // Dependencies:
16 | // - Multiplier 11.2
17 | // - Adder Substracter 11.0
18 | //
19 | // Revision:
20 | // Revision 0.01 - File Created
21 | //
22 | // Additional Comments:
23 | //////////////////////////////////////////////////////////////////////////////////
24 | module modulator #(
25 | /* Parameters */
26 | parameter N = 16 // Number of parallel inputs
27 | )(
28 | input wire clk, // Clock
29 | input wire reset, // Reset
30 | input wire [16*N-1:0] I, // In-phase input
31 | input wire [16*N-1:0] Q, // Quadrature input
32 | input wire [16*N-1:0] cos, // In-phase carrier
33 | input wire [16*N-1:0] sin, // Quadrature carrier
34 | output wire [16*N-1:0] dout // Output
35 | );
36 |
37 |
38 | /***************************************************************************
39 | * Internal Signals
40 | ***************************************************************************/
41 | wire [16*N-1:0] p1, p2;
42 |
43 |
44 | /***************************************************************************
45 | * Multiplier and Substracter - Rescaling 2^(-16)
46 | ***************************************************************************/
47 | genvar i;
48 | generate
49 | for(i=0; i < N; i=i+1) begin
50 | // Multiplier
51 | mult mult_mod_inst_re (
52 | .clk(clk), // input clk
53 | .a(I[16*i+(16-1):16*i]), // input [15 : 0] a
54 | .b(cos[16*(N-1-i)+(16-1):16*(N-1-i)]), // input [15 : 0] b
55 | .sclr(reset), // input sclr
56 | .p(p1[16*i+(16-1):16*i]) // output [15 : 0] p
57 | );
58 | mult mult_mod_inst_im (
59 | .clk(clk), // input clk
60 | .a(Q[16*i+(16-1):16*i]), // input [15 : 0] a
61 | .b(sin[16*(N-1-i)+(16-1):16*(N-1-i)]), // input [15 : 0] b
62 | .sclr(reset), // input sclr
63 | .p(p2[16*i+(16-1):16*i]) // output [15 : 0] p
64 | );
65 | // Substracter
66 | substracter substracter_mod_inst (
67 | .a(p1[16*i+(16-1):16*i]), // input [15 : 0] a
68 | .b(p2[16*i+(16-1):16*i]), // input [15 : 0] b
69 | .clk(clk), // input clk
70 | .sclr(reset), // input sclr
71 | .s(dout[16*i+(16-1):16*i]) // output [15 : 0] s
72 | );
73 | end
74 | endgenerate
75 |
76 | /***************************************************************************/
77 |
78 |
79 | endmodule
80 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/QAM64.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: QAM16
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // QAM 16 mapping operation
14 | //
15 | // Dependencies:
16 | // -
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | //////////////////////////////////////////////////////////////////////////////////
23 | module QAM64 #(
24 | /* Parameters */
25 | parameter N = 16, // Number of parallel inputs
26 | parameter W = 16 // Bus width
27 | )(
28 | /* Input and output ports */
29 | input wire [6*N-1:0] in, // Clustered input stream
30 | input wire [W-1:0] last, // Last constellation point
31 | output reg [W*N-1:0] I, // In-phase component
32 | output reg [W*N-1:0] Q // Quadrature component
33 | );
34 |
35 |
36 | /***************************************************************************
37 | * Internal Signals
38 | ***************************************************************************/
39 | wire [W-1:0] p1, p3, p5; // First constellation point
40 |
41 | /***************************************************************************
42 | * Config.
43 | ***************************************************************************/
44 | // Compute other constellation point
45 | assign p1 = last / 7; // *(1/7)
46 | assign p3 = p1 * 3; // *(3/7)
47 | assign p5 = p1 * 5; // *(5/7)
48 |
49 |
50 | /***************************************************************************
51 | * QAM Mapping
52 | ***************************************************************************/
53 | genvar i;
54 | generate for(i=0; i < N; i=i+1)
55 | always@(*) begin
56 | case({in[6*i+5],in[6*i+3],in[6*i+1]}) // assign I value
57 | 3'b000: I[W*i+(W-1):W*i] = p1;
58 | 3'b001: I[W*i+(W-1):W*i] = p3;
59 | 3'b010: I[W*i+(W-1):W*i] = p5;
60 | 3'b011: I[W*i+(W-1):W*i] = last;
61 | 3'b100: I[W*i+(W-1):W*i] = -p1;
62 | 3'b101: I[W*i+(W-1):W*i] = -p3;
63 | 3'b110: I[W*i+(W-1):W*i] = -p5;
64 | 3'b111: I[W*i+(W-1):W*i] = -last;
65 | default: I[W*i+(W-1):W*i] = 'dx;
66 | endcase
67 | case({in[6*i+4],in[6*i+2],in[6*i]}) // assign Q value
68 | 3'b000: Q[W*i+(W-1):W*i] = p1;
69 | 3'b001: Q[W*i+(W-1):W*i] = p3;
70 | 3'b010: Q[W*i+(W-1):W*i] = p5;
71 | 3'b011: Q[W*i+(W-1):W*i] = last;
72 | 3'b100: Q[W*i+(W-1):W*i] = -p1;
73 | 3'b101: Q[W*i+(W-1):W*i] = -p3;
74 | 3'b110: Q[W*i+(W-1):W*i] = -p5;
75 | 3'b111: Q[W*i+(W-1):W*i] = -last;
76 | default: Q[W*i+(W-1):W*i] = 'dx;
77 | endcase
78 | end
79 | endgenerate
80 |
81 | /***************************************************************************/
82 |
83 |
84 | endmodule
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/constant-values.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Constant Field Values
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Constant Field Values
35 |
36 |
37 | Contents
40 |
41 |
42 |
43 |
44 | |
45 | view.* |
46 |
47 |
48 |
49 |
50 |
51 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/QAM.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: QAM16
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // QAM mapping operation
14 | //
15 | // Dependencies:
16 | // -
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | //////////////////////////////////////////////////////////////////////////////////
23 | module QAM #(
24 | /* Parameters */
25 | parameter N = 16, // Number of parallel inputs
26 | parameter W = 16, // Bus width
27 | parameter FORMAT = 3'b100 // QAM order
28 | )(
29 | /* Input and output ports */
30 | input wire [FORMAT*N-1:0] in, // Clustered input stream
31 | input wire [W-1:0] last, // Last constellation point
32 | output wire [W*N-1:0] I, // In-phase component
33 | output wire [W*N-1:0] Q // Quadrature component
34 | );
35 |
36 |
37 | /***************************************************************************
38 | * QAM Mapping
39 | ***************************************************************************/
40 | generate // generate only the required module
41 | case(FORMAT)
42 | 3'b011: // 8-QAM
43 | QAM8 #(
44 | .N(N), // Number of parallel inputs
45 | .W(W) // Bus Witdh
46 | ) QAM8_isnt(
47 | .in(in), // Clustered input stream
48 | .last(last), // Last constellation point
49 | .I(I), // In-phase component
50 | .Q(Q) // Quadrature component
51 | );
52 | 3'b100: // 16-QAM
53 | QAM16 #(
54 | .N(N), // Number of parallel inputs
55 | .W(W) // Bus Witdh
56 | ) QAM16_isnt(
57 | .in(in), // Clustered input stream
58 | .last(last), // Last constellation point
59 | .I(I), // In-phase component
60 | .Q(Q) // Quadrature component
61 | );
62 | 3'b101: // 32-QAM
63 | QAM32 #(
64 | .N(N), // Number of parallel inputs
65 | .W(W) // Bus Witdh
66 | ) QAM32_isnt(
67 | .in(in), // Clustered input stream
68 | .last(last), // Last constellation point
69 | .I(I), // In-phase component
70 | .Q(Q) // Quadrature component
71 | );
72 | 3'b110: // 64-QAM
73 | QAM64 #(
74 | .N(N), // Number of parallel inputs
75 | .W(W) // Bus Witdh
76 | ) QAM64_isnt(
77 | .in(in), // Clustered input stream
78 | .last(last), // Last constellation point
79 | .I(I), // In-phase component
80 | .Q(Q) // Quadrature component
81 | );
82 | default: // unsupported or undefined QAM format
83 | begin assign I = 'bx; assign Q = 'bx; end
84 | endcase
85 | endgenerate
86 |
87 | /***************************************************************************/
88 |
89 |
90 | endmodule
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/FilterCoeff.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Class describing the Filter coefficients.
6 | *
7 | * @author Alberto Sonnino
8 | * @version 1.1.1
9 | */
10 | public class FilterCoeff extends Generator
11 | {
12 | private double[] H;
13 | private double HMax;
14 |
15 | /**
16 | * Constructor for objects of class FilterCoeff
17 | */
18 | public FilterCoeff(int size)
19 | {
20 | // call constructor of supercalss
21 | super(size);
22 |
23 | // initialize instance variables
24 | this.H = new double[getSize()];
25 | setHMax(0);
26 |
27 | // fill coefficients
28 | for(double h : H){h = 0;}
29 | updateHMax();
30 | }
31 | /**
32 | * Constructor for objects of class FilterCoeff
33 | */
34 | public FilterCoeff(int size, double[] H)
35 | {
36 | // call constructor of supercalss
37 | super(size);
38 |
39 | // initialize instance variables
40 | this.H = new double[Math.max(getSize(),H.length)];
41 | setHMax(0);
42 |
43 | // fill coefficients
44 | // NOTE:
45 | // if size < H.length, retreive only the first 'size' coeff
46 | // if size > H.length, pad with zeros
47 | int minLength = Math.min(getSize(),H.length);
48 | for(int i=0; i < minLength; i++){
49 | this.H[i] = H[i];
50 | }
51 | for(int i=minLength; i < (minLength + getSize() - H.length); i++){
52 | this.H[i] = 0;
53 | }
54 | // update higest filter coeff
55 | updateHMax();
56 | }
57 |
58 |
59 | /**
60 | * @return the filter coefficients
61 | */
62 | public double[] getH()
63 | {
64 | return H;
65 | }
66 | /**
67 | * @param H the filter coefficients
68 | * @return -
69 | */
70 | public void setH(double[] H)
71 | {
72 | this.H = H;
73 | }
74 |
75 | /**
76 | * @return the highest filter coefficients
77 | */
78 | public double getHMax()
79 | {
80 | return HMax;
81 | }
82 | /**
83 | * @param HMax the highest filter coefficients
84 | * @return -
85 | */
86 | private void setHMax(double HMax)
87 | {
88 | this.HMax = HMax;
89 | }
90 |
91 | /**
92 | * Update the higest filter coefficient.
93 | * @return -
94 | */
95 | public void updateHMax()
96 | {
97 | setHMax(getH()[0]);
98 | for(int i=0; i < getSize(); i++){
99 | if(getH()[i] > getHMax()){setHMax(getH()[i]);}
100 | }
101 | }
102 |
103 | /**
104 | * @param RescFactor the rescale factor to apply
105 | * @return -
106 | */
107 | public void rescale(double RescFactor)
108 | {
109 | // rescale
110 | for(int i=0; i < getSize(); i++){
111 | getH()[i] = getH()[i] * RescFactor;
112 | }
113 |
114 | // update the higest coefficient
115 | updateHMax();
116 |
117 | // update the rescale factor
118 | updateRescFactor(RescFactor);
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/QAM8.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: QAM16
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // QAM 16 mapping operation
14 | //
15 | // Dependencies:
16 | // -
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | // Three times the constallation distance 3*D equals the higest filter value:
23 | // 3*D = 0.54098593171027443
24 | // After rescaling (mult. by 2^15) we obtain 3*D = 17727.
25 | // Assign to I and Q value is done using the following convention:
26 | // [3] [2] [1] [0] I = {I1, I2} = 10
27 | // I1 Q1 I2 Q2 => Q = {Q1, Q2} = 10
28 | // 1 1 0 0
29 | //////////////////////////////////////////////////////////////////////////////////
30 | module QAM8 #(
31 | /* Parameters */
32 | parameter N = 16, // Number of parallel inputs
33 | parameter W = 16 // Bus width
34 | )(
35 | /* Input and output ports */
36 | input wire [3*N-1:0] in, // Clustered input stream
37 | input wire [W-1:0] last, // Last constellation point
38 | output reg [W*N-1:0] I, // In-phase component
39 | output reg [W*N-1:0] Q // Quadrature component
40 | );
41 |
42 |
43 | /***************************************************************************
44 | * Internal Signals
45 | ***************************************************************************/
46 | wire [W-1:0] p1; // First constellation point
47 |
48 | /***************************************************************************
49 | * Config.
50 | ***************************************************************************/
51 | // Compute other constellation point
52 | assign p1 = last / 3; // *(1/3)
53 |
54 |
55 | /***************************************************************************
56 | * QAM Mapping
57 | ***************************************************************************/
58 | genvar i;
59 | generate for(i=0; i < N; i=i+1)
60 | always@(*) begin
61 | case({in[3*i+2],in[3*i+1],in[3*i]}) // assign I value
62 | 3'b000: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = last; end
63 | 3'b001: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = -p1; end
64 | 3'b010: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = p1; end
65 | 3'b011: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = -p1; end
66 | 3'b100: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = last; end
67 | 3'b101: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = -last; end
68 | 3'b110: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = p1; end
69 | 3'b111: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = -last; end
70 | default: begin I[W*i+(W-1):W*i] = 'dx; Q[W*i+(W-1):W*i] = 'dx; end
71 | endcase
72 | end
73 | endgenerate
74 |
75 | /***************************************************************************/
76 |
77 |
78 | endmodule
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/MATLAB/plot_single.m:
--------------------------------------------------------------------------------
1 | function [] = plot_single(y,plot_title,type)
2 | % PLOT_COMP Plot a signal and its spline interpolation in many different
3 | % representation.
4 | %
5 | % See also PLOT_COMP.
6 | %
7 | % AUTHOR Sonnino Alberto.
8 | % VERSION 1.0.1
9 |
10 |
11 |
12 | % Format check
13 | if(size(y,1) ~= 1 || size(y,2) < 2)
14 | display('Error - PLOT_SINGEL: input must be a vector');
15 | return;
16 | end
17 |
18 | % Define plot parameters
19 | STANDARD = 'standard';
20 | RECT = 'rect';
21 | ERROR = 'error';
22 | PRO = 'pro';
23 | RECT_PRO = 'rect pro';
24 |
25 | % Initialize defaults arguments
26 | plot_type = STANDARD;
27 |
28 | % Check arguments
29 | switch(nargin)
30 | case 2
31 | plot_type = STANDARD;
32 | case 3
33 | plot_type = type;
34 | end
35 |
36 | % Define axis and compute splines
37 | x = 0 : 1 : (size(y,2)-1);
38 | xx = 0 : 0.1 : (size(y,2)-1);
39 | yy = spline(x,y,xx);
40 |
41 | % Create figure
42 | figure1 = figure;
43 |
44 | % Create axes
45 | axes1 = axes('Parent',figure1,...
46 | 'ZColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
47 | 'YColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
48 | 'XColor',[0.431372553110123 0.431372553110123 0.431372553110123],...
49 | 'FontSize',18);
50 | grid(axes1,'on');
51 | hold(axes1,'on');
52 |
53 | % Create title
54 | title(plot_title,'FontSize',24,'FontName','Arial',...
55 | 'Color',[0.243137255311012 0.243137255311012 0.243137255311012],...
56 | 'FontSize',24);
57 | xlabel('samples')
58 | ylabel('amplitude')
59 |
60 | % Plot
61 | if(strcmp(plot_type,STANDARD))
62 | % Create spline plot
63 | plot(xx,yy,'DisplayName','Input','LineWidth',2,...
64 | 'Color',[0.82352941 0.3254902 0.23529412]);
65 | % Create data plot
66 | plot(x,y,'MarkerSize',5,'Marker','*','LineStyle','none',...
67 | 'Color',[0.82352941 0.3254902 0.23529412]);
68 |
69 | elseif(strcmp(plot_type,RECT))
70 | stairs(x,y,'DisplayName','Input','LineWidth',2,...
71 | 'Color',[0.82352941 0.3254902 0.23529412]);
72 |
73 | elseif(strcmp(plot_type,ERROR))
74 | % plot(x,y,'DisplayName','Input','LineWidth',2,...
75 | % 'Color',[0.82352941 0.3254902 0.23529412]); % Orange
76 | % plot(x,y,'DisplayName','Input','LineWidth',2,...
77 | % 'Color',[0.13725490 0.58431373 0.49019608]); % KIT green
78 | plot(x,y,'DisplayName','Input','LineWidth',2,...
79 | 'Color',[0 0 0]);
80 | ylabel('magnitude')
81 |
82 | elseif(strcmp(plot_type,PRO))
83 | % plot(xx,yy,'DisplayName','Input','LineWidth',1,...
84 | % 'Color',[0 0 0]);
85 | plot(xx,yy,'DisplayName','Input','LineWidth',2,...
86 | 'Color',[0.13725490 0.58431373 0.49019608]); % KIT green
87 |
88 | elseif(strcmp(plot_type,RECT_PRO))
89 | % stairs(x,y,'DisplayName','Input','LineWidth',2,...
90 | % 'Color',[0.13725490 0.58431373 0.49019608]); % KIT green
91 | stairs(x,y,'DisplayName','Input','LineWidth',2,...
92 | 'Color',[0 0 0]);
93 |
94 | else
95 | % Display warning
96 | display('Error: plot type %s not recognised',plot_type);
97 | % Create spline plot
98 | plot(xx,yy,'DisplayName','Input','LineWidth',2,...
99 | 'Color',[0.82352941 0.3254902 0.23529412]);
100 | % Create data plot
101 | plot(x,y,'MarkerSize',5,'Marker','*','LineStyle','none',...
102 | 'Color',[0.82352941 0.3254902 0.23529412]);
103 | end
104 |
105 |
106 |
107 | end
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/package.bluej:
--------------------------------------------------------------------------------
1 | #BlueJ package file
2 | dependency1.from=Export
3 | dependency1.to=DftCoeff
4 | dependency1.type=UsesDependency
5 | dependency2.from=Export
6 | dependency2.to=ProgException
7 | dependency2.type=UsesDependency
8 | dependency3.from=Export
9 | dependency3.to=Const
10 | dependency3.type=UsesDependency
11 | dependency4.from=Process
12 | dependency4.to=ProgException
13 | dependency4.type=UsesDependency
14 | dependency5.from=Export
15 | dependency5.to=Process
16 | dependency5.type=UsesDependency
17 | dependency6.from=Export
18 | dependency6.to=Carriers
19 | dependency6.type=UsesDependency
20 | dependency7.from=Export
21 | dependency7.to=FilterCoeff
22 | dependency7.type=UsesDependency
23 | objectbench.height=76
24 | objectbench.width=722
25 | package.editor.height=469
26 | package.editor.width=614
27 | package.editor.x=545
28 | package.editor.y=131
29 | package.numDependencies=7
30 | package.numTargets=8
31 | package.showExtends=true
32 | package.showUses=true
33 | target1.editor.height=700
34 | target1.editor.width=900
35 | target1.editor.x=331
36 | target1.editor.y=23
37 | target1.height=50
38 | target1.name=Carriers
39 | target1.naviview.expanded=false
40 | target1.showInterface=false
41 | target1.type=ClassTarget
42 | target1.typeParameters=
43 | target1.width=80
44 | target1.x=370
45 | target1.y=100
46 | target2.editor.height=700
47 | target2.editor.width=900
48 | target2.editor.x=259
49 | target2.editor.y=35
50 | target2.height=50
51 | target2.name=FilterCoeff
52 | target2.naviview.expanded=false
53 | target2.showInterface=false
54 | target2.type=ClassTarget
55 | target2.typeParameters=
56 | target2.width=90
57 | target2.x=240
58 | target2.y=100
59 | target3.editor.height=700
60 | target3.editor.width=900
61 | target3.editor.x=273
62 | target3.editor.y=33
63 | target3.height=50
64 | target3.name=ProgException
65 | target3.naviview.expanded=false
66 | target3.showInterface=false
67 | target3.type=ClassTarget
68 | target3.typeParameters=
69 | target3.width=110
70 | target3.x=50
71 | target3.y=290
72 | target4.editor.height=700
73 | target4.editor.width=900
74 | target4.editor.x=377
75 | target4.editor.y=23
76 | target4.height=50
77 | target4.name=DftCoeff
78 | target4.naviview.expanded=false
79 | target4.showInterface=false
80 | target4.type=ClassTarget
81 | target4.typeParameters=
82 | target4.width=80
83 | target4.x=130
84 | target4.y=100
85 | target5.editor.height=700
86 | target5.editor.width=900
87 | target5.editor.x=380
88 | target5.editor.y=33
89 | target5.height=50
90 | target5.name=Const
91 | target5.naviview.expanded=false
92 | target5.showInterface=false
93 | target5.type=ClassTarget
94 | target5.typeParameters=
95 | target5.width=80
96 | target5.x=70
97 | target5.y=210
98 | target6.editor.height=710
99 | target6.editor.width=1280
100 | target6.editor.x=0
101 | target6.editor.y=23
102 | target6.height=50
103 | target6.name=Export
104 | target6.naviview.expanded=false
105 | target6.showInterface=false
106 | target6.type=ClassTarget
107 | target6.typeParameters=
108 | target6.width=90
109 | target6.x=240
110 | target6.y=210
111 | target7.editor.height=700
112 | target7.editor.width=900
113 | target7.editor.x=322
114 | target7.editor.y=33
115 | target7.height=50
116 | target7.name=Process
117 | target7.naviview.expanded=false
118 | target7.showInterface=false
119 | target7.type=ClassTarget
120 | target7.typeParameters=
121 | target7.width=80
122 | target7.x=250
123 | target7.y=300
124 | target8.editor.height=700
125 | target8.editor.width=900
126 | target8.editor.x=379
127 | target8.editor.y=23
128 | target8.height=50
129 | target8.name=Generator
130 | target8.naviview.expanded=false
131 | target8.showInterface=false
132 | target8.type=AbstractTarget
133 | target8.typeParameters=
134 | target8.width=90
135 | target8.x=240
136 | target8.y=10
137 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/data/Carriers.java:
--------------------------------------------------------------------------------
1 | package data;
2 |
3 |
4 | /**
5 | * Class describing the modulator carriers.
6 | *
7 | * @author Sonnino Alberto
8 | * @version 1.1.1
9 | */
10 | public class Carriers extends Generator
11 | {
12 | private double frequency;
13 | private int inputNumber;
14 |
15 | private double[] cosCarrier, sinCarrier;
16 |
17 | /**
18 | * Constructor for objects of class Carriers
19 | */
20 | public Carriers(double frequency, int inputNumber)
21 | {
22 | // call constructor of supercalss
23 | super();
24 |
25 | // initialize instance variables
26 | this.frequency = (frequency < 0) ? 0 : frequency;
27 | this.inputNumber = (inputNumber < 0) ? 0 : inputNumber;
28 | setSize(generateNumberOfSamples(getFrequency(), getInputNumber()));
29 |
30 | cosCarrier = new double[getSize()];
31 | sinCarrier = new double[getSize()];
32 |
33 | // generate carriers
34 | double period = 1 / getFrequency(); // carrier period
35 | double dt = period / getNumberOfSamples(); // interval between samples
36 |
37 | for(int n=0; n < getSize(); n++){
38 | this.cosCarrier[n] = Math.cos(2 * Math.PI * getFrequency() * n * dt);
39 | this.sinCarrier[n] = Math.sin(2 * Math.PI * getFrequency() * n * dt);
40 | }
41 | }
42 |
43 | /**
44 | * @param frequency the carriers frequency
45 | * @param inputNumber the number of parallel inputs
46 | * @return the number of samples
47 | */
48 | private int generateNumberOfSamples(double frequency, int inputNumber)
49 | {
50 | // compute number of samples to make it a multiple of inputNumber
51 | int numberOfSamples = 4 * (int)Math.round(frequency);
52 | for(int i=0; i < inputNumber; i++){
53 | if( numberOfSamples % inputNumber == 0 ){break;}
54 | numberOfSamples++;
55 | }
56 |
57 | // return
58 | return numberOfSamples;
59 | }
60 |
61 | /**
62 | * @return the carrier's frequency
63 | */
64 | public double getFrequency()
65 | {
66 | return frequency;
67 | }
68 |
69 | /**
70 | * @return the number of parallel inputs
71 | */
72 | public int getInputNumber()
73 | {
74 | return inputNumber;
75 | }
76 |
77 | /**
78 | * @return the number of samples contained in the carriers
79 | */
80 | public int getNumberOfSamples()
81 | {
82 | return getSize();
83 | }
84 |
85 | /**
86 | * @return the cos carrier
87 | */
88 | public double[] getCosCarrier()
89 | {
90 | return cosCarrier;
91 | }
92 | /**
93 | * @param cos the cos carrier
94 | * @return -
95 | */
96 | public void setCosCarrier(double[] cosCarrier)
97 | {
98 | this.cosCarrier = cosCarrier;
99 | }
100 |
101 | /**
102 | * @return the sin carrier
103 | */
104 | public double[] getSinCarrier()
105 | {
106 | return sinCarrier;
107 | }
108 | /**
109 | * @param sin the sin carrier
110 | * @return -
111 | */
112 | public void setSin_carrier(double[] sinCarrier)
113 | {
114 | this.sinCarrier = sinCarrier;
115 | }
116 |
117 | /**
118 | * @param RescFactor the rescale factor to apply
119 | * @return -
120 | */
121 | public void rescale(double RescFactor)
122 | {
123 | // rescale
124 | for(int n=0; n < getSize(); n++){
125 | getCosCarrier()[n] = getCosCarrier()[n] * RescFactor;
126 | getSinCarrier()[n] = getSinCarrier()[n] * RescFactor;
127 | }
128 |
129 | // update the rescale factor
130 | updateRescFactor(RescFactor);
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/package.bluej:
--------------------------------------------------------------------------------
1 | #BlueJ package file
2 | dependency1.from=GUI
3 | dependency1.to=AdvancedPanel
4 | dependency1.type=UsesDependency
5 | dependency10.from=GUI
6 | dependency10.to=Chooser
7 | dependency10.type=UsesDependency
8 | dependency2.from=GUI
9 | dependency2.to=ConverterPanel
10 | dependency2.type=UsesDependency
11 | dependency3.from=GUI
12 | dependency3.to=GeneralPanel
13 | dependency3.type=UsesDependency
14 | dependency4.from=GUI
15 | dependency4.to=ColorLibrary
16 | dependency4.type=UsesDependency
17 | dependency5.from=GUI
18 | dependency5.to=GUILibrary
19 | dependency5.type=UsesDependency
20 | dependency6.from=GeneralPanel
21 | dependency6.to=GUILibrary
22 | dependency6.type=UsesDependency
23 | dependency7.from=GeneralPanel
24 | dependency7.to=Table
25 | dependency7.type=UsesDependency
26 | dependency8.from=GeneralPanel
27 | dependency8.to=ColorLibrary
28 | dependency8.type=UsesDependency
29 | dependency9.from=Table
30 | dependency9.to=ColorLibrary
31 | dependency9.type=UsesDependency
32 | objectbench.height=76
33 | objectbench.width=765
34 | package.editor.height=571
35 | package.editor.width=657
36 | package.editor.x=545
37 | package.editor.y=131
38 | package.numDependencies=10
39 | package.numTargets=8
40 | package.showExtends=true
41 | package.showUses=true
42 | target1.editor.height=700
43 | target1.editor.width=900
44 | target1.editor.x=75
45 | target1.editor.y=33
46 | target1.height=50
47 | target1.name=AdvancedPanel
48 | target1.naviview.expanded=false
49 | target1.showInterface=false
50 | target1.type=ClassTarget
51 | target1.typeParameters=
52 | target1.width=120
53 | target1.x=300
54 | target1.y=240
55 | target2.editor.height=772
56 | target2.editor.width=1301
57 | target2.editor.x=65
58 | target2.editor.y=-4
59 | target2.height=50
60 | target2.name=Chooser
61 | target2.naviview.expanded=false
62 | target2.showInterface=false
63 | target2.type=ClassTarget
64 | target2.typeParameters=
65 | target2.width=80
66 | target2.x=250
67 | target2.y=70
68 | target3.editor.height=744
69 | target3.editor.width=1301
70 | target3.editor.x=65
71 | target3.editor.y=24
72 | target3.height=50
73 | target3.name=Table
74 | target3.naviview.expanded=false
75 | target3.showInterface=false
76 | target3.type=ClassTarget
77 | target3.typeParameters=
78 | target3.width=80
79 | target3.x=160
80 | target3.y=70
81 | target4.editor.height=712
82 | target4.editor.width=864
83 | target4.editor.x=231
84 | target4.editor.y=23
85 | target4.height=50
86 | target4.name=GUI
87 | target4.naviview.expanded=false
88 | target4.showInterface=false
89 | target4.type=ClassTarget
90 | target4.typeParameters=
91 | target4.width=80
92 | target4.x=430
93 | target4.y=20
94 | target5.editor.height=712
95 | target5.editor.width=757
96 | target5.editor.x=412
97 | target5.editor.y=23
98 | target5.height=50
99 | target5.name=GeneralPanel
100 | target5.naviview.expanded=false
101 | target5.showInterface=false
102 | target5.type=ClassTarget
103 | target5.typeParameters=
104 | target5.width=100
105 | target5.x=10
106 | target5.y=150
107 | target6.editor.height=700
108 | target6.editor.width=900
109 | target6.editor.x=75
110 | target6.editor.y=33
111 | target6.height=50
112 | target6.name=ConverterPanel
113 | target6.naviview.expanded=false
114 | target6.showInterface=false
115 | target6.type=ClassTarget
116 | target6.typeParameters=
117 | target6.width=120
118 | target6.x=140
119 | target6.y=230
120 | target7.editor.height=700
121 | target7.editor.width=900
122 | target7.editor.x=75
123 | target7.editor.y=37
124 | target7.height=50
125 | target7.name=GUILibrary
126 | target7.naviview.expanded=false
127 | target7.showInterface=false
128 | target7.type=ClassTarget
129 | target7.typeParameters=
130 | target7.width=90
131 | target7.x=160
132 | target7.y=10
133 | target8.editor.height=700
134 | target8.editor.width=900
135 | target8.editor.x=75
136 | target8.editor.y=39
137 | target8.height=50
138 | target8.name=ColorLibrary
139 | target8.naviview.expanded=false
140 | target8.showInterface=false
141 | target8.type=ClassTarget
142 | target8.typeParameters=
143 | target8.width=100
144 | target8.x=280
145 | target8.y=10
146 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/idft.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: fft
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // Compute the Inverse Discrete Fourier Transform
14 | //
15 | // Dependencies:
16 | // - Complex Multiplier 5.0
17 | // - Adder Substracter 11.0
18 | //
19 | // Revision:
20 | // Revision 0.01 - File Created
21 | //
22 | // Additional Comments:
23 | //////////////////////////////////////////////////////////////////////////////////
24 | module idft #(
25 | /* Parameters */
26 | parameter N = 16 // Transform length
27 | )(
28 | /* Input and output ports */
29 | input wire clk, // Clock
30 | input wire reset, // Reset
31 | input wire [16*N-1:0] xn_re, // DFT real input
32 | input wire [16*N-1:0] xn_im, // DFT imaginary input
33 | input wire [16*N*N-1:0] ccos, // Cosine IDFT coefficients
34 | input wire [16*N*N-1:0] csin, // Sine IDFT coefficients
35 | output wire [16*N-1:0] xk_re, // IDFT real output
36 | output wire [16*N-1:0] xk_im // IDFT imaginary output
37 | );
38 |
39 |
40 | /***************************************************************************
41 | * Internal Signals
42 | ***************************************************************************/
43 | wire [16*N*N-1:0] t_re, t_im; // Temp signals to store complex products
44 | wire [16*N*N-1:0] a_re, a_im; // Temp signals to store complex sums
45 |
46 |
47 | /***************************************************************************
48 | * Compute DFT and Resize by 2^(-17)
49 | ***************************************************************************/
50 | // NOTE: The complex multipliers resize by 2^(-17) and not by 2^(-16)
51 | genvar k,n,i;
52 | generate
53 | for(k=0; k < N; k=k+1) begin
54 | // Compute complex products
55 | for(n=0; n < N; n=n+1) begin
56 | complex_mult complex_mult_fft_inst (
57 | .aclk(clk), // input aclk
58 | .aresetn(~reset), // input aresetn
59 | .s_axis_a_tvalid(1'b1), // input s_axis_a_tvalid
60 | .s_axis_a_tdata({
61 | xn_im[16*n+(16-1):16*n],// IDFT imaginary input
62 | xn_re[16*n+(16-1):16*n] // IDFT real input
63 | }),
64 | .s_axis_b_tvalid(1'b1), // input s_axis_b_tvalid
65 | .s_axis_b_tdata({
66 | csin[16*(N-1-n)+(16-1)+N*16*(N-1-k):16*(N-1-n)+N*16*(N-1-k)], // sine DFT coefficients
67 | ccos[16*(N-1-n)+(16-1)+N*16*(N-1-k):16*(N-1-n)+N*16*(N-1-k)] // cosine DFT coefficients
68 | }),
69 | .s_axis_ctrl_tvalid(1'b1), // input s_axis_ctrl_tvalid
70 | .s_axis_ctrl_tdata(8'b0), // input [7 : 0] s_axis_ctrl_tdata
71 | .m_axis_dout_tvalid(), // output m_axis_dout_tvalid
72 | .m_axis_dout_tdata({
73 | t_im[16*n+(16-1)+N*16*k:16*n+N*16*k], // DFT imaginary output
74 | t_re[16*n+(16-1)+N*16*k:16*n+N*16*k] // DFT real output
75 | })
76 | );
77 | end
78 |
79 | // Sum up complex products
80 | adder_fft adder_fft_inst_re (
81 | .a(t_re[16*0+(16-1)+N*16*k:16*0+N*16*k]), // input [15 : 0] a
82 | .b(t_re[16*1+(16-1)+N*16*k:16*1+N*16*k]), // input [15 : 0] b
83 | .sclr(reset), // input sclr
84 | .s(a_re[16*0+(16-1)+N*16*k:16*0+N*16*k]) // output [15 : 0] s
85 | );
86 | adder_fft adder_fft_inst_im (
87 | .a(t_im[16*0+(16-1)+N*16*k:16*0+N*16*k]), // input [15 : 0] a
88 | .b(t_im[16*1+(16-1)+N*16*k:16*1+N*16*k]), // input [15 : 0] b
89 | .sclr(reset), // input sclr
90 | .s(a_im[16*0+(16-1)+N*16*k:16*0+N*16*k]) // output [15 : 0] s
91 | );
92 | for(i=2; i < N; i=i+1) begin
93 | adder_fft adder_fft_inst_re_loop (
94 | .a(t_re[16*i+(16-1)+N*16*k:16*i+N*16*k]), // input [15 : 0] a
95 | .b(a_re[16*(i-2)+(16-1)+N*16*k:16*(i-2)+N*16*k]), // input [15 : 0] b
96 | .sclr(reset), // input sclr
97 | .s(a_re[16*(i-1)+(16-1)+N*16*k:16*(i-1)+N*16*k]) // output [15 : 0] s
98 | );
99 | adder_fft adder_fft_inst_im_loop (
100 | .a(t_im[16*i+(16-1)+N*16*k:16*i+N*16*k]), // input [15 : 0] a
101 | .b(a_im[16*(i-2)+(16-1)+N*16*k:16*(i-2)+N*16*k]), // input [15 : 0] b
102 | .sclr(reset), // input sclr
103 | .s(a_im[16*(i-1)+(16-1)+N*16*k:16*(i-1)+N*16*k]) // output [15 : 0] s
104 | );
105 | end
106 |
107 | // Assign output
108 | assign xk_re[16*k+(16-1):16*k] = a_re[16*(N-2)+(16-1)+N*16*k:16*(N-2)+N*16*k];
109 | assign xk_im[16*k+(16-1):16*k] = a_im[16*(N-2)+(16-1)+N*16*k:16*(N-2)+N*16*k];
110 |
111 | end
112 | endgenerate
113 |
114 | /***************************************************************************/
115 |
116 |
117 | endmodule
118 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/AdvancedPanel.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import java.awt.BorderLayout;
4 | import java.awt.Dimension;
5 |
6 | import javax.swing.JPanel;
7 | import javax.swing.JLabel;
8 | import javax.swing.JTextField;
9 | import javax.swing.Box;
10 | import javax.swing.JTable;
11 | import javax.swing.JScrollPane;
12 | import javax.swing.BorderFactory;
13 |
14 | import javax.swing.border.TitledBorder;
15 |
16 | /**
17 | * Panel allowing general use of the application.
18 | *
19 | * @author Alberto Sonnino
20 | * @version 2.0.1
21 | */
22 | public class AdvancedPanel extends JPanel
23 | {
24 | // parameters
25 | public static final int MODULENAME_FIELD_WIDTH = 200, MODULENAME_FIELD_HEIGHT = 30;
26 | public static final int SIZE_FIELD_WIDTH = 50, SIZE_FIELD_HEIGHT = 30;
27 | public static final int RESC_FACTOR_FIELD_WIDTH = 70, RESC_FACTOR_FIELD_HEIGHT = 30;
28 | public static final int FILTER_TABLE_WIDTH = 300, FILTER_TABLE_HEIGHT = 300;
29 |
30 | // variables
31 | JTextField filterModulenameField, filterSizeField, filterRescFactorField;
32 | JTable filterTable;
33 |
34 | /**
35 | * Constructor for objects of class GeneralPanel
36 | */
37 | public AdvancedPanel()
38 | {
39 | // initialize
40 | this.setLayout(new BorderLayout());
41 |
42 | // assemble
43 | this.add(createFilterBox(),BorderLayout.WEST);
44 | this.add(createEastPanel(),BorderLayout.EAST);
45 | this.add(createSouthPanel(),BorderLayout.SOUTH);
46 | }
47 |
48 | /**
49 | * @return return the filter panel
50 | */
51 | private Box createFilterBox(){
52 | /*
53 | * modulename
54 | */
55 | JLabel filterModulenameLabel = new JLabel("modulename:"); filterModulenameField = new JTextField();
56 | filterModulenameField.setPreferredSize(new Dimension(MODULENAME_FIELD_WIDTH,MODULENAME_FIELD_HEIGHT));
57 |
58 | Box filterModulenameBox = Box.createHorizontalBox();
59 | filterModulenameBox.add(Box.createHorizontalStrut(10)); filterModulenameBox.add(filterModulenameLabel);
60 | filterModulenameBox.add(Box.createHorizontalStrut(5)); filterModulenameBox.add(filterModulenameField);
61 | filterModulenameBox.add(Box.createHorizontalStrut(10));
62 |
63 | /*
64 | * size and rescaling factor
65 | */
66 | JLabel filterSizeLabel = new JLabel("size:"); filterSizeField = new JTextField();
67 | filterSizeField.setPreferredSize(new Dimension(SIZE_FIELD_WIDTH,SIZE_FIELD_HEIGHT));
68 |
69 | JLabel filterRescFactorLabel = new JLabel("rescaling factor:"); filterRescFactorField = new JTextField();
70 | filterRescFactorField.setPreferredSize(new Dimension(RESC_FACTOR_FIELD_WIDTH,RESC_FACTOR_FIELD_HEIGHT));
71 |
72 | Box filterSizeAndRFBox = Box.createHorizontalBox();
73 | filterSizeAndRFBox.add(Box.createHorizontalStrut(10)); filterSizeAndRFBox.add(filterSizeLabel);
74 | filterSizeAndRFBox.add(Box.createHorizontalStrut(5)); filterSizeAndRFBox.add(filterSizeField);
75 | filterSizeAndRFBox.add(Box.createHorizontalStrut(20)); filterSizeAndRFBox.add(Box.createHorizontalGlue());
76 | filterSizeAndRFBox.add(filterRescFactorLabel); filterSizeAndRFBox.add(Box.createHorizontalStrut(5));
77 | filterSizeAndRFBox.add(filterRescFactorField); filterSizeAndRFBox.add(Box.createHorizontalStrut(10));
78 |
79 |
80 | /*
81 | * coefficients
82 | */
83 | filterTable = new JTable(10,1);
84 | JScrollPane filterTableScroller = new JScrollPane(filterTable); filterTable.setFillsViewportHeight(true);
85 | filterTableScroller.setPreferredSize(new Dimension(FILTER_TABLE_WIDTH, FILTER_TABLE_HEIGHT));
86 |
87 |
88 | /*
89 | * assemble and return
90 | */
91 | Box vBox = Box.createVerticalBox();
92 | vBox.add(Box.createVerticalStrut(10));
93 | vBox.add(filterModulenameBox); vBox.add(Box.createVerticalStrut(5)); vBox.add(filterSizeAndRFBox);
94 | vBox.add(Box.createVerticalStrut(10)); vBox.add(filterTableScroller);
95 | vBox.add(Box.createVerticalStrut(10));
96 |
97 | TitledBorder filterBorder = BorderFactory.createTitledBorder("Filter Coefficients");
98 | filterBorder.setTitleJustification(TitledBorder.CENTER);
99 | vBox.setBorder(filterBorder);
100 |
101 | return vBox;
102 | }
103 |
104 | /**
105 | * @return return the east panel containing the DFT and the carriers pannel
106 | */
107 | private JPanel createEastPanel(){
108 | return new JPanel();
109 | }
110 |
111 | /**
112 | * @return return the DFT panel
113 | */
114 | private JPanel createDFTPanel(){
115 | return new JPanel();
116 | }
117 |
118 | /**
119 | * @return return the carriers panel
120 | */
121 | private JPanel createCarriersPanel(){
122 | return new JPanel();
123 | }
124 |
125 | /**
126 | * @return return the south panel
127 | */
128 | private JPanel createSouthPanel(){
129 | return new JPanel();
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/QAM32.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: QAM16
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // QAM 16 mapping operation
14 | //
15 | // Dependencies:
16 | // -
17 | //
18 | // Revision:
19 | // Revision 0.01 - File Created
20 | //
21 | // Additional Comments:
22 | // Three times the constallation distance 3*D equals the higest filter value:
23 | // 3*D = 0.54098593171027443
24 | // After rescaling (mult. by 2^15) we obtain 3*D = 17727.
25 | // Assign to I and Q value is done using the following convention:
26 | // [3] [2] [1] [0] I = {I1, I2} = 10
27 | // I1 Q1 I2 Q2 => Q = {Q1, Q2} = 10
28 | // 1 1 0 0
29 | //////////////////////////////////////////////////////////////////////////////////
30 | module QAM32 #(
31 | /* Parameters */
32 | parameter N = 16, // Number of parallel inputs
33 | parameter W = 16 // Bus width
34 | )(
35 | /* Input and output ports */
36 | input wire [5*N-1:0] in, // Clustered input stream
37 | input wire [W-1:0] last, // Last constellation point
38 | output reg [W*N-1:0] I, // In-phase component
39 | output reg [W*N-1:0] Q // Quadrature component
40 | );
41 |
42 |
43 | /***************************************************************************
44 | * Internal Signals
45 | ***************************************************************************/
46 | wire [W-1:0] p1, p3; // First constellation point
47 |
48 | /***************************************************************************
49 | * Config.
50 | ***************************************************************************/
51 | // Compute other constellation point
52 | assign p1 = last / 5; // *(1/5)
53 | assign p3 = p1 * 3; // *(3/5)
54 |
55 |
56 | /***************************************************************************
57 | * QAM Mapping
58 | ***************************************************************************/
59 | genvar i;
60 | generate for(i=0; i < N; i=i+1)
61 | always@(*) begin
62 | case({in[5*i+4],in[5*i+3],in[5*i+2],in[5*i+1],in[5*i]})
63 | 5'b00000: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = last; end
64 | 5'b00001: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = -p1; end
65 | 5'b00010: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = p3; end
66 | 5'b00011: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = -p3; end
67 | 5'b00100: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = p3; end
68 | 5'b00101: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = -p1; end
69 | 5'b00110: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = p1; end
70 | 5'b00111: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = -last; end
71 |
72 | 5'b01000: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = last; end
73 | 5'b01001: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = -p1; end
74 | 5'b01010: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = p1; end
75 | 5'b01011: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = -p3; end
76 | 5'b01100: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = p3; end
77 | 5'b01101: begin I[W*i+(W-1):W*i] = -last; Q[W*i+(W-1):W*i] = -p3; end
78 | 5'b01110: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = p1; end
79 | 5'b01111: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = -last; end
80 |
81 | 5'b10000: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = last; end
82 | 5'b10001: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = -p1; end
83 | 5'b10010: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = p3; end
84 | 5'b10011: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = -p3; end
85 | 5'b10100: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = p3; end
86 | 5'b10101: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = -p1; end
87 | 5'b10110: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = p1; end
88 | 5'b10111: begin I[W*i+(W-1):W*i] = -p1; Q[W*i+(W-1):W*i] = -last; end
89 |
90 | 5'b11000: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = last; end
91 | 5'b11001: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = -p1; end
92 | 5'b11010: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = p1; end
93 | 5'b11011: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = -p3; end
94 | 5'b11100: begin I[W*i+(W-1):W*i] = p1; Q[W*i+(W-1):W*i] = p3; end
95 | 5'b11101: begin I[W*i+(W-1):W*i] = -p3; Q[W*i+(W-1):W*i] = -p3; end
96 | 5'b11110: begin I[W*i+(W-1):W*i] = last; Q[W*i+(W-1):W*i] = p1; end
97 | 5'b11111: begin I[W*i+(W-1):W*i] = p3; Q[W*i+(W-1):W*i] = -last; end
98 | default: begin I[W*i+(W-1):W*i] = 'dx; Q[W*i+(W-1):W*i] = 'dx; end
99 | endcase
100 | end
101 | endgenerate
102 |
103 | /***************************************************************************/
104 |
105 |
106 | endmodule
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/dft.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //////////////////////////////////////////////////////////////////////////////////
3 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
4 | // Engineer: Sonnino Alberto
5 | //
6 | // Create Date: 11:55:46 05/09/2015
7 | // Design Name: Fourier QAM Modulator v4
8 | // Module Name: fft
9 | // Project Name: Fourier QAM Modulator
10 | // Target Devices: Xilinx Virtex 7
11 | // Tool versions: Xilinx ISE Design Suite 14.7
12 | // Description:
13 | // Perform the Discrete Fourier Transform
14 | //
15 | // Dependencies:
16 | // - Complex Multiplier 5.0
17 | // - Adder Substracter 11.0
18 | //
19 | // Revision:
20 | // Revision 0.01 - File Created
21 | //
22 | // Additional Comments:
23 | //////////////////////////////////////////////////////////////////////////////////
24 | module dft #(
25 | /* Parameters */
26 | parameter N = 16 // Transform length
27 | )(
28 | /* Input and output ports */
29 | input wire clk, // Clock
30 | input wire reset, // Reset
31 | input wire [16*N-1:0] xn_re, // DFT real input
32 | input wire [16*N-1:0] xn_im, // DFT imaginary input
33 | input wire [16*N*N-1:0] ccos, // Cosine DFT coefficients
34 | input wire [16*N*N-1:0] csin, // Sine DFT coefficients
35 | output wire [16*N-1:0] xk_re, // DFT real output
36 | output wire [16*N-1:0] xk_im // DFT imaginary output
37 | );
38 |
39 |
40 | /***************************************************************************
41 | * Internal Signals
42 | ***************************************************************************/
43 | wire [16*N*N-1:0] t_re, t_im; // Temp signals to store complex products
44 | wire [16*N*N-1:0] a_re, a_im; // Temp signals to store complex sums
45 | reg [1:0] count_fft; // Complex multiplier latency counter
46 | reg ovf; // Overfolow flag for the latency counter
47 |
48 |
49 | /***************************************************************************
50 | * Compute DFT and Resize by 2^(-17)
51 | ***************************************************************************/
52 | // NOTE: The complex multipliers resize by 2^(-17) and not by 2^(-16)
53 | genvar k,n,i;
54 | generate
55 | for(k=0; k < N; k=k+1) begin
56 | // Compute complex products
57 | for(n=0; n < N; n=n+1) begin
58 | complex_mult complex_mult_fft_inst (
59 | .aclk(clk), // input aclk
60 | .aresetn(~reset), // input aresetn
61 | .s_axis_a_tvalid(1'b1), // input s_axis_a_tvalid
62 | .s_axis_a_tdata({
63 | xn_im[16*n+(16-1):16*n],// DFT imaginary input
64 | xn_re[16*n+(16-1):16*n] // DFT real input
65 | }),
66 | .s_axis_b_tvalid(1'b1), // input s_axis_b_tvalid
67 | .s_axis_b_tdata({
68 | -csin[16*(N-1-n)+(16-1)+N*16*(N-1-k):16*(N-1-n)+N*16*(N-1-k)], // sine DFT coefficients
69 | ccos[16*(N-1-n)+(16-1)+N*16*(N-1-k):16*(N-1-n)+N*16*(N-1-k)] // cosine DFT coefficients
70 | }),
71 | .s_axis_ctrl_tvalid(1'b1), // input s_axis_ctrl_tvalid
72 | .s_axis_ctrl_tdata(8'b0), // input [7 : 0] s_axis_ctrl_tdata
73 | .m_axis_dout_tvalid(), // output m_axis_dout_tvalid
74 | .m_axis_dout_tdata({
75 | t_im[16*n+(16-1)+N*16*k:16*n+N*16*k], // DFT imaginary output
76 | t_re[16*n+(16-1)+N*16*k:16*n+N*16*k] // DFT real output
77 | })
78 | );
79 | end
80 |
81 | // Sum up complex products
82 | adder_fft adder_fft_inst_re (
83 | .a(t_re[16*0+(16-1)+N*16*k:16*0+N*16*k]), // input [15 : 0] a
84 | .b(t_re[16*1+(16-1)+N*16*k:16*1+N*16*k]), // input [15 : 0] b
85 | .sclr(reset), // input sclr
86 | .s(a_re[16*0+(16-1)+N*16*k:16*0+N*16*k]) // output [15 : 0] s
87 | );
88 | adder_fft adder_fft_inst_im (
89 | .a(t_im[16*0+(16-1)+N*16*k:16*0+N*16*k]), // input [15 : 0] a
90 | .b(t_im[16*1+(16-1)+N*16*k:16*1+N*16*k]), // input [15 : 0] b
91 | .sclr(reset), // input sclr
92 | .s(a_im[16*0+(16-1)+N*16*k:16*0+N*16*k]) // output [15 : 0] s
93 | );
94 | for(i=2; i < N; i=i+1) begin
95 | adder_fft adder_fft_inst_re_loop (
96 | .a(t_re[16*i+(16-1)+N*16*k:16*i+N*16*k]), // input [15 : 0] a
97 | .b(a_re[16*(i-2)+(16-1)+N*16*k:16*(i-2)+N*16*k]), // input [15 : 0] b
98 | .sclr(reset), // input sclr
99 | .s(a_re[16*(i-1)+(16-1)+N*16*k:16*(i-1)+N*16*k]) // output [15 : 0] s
100 | );
101 | adder_fft adder_fft_inst_im_loop (
102 | .a(t_im[16*i+(16-1)+N*16*k:16*i+N*16*k]), // input [15 : 0] a
103 | .b(a_im[16*(i-2)+(16-1)+N*16*k:16*(i-2)+N*16*k]), // input [15 : 0] b
104 | .sclr(reset), // input sclr
105 | .s(a_im[16*(i-1)+(16-1)+N*16*k:16*(i-1)+N*16*k]) // output [15 : 0] s
106 | );
107 | end
108 |
109 | // Assign output
110 | assign xk_re[16*k+(16-1):16*k] = ovf ? a_re[16*(N-2)+(16-1)+N*16*k:16*(N-2)+N*16*k] : 'h0;
111 | assign xk_im[16*k+(16-1):16*k] = ovf ? a_im[16*(N-2)+(16-1)+N*16*k:16*(N-2)+N*16*k] : 'h0;
112 |
113 | end
114 | endgenerate
115 |
116 |
117 | /***************************************************************************
118 | * Config.
119 | ***************************************************************************/
120 | // Compensate the 4 CLK cycle latency of the complex multiplier
121 | // The first 4 outputs are radom values
122 | always@(posedge clk, posedge reset)
123 | if( reset | (~|{t_re,t_im}) ) begin count_fft<='d1; ovf<=1'b0; end
124 | else if(~ovf) {ovf,count_fft} <= count_fft + 'd1;
125 |
126 |
127 | /***************************************************************************/
128 |
129 |
130 | endmodule
131 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/overview-summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Overview (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | | Overview |
42 | Package |
43 | Class |
44 | Tree |
45 | Index |
46 | Help |
47 |
48 |
49 | |
50 |
51 |
52 | |
53 |
54 |
55 |
56 | |
57 | PREV
58 | NEXT |
59 |
60 | FRAMES
61 | NO FRAMES
62 |
69 |
72 |
73 |
74 | |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | FQM Utilities 3.0.1.1_FOR SS
84 |
85 |
86 |
87 |
88 |
89 | |
90 | Packages |
91 |
92 |
93 | | data |
94 | |
95 |
96 |
97 | | view |
98 | |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | | Overview |
116 | Package |
117 | Class |
118 | Tree |
119 | Index |
120 | Help |
121 |
122 |
123 | |
124 |
125 |
126 | |
127 |
128 |
129 |
130 | |
131 | PREV
132 | NEXT |
133 |
134 | FRAMES
135 | NO FRAMES
136 |
143 |
146 |
147 |
148 | |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/package-tree.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Class Hierarchy (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | |
38 |
39 |
49 | |
50 |
51 |
52 | |
53 |
54 |
55 |
56 | |
57 | PREV
58 | NEXT |
59 |
60 | FRAMES
61 | NO FRAMES
62 |
69 |
72 |
73 |
74 | |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | Hierarchy For Package <Unnamed>
84 |
85 |
86 |
87 | - Package Hierarchies:
- All Packages
88 |
89 |
90 | Class Hierarchy
91 |
92 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | |
105 |
106 |
116 | |
117 |
118 |
119 | |
120 |
121 |
122 |
123 | |
124 | PREV
125 | NEXT |
126 |
127 | FRAMES
128 | NO FRAMES
129 |
136 |
139 |
140 |
141 | |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/package-summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
77 |
78 |
79 |
80 |
81 |
82 | Package <Unnamed>
83 |
84 |
85 |
86 |
87 | |
88 | Class Summary |
89 |
90 |
91 | | Main |
92 | Class containing the main method. |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 | |
109 |
110 |
120 | |
121 |
122 |
123 | |
124 |
125 |
126 |
127 | |
128 | PREV PACKAGE
129 | NEXT PACKAGE |
130 |
131 | FRAMES
132 | NO FRAMES
133 |
140 |
143 |
144 |
145 | |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/transmitter.v:
--------------------------------------------------------------------------------
1 | `timescale 1ns / 1ps
2 | //`include "util/array_pack_unpack.v"
3 | //////////////////////////////////////////////////////////////////////////////////
4 | // Company: Karlsruhe Institute of Technologies (KIT) - ITIV Departement
5 | // Engineer: Sonnino Alberto
6 | //
7 | // Create Date: 11:55:46 05/09/2015
8 | // Design Name: Fourier QAM Modulator v4
9 | // Module Name: transmitter
10 | // Project Name: Fourier QAM Modulator
11 | // Target Devices: Xilinx Virtex 7
12 | // Tool versions: Xilinx ISE Design Suite 14.7
13 | // Description:
14 | // This design aims to implement a parallel functional QAM modulator with filtering
15 | // operation performed in frequency domain.
16 | //
17 | // Dependencies:
18 | // - QAM
19 | // - FFT
20 | // - SRRC_FILTER
21 | // - IFFT
22 | // - MODULATOR
23 | // - DFT_COEFF
24 | // - CARRIERS
25 | //
26 | // Revision:
27 | // Revision 0.01 - File Created
28 | //
29 | // Additional Comments:
30 | //////////////////////////////////////////////////////////////////////////////////
31 | module transmitter #(
32 | /* Parameters */
33 | parameter N = 16, // Number of paralle inputs
34 | parameter FORMAT = 3'b100 // QAM order
35 | )(
36 | /* Input and output ports */
37 | input wire clk, // System clock
38 | input wire reset, // Global reset
39 | input wire [FORMAT*N-1:0] in, // Clustered input stream
40 | output wire tvalid, // TVALID flag
41 | output wire [16*N-1:0] out // Transmiter's output
42 | /* Wires for testbench */
43 |
44 | );
45 |
46 |
47 | /***************************************************************************
48 | * Internal Signals
49 | ***************************************************************************/
50 | wire [16*N*N-1:0] ccos, csin; // DFT coefficients
51 | wire [16*N-1:0] H; // Filter coefficients
52 | wire [15:0] H_max; // Highest filter coefficient
53 | wire [16*N-1:0] sin, cos; // Carriers
54 | wire [16*N-1:0] I, Q;
55 | wire [16*N-1:0] xk_re, xk_im;
56 | wire [16*N-1:0] Y_re, Y_im;
57 | wire [16*N-1:0] sn_re, sn_im;
58 | // ----> other internal signals are exported to testbench
59 |
60 |
61 | /***************************************************************************
62 | * Config.
63 | ***************************************************************************/
64 | // Load DFT Coefficients
65 | dft_coeff dft_coeff_inst(
66 | .ccos(ccos), // Cosine DFT coefficients
67 | .csin(csin) // Sine DFT coefficients
68 | );
69 | // Load filter coefficients
70 | filter_coeff filter_coeff_inst(
71 | .H(H), // Filter coefficients
72 | .H_max(H_max) // Highest filter coefficient
73 | );
74 | // Load carriers
75 | carriers carriers_inst(
76 | .clk(clk), // Clock
77 | .reset(reset | (~|{sn_re,sn_im})), // Reset
78 | .cos(cos), // Cosine carrier
79 | .sin(sin) // Sine carrier
80 | );
81 |
82 | // Assign tvalid signal
83 | assign tvalid = 'b0;
84 |
85 | /***************************************************************************/
86 |
87 |
88 |
89 | /***************************************************************************
90 | * QAM mapping
91 | ***************************************************************************/
92 | QAM #(
93 | .N(N), // Number of parallel inputs
94 | .W(16), // Bus Witdh
95 | .FORMAT(FORMAT) // QAM order
96 | ) QAM_isnt(
97 | .in(in), // Clustered input stream
98 | .last(H_max), // Last constellation point
99 | .I(I), // In-phase component
100 | .Q(Q) // Quadrature component
101 | );
102 |
103 |
104 | /***************************************************************************
105 | * DFT
106 | ***************************************************************************/
107 | dft #(
108 | .N(N) // Transform length
109 | ) dft_inst(
110 | .clk(clk), // Clock
111 | .reset(reset), // Reset
112 | .xn_re(I), // DFT real input
113 | .xn_im(Q), // DFT imaginary input
114 | .ccos(ccos), // Cosine DFT coefficients
115 | .csin(csin), // Sine DFT coefficients
116 | .xk_re(xk_re), // DFT real input
117 | .xk_im(xk_im) // DFT imaginary input
118 | );
119 |
120 |
121 | /***************************************************************************
122 | * SRRC filter
123 | ***************************************************************************/
124 | SRRC_filter #(
125 | .N(N) // Number of parallel inputs
126 | ) SRRC_filter_inst (
127 | .clk(clk), // Clock
128 | .reset(reset), // Reset
129 | .H(H), // Filter coefficients
130 | .X_re(xk_re), // Filter's real input
131 | .X_im(xk_im), // Filter's imaginary input
132 | .Y_re(Y_re), // Filter's real output
133 | .Y_im(Y_im) // Filter's imaginary output
134 | );
135 |
136 |
137 | /***************************************************************************
138 | * IDFT
139 | ***************************************************************************/
140 | idft #(
141 | .N(N) // Transform length
142 | ) idft_inst(
143 | .clk(clk), // Clock
144 | .reset(reset), // Reset
145 | .xn_re(Y_re), // DFT real input
146 | .xn_im(Y_im), // DFT imaginary input
147 | .ccos(ccos), // Cosine DFT coefficients
148 | .csin(csin), // Sine DFT coefficients
149 | .xk_re(sn_re), // DFT real input
150 | .xk_im(sn_im) // DFT imaginary input
151 | );
152 |
153 |
154 | /***************************************************************************
155 | * Modulator
156 | ***************************************************************************/
157 | modulator #(
158 | .N(N) // Number of parallel inputs
159 | ) modulator_inst (
160 | .clk(clk), // Clock
161 | .reset(reset), // Reset
162 | .I(sn_re), // In-phase input
163 | .Q(sn_im), // In-Quadrature input
164 | .sin(sin), // In-phase carrier
165 | .cos(cos), // Quadrature carrier
166 | .dout(out) // Output
167 | );
168 |
169 | /***************************************************************************/
170 |
171 |
172 | endmodule
173 |
--------------------------------------------------------------------------------
/MATLAB/FQM_parallel_data_dec_Y_im.txt:
--------------------------------------------------------------------------------
1 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
4 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
6 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
8 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
9 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
10 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
11 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
13 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
14 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
15 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
18 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
19 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
21 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
22 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
29 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
30 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
31 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
32 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
33 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
34 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
35 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
36 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
37 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
38 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
39 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
40 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
41 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
42 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
43 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
44 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
45 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
46 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
47 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
48 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
49 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
50 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
51 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
52 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
53 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
54 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
55 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
56 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
57 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
58 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
59 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
60 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
61 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
62 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
63 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
64 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
65 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
66 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
67 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
68 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
69 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
70 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
71 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
72 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
73 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
74 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
75 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
76 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
77 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
78 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
79 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
80 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
81 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
82 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
83 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
84 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
85 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
86 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
87 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
88 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
89 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
90 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
91 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
92 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
93 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
94 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
95 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
96 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
97 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
98 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
99 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
100 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
101 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
102 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
103 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
104 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
105 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
106 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
107 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
108 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
109 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
110 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
111 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
112 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
113 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
114 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
115 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
116 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
117 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
118 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
119 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
120 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
121 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
122 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
123 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
124 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
125 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
126 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
127 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
128 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
129 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
130 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
131 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
132 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
133 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
134 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
135 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
136 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
137 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
138 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
139 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
140 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
141 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
142 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
143 | -166,14,307,-78,0,958,-964,78,-113,104,-43,0,0,0,0,0
144 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
145 | 0,189,-227,-111,0,134,0,-39,0,-29,67,0,0,0,0,0
146 | 0,-219,-114,150,0,431,455,-1,0,0,33,0,0,0,0,0
147 | 150,161,-574,259,-1818,-347,160,221,-170,23,98,0,0,0,0,0
148 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/view/GUI.java:
--------------------------------------------------------------------------------
1 | package view;
2 |
3 | import data.*;
4 |
5 | import java.awt.Dimension;
6 | import java.awt.Color;
7 | import java.awt.Font;
8 | import java.awt.BorderLayout;
9 | import java.awt.Cursor;
10 |
11 | import java.awt.event.ActionListener;
12 | import java.awt.event.ActionEvent;
13 |
14 | import javax.swing.JFrame;
15 | import javax.swing.JComponent;
16 | import javax.swing.JPanel;
17 | import javax.swing.JTabbedPane;
18 | import javax.swing.Box;
19 | import javax.swing.JButton;
20 | import javax.swing.BorderFactory;
21 |
22 |
23 | /**
24 | * Main GUI.
25 | *
26 | * @author Sonnino
27 | * @version 2.0.1
28 | */
29 | public class GUI extends JFrame
30 | {
31 | // parameters
32 | public static final int FRAME_WIDTH = 700, FRAME_HEIGHT = 500;
33 | public static final int GENERATE_BUTTON_WIDTH = 150, GENERATE_BUTTON_HEIGHT = 70;
34 |
35 | // variables
36 | private JButton generateButton;
37 | private GeneralPanel generalPanel;
38 |
39 | /**
40 | * Constructor for objects of class GUI
41 | */
42 | public GUI()
43 | {
44 | // main panel
45 | JPanel pane = new JPanel(new BorderLayout()); //pane.setBackground(Color.WHITE);
46 |
47 | // create tabs
48 | //JTabbedPane tabbedpane = new JTabbedPane(); //tabbedpane.setBackground(Color.WHITE);
49 | //tabbedpane.addTab("General", new GeneralPanel());
50 | //tabbedpane.addTab("Advanced", new AdvancedPanel());
51 | //tabbedpane.addTab("Converter", new ConverterPanel());
52 |
53 | // generate button
54 | generateButton = new JButton("Generate");
55 | generateButton.setPreferredSize(new Dimension(GENERATE_BUTTON_WIDTH, GENERATE_BUTTON_HEIGHT));
56 | generateButton.setMinimumSize(generateButton.getPreferredSize());
57 | generateButton.setMaximumSize(generateButton.getPreferredSize());
58 | generateButton.setFont(new Font("sans-serif",Font.PLAIN,16));
59 | //generateButton.setForeground(ColorLibrary.APPLE_BLUE);
60 | //generateButton.setBackground(Color.WHITE);
61 | generateButton.addActionListener(new ButtonListener());
62 |
63 | generalPanel = new GeneralPanel();
64 |
65 | // assemble
66 | pane.add(generalPanel,BorderLayout.CENTER);
67 | pane.add(generateButton,BorderLayout.SOUTH);
68 | this.setContentPane(pane);
69 |
70 | // setup frame
71 | this.setTitle(Const.NAME+" v"+Const.VERSION); //this.setBackground(ColorLibrary.LIGHT_GREY);
72 | this.setPreferredSize(new Dimension(FRAME_WIDTH,FRAME_HEIGHT));
73 | this.pack();
74 | this.setLocationRelativeTo(null); this.setResizable(false);
75 |
76 | try {
77 | //if(!System.getProperty("os.name").equalsIgnoreCase("mac os X")){
78 | javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
79 | javax.swing.SwingUtilities.updateComponentTreeUI(this);
80 | //}
81 | }
82 | catch (Exception exc) {exc.printStackTrace();}
83 |
84 |
85 | this.setVisible(true);
86 | }
87 |
88 | /**
89 | * Test the GUI
90 | */
91 | public static void test(){
92 | new GUI();
93 | }
94 |
95 | private class ButtonListener implements ActionListener
96 | {
97 | public void actionPerformed(ActionEvent evt){
98 | if(evt.getSource() == generateButton){
99 | Chooser chooser = new Chooser(Chooser.DIRECTORIES_ONLY);
100 | chooser.show();
101 | String path = "";
102 | try{
103 | path = chooser.getSelectedFile().getPath() + System.getProperty("file.separator");
104 |
105 | }
106 | catch(Exception exc){
107 | chooser.setVisible(false);
108 | return;
109 | }
110 | generate(path);
111 | }
112 | }
113 |
114 | public void generate(String path){
115 | /*
116 | * Declare variables
117 | */
118 | String modulename;
119 | String outputfile;
120 |
121 | // reteive data:
122 | double[] filterCoeffTab = generalPanel.getFilterTable();
123 | if(filterCoeffTab == null){return;} // invalid coefficents
124 |
125 |
126 | double carrierFrequency = generalPanel.getCarrierFrequency();
127 | if(carrierFrequency == 0){return;} // invalid frequency
128 |
129 |
130 |
131 |
132 | /*
133 | * DFT coefficients
134 | */
135 | // output file
136 | modulename = Const.DEFAULT_DFT_MODULENAME;
137 | outputfile = path+modulename+Const.VERILOG_EXTENSION;
138 |
139 | // generate coefficients
140 | DftCoeff dftCoeff = new DftCoeff(generalPanel.getDFTSize());
141 |
142 | // rescale
143 | dftCoeff.rescale(Const.DEFAULT_DFT_RESC_FACTOR);
144 |
145 | // export
146 | try{Export.exportForVerilog(dftCoeff, Const.DEFAULT_PRECISION, modulename, outputfile);}
147 | catch(ProgException exc){System.err.println(exc.getMessage());}
148 |
149 |
150 |
151 | /*
152 | * Filter coefficients
153 | */
154 | // output file
155 | modulename = Const.DEFAULT_FILTER_MODULENAME;
156 | outputfile = path+modulename+Const.VERILOG_EXTENSION;
157 |
158 | // generate coefficients
159 |
160 |
161 | FilterCoeff filterCoeff = new FilterCoeff(generalPanel.getDFTSize(),filterCoeffTab);
162 |
163 | // rescale
164 | filterCoeff.rescale(Const.DEFAULT_FILTER_RESC_FACTOR);
165 |
166 | // export
167 | try{Export.exportForVerilog(filterCoeff, Const.DEFAULT_PRECISION, modulename, outputfile);}
168 | catch(ProgException exc){System.err.println(exc.getMessage());}
169 |
170 |
171 |
172 | /*
173 | * Carriers
174 | */
175 | // output file
176 | modulename = Const.DEFAULT_CARRIERS_MODULENAME;
177 | outputfile = path+modulename+Const.VERILOG_EXTENSION;
178 |
179 | // generate coefficients
180 |
181 | Carriers carriers = new Carriers(carrierFrequency, generalPanel.getDFTSize());
182 |
183 | // rescale
184 | carriers.rescale(Const.DEFAULT_CARRIERS_RESC_FACTOR);
185 |
186 | // export
187 | try{Export.exportForVerilog(carriers, Const.DEFAULT_PRECISION, modulename, outputfile);}
188 | catch(ProgException exc){System.err.println(exc.getMessage());}
189 |
190 | }
191 | }
192 | }
193 |
--------------------------------------------------------------------------------
/MATLAB/FQM_parallel_data_dec_out.txt:
--------------------------------------------------------------------------------
1 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
4 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
6 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
8 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
9 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
10 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
11 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
13 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
14 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
15 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
18 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
19 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
21 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
22 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
29 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
30 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
31 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
32 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
33 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
34 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
35 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
36 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
37 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
38 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
39 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
40 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
41 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
42 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
43 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
44 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
45 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
46 | -74,-3,39,18,-75,15,88,-60,-8,23,-31,18,-10,-20,81,-1
47 | 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2
48 | 18,13,-37,26,-42,-78,108,5,-77,129,-19,-75,53,-19,-15,30
49 | 35,-86,77,49,-43,41,-24,-35,-14,6,41,-50,35,30,-99,51
50 | 28,77,-103,-40,109,-74,-76,28,91,-5,-51,-4,27,-42,-12,-32
51 | -26,63,15,-28,-29,89,6,-81,60,-13,-4,30,-16,37,51,-84
52 | -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-5,-5,-5,-5
53 | -4,-24,-19,11,-63,50,95,-98,41,72,-124,16,45,-53,36,13
54 | -51,0,104,-59,-17,19,-63,4,12,31,-4,-31,61,-61,-24,91
55 | 68,-42,-98,98,5,-99,29,93,17,-79,-19,31,-20,-22,-1,14
56 | 58,41,-31,-36,57,40,-84,11,45,-30,29,0,-1,42,-49,-51
57 | -6,-6,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5
58 | -21,-28,25,-19,3,109,-49,-65,103,-84,-58,86,-25,-13,37,-22
59 | -66,86,-13,-86,33,-29,-15,37,22,13,-43,31,3,-68,85,6
60 | 14,-102,41,101,-105,13,93,30,-81,-43,40,23,-39,28,12,40
61 | 62,-37,-33,5,64,-64,-58,87,-32,-6,21,-29,16,-9,-81,53
62 | 0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2
63 | -9,7,35,-23,65,17,-125,57,23,-124,88,36,-61,45,-12,-27
64 | 10,54,-112,6,37,-37,53,19,1,-22,-22,50,-59,19,77,-88
65 | -59,-21,125,-36,-70,106,29,-76,-67,52,43,-17,-3,39,8,11
66 | -20,-64,9,39,-17,-79,48,43,-65,27,-15,-19,11,-49,-1,84
67 | 6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6
68 | 15,33,-4,4,38,-98,-28,101,-89,7,112,-63,-13,41,-45,5
69 | 72,-52,-57,90,-9,7,47,-26,-21,-26,30,0,-39,79,-37,-60
70 | -50,89,35,-123,62,53,-75,-76,39,75,-13,-33,37,-4,-7,-33
71 | -74,-3,39,18,-75,15,88,-60,-8,23,-31,18,-10,-20,81,-1
72 | 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2
73 | 18,13,-37,26,-42,-78,108,5,-77,129,-19,-75,53,-19,-15,30
74 | 35,-86,77,49,-43,41,-24,-35,-14,6,41,-50,35,30,-99,51
75 | 28,77,-103,-40,109,-74,-76,28,91,-5,-51,-4,27,-42,-12,-32
76 | -26,63,15,-28,-29,89,6,-81,60,-13,-4,30,-16,37,51,-84
77 | -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-5,-5,-5,-5
78 | -4,-24,-19,11,-63,50,95,-98,41,72,-124,16,45,-53,36,13
79 | -51,0,104,-59,-17,19,-63,4,12,31,-4,-31,61,-61,-24,91
80 | 68,-42,-98,98,5,-99,29,93,17,-79,-19,31,-20,-22,-1,14
81 | 58,41,-31,-36,57,40,-84,11,45,-30,29,0,-1,42,-49,-51
82 | -6,-6,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5
83 | -21,-28,25,-19,3,109,-49,-65,103,-84,-58,86,-25,-13,37,-22
84 | -66,86,-13,-86,33,-29,-15,37,22,13,-43,31,3,-68,85,6
85 | 14,-102,41,101,-105,13,93,30,-81,-43,40,23,-39,28,12,40
86 | 62,-37,-33,5,64,-64,-58,87,-32,-6,21,-29,16,-9,-81,53
87 | 0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2
88 | -9,7,35,-23,65,17,-125,57,23,-124,88,36,-61,45,-12,-27
89 | 10,54,-112,6,37,-37,53,19,1,-22,-22,50,-59,19,77,-88
90 | -59,-21,125,-36,-70,106,29,-76,-67,52,43,-17,-3,39,8,11
91 | -20,-64,9,39,-17,-79,48,43,-65,27,-15,-19,11,-49,-1,84
92 | 6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6
93 | 15,33,-4,4,38,-98,-28,101,-89,7,112,-63,-13,41,-45,5
94 | 72,-52,-57,90,-9,7,47,-26,-21,-26,30,0,-39,79,-37,-60
95 | -50,89,35,-123,62,53,-75,-76,39,75,-13,-33,37,-4,-7,-33
96 | -74,-3,39,18,-75,15,88,-60,-8,23,-31,18,-10,-20,81,-1
97 | 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2
98 | 18,13,-37,26,-42,-78,108,5,-77,129,-19,-75,53,-19,-15,30
99 | 35,-86,77,49,-43,41,-24,-35,-14,6,41,-50,35,30,-99,51
100 | 28,77,-103,-40,109,-74,-76,28,91,-5,-51,-4,27,-42,-12,-32
101 | -26,63,15,-28,-29,89,6,-81,60,-13,-4,30,-16,37,51,-84
102 | -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-5,-5,-5,-5
103 | -4,-24,-19,11,-63,50,95,-98,41,72,-124,16,45,-53,36,13
104 | -51,0,104,-59,-17,19,-63,4,12,31,-4,-31,61,-61,-24,91
105 | 68,-42,-98,98,5,-99,29,93,17,-79,-19,31,-20,-22,-1,14
106 | 58,41,-31,-36,57,40,-84,11,45,-30,29,0,-1,42,-49,-51
107 | -6,-6,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5
108 | -21,-28,25,-19,3,109,-49,-65,103,-84,-58,86,-25,-13,37,-22
109 | -66,86,-13,-86,33,-29,-15,37,22,13,-43,31,3,-68,85,6
110 | 14,-102,41,101,-105,13,93,30,-81,-43,40,23,-39,28,12,40
111 | 62,-37,-33,5,64,-64,-58,87,-32,-6,21,-29,16,-9,-81,53
112 | 0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2
113 | -9,7,35,-23,65,17,-125,57,23,-124,88,36,-61,45,-12,-27
114 | 10,54,-112,6,37,-37,53,19,1,-22,-22,50,-59,19,77,-88
115 | -59,-21,125,-36,-70,106,29,-76,-67,52,43,-17,-3,39,8,11
116 | -20,-64,9,39,-17,-79,48,43,-65,27,-15,-19,11,-49,-1,84
117 | 6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6
118 | 15,33,-4,4,38,-98,-28,101,-89,7,112,-63,-13,41,-45,5
119 | 72,-52,-57,90,-9,7,47,-26,-21,-26,30,0,-39,79,-37,-60
120 | -50,89,35,-123,62,53,-75,-76,39,75,-13,-33,37,-4,-7,-33
121 | -74,-3,39,18,-75,15,88,-60,-8,23,-31,18,-10,-20,81,-1
122 | 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2
123 | 18,13,-37,26,-42,-78,108,5,-77,129,-19,-75,53,-19,-15,30
124 | 35,-86,77,49,-43,41,-24,-35,-14,6,41,-50,35,30,-99,51
125 | 28,77,-103,-40,109,-74,-76,28,91,-5,-51,-4,27,-42,-12,-32
126 | -26,63,15,-28,-29,89,6,-81,60,-13,-4,30,-16,37,51,-84
127 | -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-5,-5,-5,-5
128 | -4,-24,-19,11,-63,50,95,-98,41,72,-124,16,45,-53,36,13
129 | -51,0,104,-59,-17,19,-63,4,12,31,-4,-31,61,-61,-24,91
130 | 68,-42,-98,98,5,-99,29,93,17,-79,-19,31,-20,-22,-1,14
131 | 58,41,-31,-36,57,40,-84,11,45,-30,29,0,-1,42,-49,-51
132 | -6,-6,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5
133 | -21,-28,25,-19,3,109,-49,-65,103,-84,-58,86,-25,-13,37,-22
134 | -66,86,-13,-86,33,-29,-15,37,22,13,-43,31,3,-68,85,6
135 | 14,-102,41,101,-105,13,93,30,-81,-43,40,23,-39,28,12,40
136 | 62,-37,-33,5,64,-64,-58,87,-32,-6,21,-29,16,-9,-81,53
137 | 0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2
138 | -9,7,35,-23,65,17,-125,57,23,-124,88,36,-61,45,-12,-27
139 | 10,54,-112,6,37,-37,53,19,1,-22,-22,50,-59,19,77,-88
140 | -59,-21,125,-36,-70,106,29,-76,-67,52,43,-17,-3,39,8,11
141 | -20,-64,9,39,-17,-79,48,43,-65,27,-15,-19,11,-49,-1,84
142 | 6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6
143 | 15,33,-4,4,38,-98,-28,101,-89,7,112,-63,-13,41,-45,5
144 | 72,-52,-57,90,-9,7,47,-26,-21,-26,30,0,-39,79,-37,-60
145 | -50,89,35,-123,62,53,-75,-76,39,75,-13,-33,37,-4,-7,-33
146 | -74,-3,39,18,-75,15,88,-60,-8,23,-31,18,-10,-20,81,-1
147 | 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2
148 |
--------------------------------------------------------------------------------
/MATLAB/FQM_parallel_data_dec_Y_re.txt:
--------------------------------------------------------------------------------
1 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
4 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
6 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
8 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
9 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
10 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
11 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
13 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
14 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
15 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
18 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
19 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
20 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
21 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
22 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
29 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
30 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
31 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
32 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
33 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
34 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
35 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
36 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
37 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
38 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
39 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
40 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
41 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
42 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
43 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
44 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
45 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
46 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
47 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
48 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
49 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
50 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
51 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
52 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
53 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
54 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
55 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
56 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
57 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
58 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
59 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
60 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
61 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
62 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
63 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
64 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
65 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
66 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
67 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
68 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
69 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
70 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
71 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
72 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
73 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
74 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
75 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
76 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
77 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
78 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
79 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
80 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
81 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
82 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
83 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
84 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
85 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
86 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
87 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
88 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
89 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
90 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
91 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
92 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
93 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
94 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
95 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
96 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
97 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
98 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
99 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
100 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
101 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
102 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
103 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
104 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
105 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
106 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
107 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
108 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
109 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
110 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
111 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
112 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
113 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
114 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
115 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
116 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
117 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
118 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
119 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
120 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
121 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
122 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
123 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
124 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
125 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
126 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
127 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
128 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
129 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
130 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
131 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
132 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
133 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
134 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
135 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
136 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
137 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
138 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
139 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
140 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
141 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
142 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
143 | 0,30,-100,-210,-1364,-565,-133,-216,0,30,170,0,0,0,0,0
144 | 133,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
145 | 33,-31,595,5,-455,2009,-1474,-19,-113,14,108,0,0,0,0,0
146 | 0,-2,-595,45,0,1444,1474,-58,0,44,-108,0,0,0,0,0
147 | -50,-32,130,-63,909,-1212,-898,-93,170,7,-62,0,0,0,0,0
148 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/data/package-tree.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | data Class Hierarchy (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | Hierarchy For Package data
84 |
85 |
86 |
87 | - Package Hierarchies:
- All Packages
88 |
89 |
90 | Class Hierarchy
91 |
92 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | |
112 |
113 |
123 | |
124 |
125 |
126 | |
127 |
128 |
129 |
130 | |
131 | PREV
132 | NEXT |
133 |
134 | FRAMES
135 | NO FRAMES
136 |
143 |
146 |
147 |
148 | |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/doc/data/package-summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | data (FQM Utilities 3.0.1.1_FOR SS)
9 |
10 |
11 |
12 |
13 |
14 |
15 |
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
77 |
78 |
79 |
80 |
81 |
82 | Package data
83 |
84 |
85 |
86 |
87 | |
88 | Class Summary |
89 |
90 |
91 | | Carriers |
92 | Class describing the modulator carriers. |
93 |
94 |
95 | | Const |
96 | Class containing the global constant fields. |
97 |
98 |
99 | | DftCoeff |
100 | Class describing the DFT coefficients. |
101 |
102 |
103 | | Export |
104 | Export DFT dftCoefficients. |
105 |
106 |
107 | | FilterCoeff |
108 | Class describing the Filter coefficients. |
109 |
110 |
111 | | Generator |
112 | Abstract class Generator - Ground of all coefficients-generator class |
113 |
114 |
115 | | Process |
116 | Call containing the data processing methods. |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | |
126 | Exception Summary |
127 |
128 |
129 | | ProgException |
130 | Class representing an exception. |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
--------------------------------------------------------------------------------
/Hardware/FQM_16ns_NO_DSP/fourier_QAM_modulator/dft_coeff.v:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////
2 | // Auto-generated file - FFT_coef v15.8.2
3 | // Generated on 2015/08/30 13:43:32
4 | //
5 | //
6 | // Additional comments:
7 | // rescaling factor 16384.0
8 | ////////////////////////////////////////////////////////////
9 | module dft_coeff(
10 | output wire [4095:0] ccos,
11 | output wire [4095:0] csin
12 | );
13 |
14 |
15 |
16 | assign ccos = 4096'b0100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000000111011001000010010110101000001000110000111111000000000000000001110011110000010110100101011111111000100110111111100000000000000110001001101111111010010101111111110011110000010000000000000000000011000011111100010110101000001001110110010000101000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000000110000111111011010010101111111100010011011111000000000000000000111011001000010010110101000001111001111000001011000000000000001110011110000010001011010100000100111011001000010000000000000000110001001101111111010010101111110001100001111110010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000001110011110000010110100101011111100111011001000010000000000000000110001001101111100101101010000010001100001111110110000000000000000011000011111100010110101000001110001001101111100000000000000000011101100100001110100101011111111100111100000100100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000101101010000011100000000000000001011010100000100000000000000001101001010111111010000000000000011000100110111110010110101000001111001111000001000000000000000000001100001111110110100101011111100111011001000011100000000000000001110110010000111010010101111110001100001111110000000000000000011100111100000100010110101000001110001001101111101000000000000001100000000000000010000000000000011000000000000000100000000000000110000000000000001000000000000001100000000000000010000000000000011000000000000000100000000000000110000000000000001000000000000001100000000000000010000000000000011000000000000000100000000000000110001001101111100101101010000011110011110000010000000000000000000011000011111101101001010111111001110110010000111000000000000000011101100100001110100101011111100011000011111100000000000000000111001111000001000101101010000011100010011011111010000000000000011010010101111110000000000000000001011010100000111000000000000000010110101000001000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001110011110000010110100101011111100111011001000010000000000000000110001001101111100101101010000010001100001111110110000000000000000011000011111100010110101000001110001001101111100000000000000000011101100100001110100101011111111100111100000100100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000011000011111101101001010111111110001001101111100000000000000000011101100100001001011010100000111100111100000101100000000000000111001111000001000101101010000010011101100100001000000000000000011000100110111111101001010111111000110000111111001000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000001110110010000100101101010000010001100001111110000000000000000011100111100000101101001010111111110001001101111111000000000000001100010011011111110100101011111111100111100000100000000000000000000110000111111000101101010000010011101100100001;
17 |
18 | assign csin = 4096'b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000011111100010110101000001001110110010000101000000000000000011101100100001001011010100000100011000011111100000000000000000111001111000001011010010101111111100010011011111110000000000000011000100110111111101001010111111111001111000001000000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000001011010100000100000000000000001101001010111111110000000000000011010010101111110000000000000000001110110010000100101101010000011110011110000010110000000000000011100111100000100010110101000001001110110010000100000000000000001100010011011111110100101011111100011000011111100100000000000000000110000111111011010010101111111100010011011111000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000011101100100001110100101011111111100111100000100100000000000000111001111000001011010010101111110011101100100001000000000000000011000100110111110010110101000001000110000111111011000000000000000001100001111110001011010100000111000100110111110000000000000000001011010100000111000000000000000010110101000001000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000011000011111101101001010111111001110110010000111000000000000000011101100100001110100101011111100011000011111100000000000000000111001111000001000101101010000011100010011011111010000000000000011000100110111110010110101000001111001111000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001111000001000101101010000011100010011011111010000000000000011000100110111110010110101000001111001111000001000000000000000000001100001111110110100101011111100111011001000011100000000000000001110110010000111010010101111110001100001111110000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000101101010000011100000000000000001011010100000100000000000000001100010011011111001011010100000100011000011111101100000000000000000110000111111000101101010000011100010011011111000000000000000000111011001000011101001010111111111001111000001001000000000000001110011110000010110100101011111100111011001000010000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000100110111111101001010111111000110000111111001000000000000000001100001111110110100101011111111000100110111110000000000000000001110110010000100101101010000011110011110000010110000000000000011100111100000100010110101000001001110110010000100000000000000001101001010111111110000000000000011010010101111110000000000000000001011010100000101000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000111001111000001011010010101111111100010011011111110000000000000011000100110111111101001010111111111001111000001000000000000000000001100001111110001011010100000100111011001000010100000000000000001110110010000100101101010000010001100001111110;
19 |
20 |
21 |
22 | endmodule
23 |
--------------------------------------------------------------------------------
/FQM Utility/FQM Utilities 4.1.1 - Source Code/dft_coeff.v:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////
2 | // Auto-generated file - FQM Utility v4.1.1
3 | // Generated on 2015/10/04 11:17:52
4 | //
5 | //
6 | // Additional comments:
7 | // rescaling factor 16384.0
8 | ////////////////////////////////////////////////////////////
9 | module dft_coeff(
10 | output wire [4095:0] ccos,
11 | output wire [4095:0] csin
12 | );
13 |
14 |
15 |
16 | assign ccos = 4096'b0100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000000111011001000010010110101000001000110000111111000000000000000001110011110000010110100101011111111000100110111111100000000000000110001001101111111010010101111111110011110000010000000000000000000011000011111100010110101000001001110110010000101000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000000110000111111011010010101111111100010011011111000000000000000000111011001000010010110101000001111001111000001011000000000000001110011110000010001011010100000100111011001000010000000000000000110001001101111111010010101111110001100001111110010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000001110011110000010110100101011111100111011001000010000000000000000110001001101111100101101010000010001100001111110110000000000000000011000011111100010110101000001110001001101111100000000000000000011101100100001110100101011111111100111100000100100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000101101010000011100000000000000001011010100000100000000000000001101001010111111010000000000000011000100110111110010110101000001111001111000001000000000000000000001100001111110110100101011111100111011001000011100000000000000001110110010000111010010101111110001100001111110000000000000000011100111100000100010110101000001110001001101111101000000000000001100000000000000010000000000000011000000000000000100000000000000110000000000000001000000000000001100000000000000010000000000000011000000000000000100000000000000110000000000000001000000000000001100000000000000010000000000000011000000000000000100000000000000110001001101111100101101010000011110011110000010000000000000000000011000011111101101001010111111001110110010000111000000000000000011101100100001110100101011111100011000011111100000000000000000111001111000001000101101010000011100010011011111010000000000000011010010101111110000000000000000001011010100000111000000000000000010110101000001000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001110011110000010110100101011111100111011001000010000000000000000110001001101111100101101010000010001100001111110110000000000000000011000011111100010110101000001110001001101111100000000000000000011101100100001110100101011111111100111100000100100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000011000011111101101001010111111110001001101111100000000000000000011101100100001001011010100000111100111100000101100000000000000111001111000001000101101010000010011101100100001000000000000000011000100110111111101001010111111000110000111111001000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000001110110010000100101101010000010001100001111110000000000000000011100111100000101101001010111111110001001101111111000000000000001100010011011111110100101011111111100111100000100000000000000000000110000111111000101101010000010011101100100001;
17 |
18 | assign csin = 4096'b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000011111100010110101000001001110110010000101000000000000000011101100100001001011010100000100011000011111100000000000000000111001111000001011010010101111111100010011011111110000000000000011000100110111111101001010111111111001111000001000000000000000000010110101000001010000000000000000101101010000010000000000000000110100101011111111000000000000001101001010111111000000000000000000101101010000010100000000000000001011010100000100000000000000001101001010111111110000000000000011010010101111110000000000000000001110110010000100101101010000011110011110000010110000000000000011100111100000100010110101000001001110110010000100000000000000001100010011011111110100101011111100011000011111100100000000000000000110000111111011010010101111111100010011011111000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000011101100100001110100101011111111100111100000100100000000000000111001111000001011010010101111110011101100100001000000000000000011000100110111110010110101000001000110000111111011000000000000000001100001111110001011010100000111000100110111110000000000000000001011010100000111000000000000000010110101000001000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000011000011111101101001010111111001110110010000111000000000000000011101100100001110100101011111100011000011111100000000000000000111001111000001000101101010000011100010011011111010000000000000011000100110111110010110101000001111001111000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001111000001000101101010000011100010011011111010000000000000011000100110111110010110101000001111001111000001000000000000000000001100001111110110100101011111100111011001000011100000000000000001110110010000111010010101111110001100001111110000000000000000011010010101111110100000000000000110100101011111100000000000000000010110101000001110000000000000000101101010000010000000000000000110100101011111101000000000000001101001010111111000000000000000000101101010000011100000000000000001011010100000100000000000000001100010011011111001011010100000100011000011111101100000000000000000110000111111000101101010000011100010011011111000000000000000000111011001000011101001010111111111001111000001001000000000000001110011110000010110100101011111100111011001000010000000000000000110000000000000000000000000000000100000000000000000000000000000011000000000000000000000000000000010000000000000000000000000000001100000000000000000000000000000001000000000000000000000000000000110000000000000000000000000000000100000000000000000000000000000011000100110111111101001010111111000110000111111001000000000000000001100001111110110100101011111111000100110111110000000000000000001110110010000100101101010000011110011110000010110000000000000011100111100000100010110101000001001110110010000100000000000000001101001010111111110000000000000011010010101111110000000000000000001011010100000101000000000000000010110101000001000000000000000011010010101111111100000000000000110100101011111100000000000000000010110101000001010000000000000000101101010000010000000000000000111001111000001011010010101111111100010011011111110000000000000011000100110111111101001010111111111001111000001000000000000000000001100001111110001011010100000100111011001000010100000000000000001110110010000100101101010000010001100001111110;
19 |
20 |
21 |
22 | endmodule
23 |
--------------------------------------------------------------------------------