├── 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 | 24 | 25 | 28 | 29 |
GeneralPanel 26 |
27 |
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 | 24 | 25 | 28 | 29 |
GeneralPanel 26 |
27 |
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 | 28 | 29 |
24 | Classes  25 | 26 |
27 | GeneralPanel
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 | 28 | 29 |
24 | Classes  25 | 26 |
27 | Main
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 | 40 | 41 | 42 | 43 | 44 | 45 |
39 | Class Summary
GeneralPanelPanel allowing advanved use of the application.
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 | 21 | 22 | 24 | 25 |
23 |
26 | 27 | 28 | 29 | 41 | 42 |
All Classes 30 |

31 | 32 | Packages 33 |
34 | <unnamed package> 35 |
36 | data 37 |
38 | view 39 |
40 |

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 | 25 | 26 | 27 | 28 | <H2> 29 | Frame Alert</H2> 30 | 31 | <P> 32 | This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. 33 | <BR> 34 | Link to<A HREF="view/package-summary.html">Non-frame version.</A> 35 | 36 | 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 | 22 | 23 | 40 | 41 |
24 | Classes  25 | 26 |
27 | Carriers 28 |
29 | Const 30 |
31 | DftCoeff 32 |
33 | Export 34 |
35 | FilterCoeff 36 |
37 | Generator 38 |
39 | Process
42 | 43 | 44 | 45 | 46 | 51 | 52 |
47 | Exceptions  48 | 49 |
50 | ProgException
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 | [![license](https://img.shields.io/badge/license-GPL3-brightgreen.svg)](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 | 46 | 47 |
45 | view.*
48 | 49 |

50 | 51 | 52 | 53 | 54 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 66 | 67 | 68 | 70 | 71 | 72 | 73 | 74 | 76 | 77 | 78 | 79 | 80 | 81 |
view.GeneralPanel
57 | public static final intFILTER_TABLE_HEIGHT100
63 | public static final intFILTER_TABLE_WIDTH263
69 | public static final intFREQUENCY_FIELD_HEIGHT25
75 | public static final intFREQUENCY_FIELD_WIDTH200
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 | 50 | 53 | 54 | 55 | 56 | 59 | 75 | 76 |
51 | 52 |
77 | 78 | 79 | 80 |
81 |
82 |

83 | FQM Utilities 3.0.1.1_FOR SS 84 |

85 |
86 | 87 | 88 | 89 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 |
90 | Packages
data 
view 
101 | 102 |

103 |  


104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 124 | 127 | 128 | 129 | 130 | 133 | 149 | 150 |
125 | 126 |
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 | 50 | 53 | 54 | 55 | 56 | 59 | 75 | 76 |
51 | 52 |
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 | 117 | 120 | 121 | 122 | 123 | 126 | 142 | 143 |
118 | 119 |
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 | 36 | 37 | 50 | 53 | 54 | 55 | 56 | 59 | 75 | 76 |
51 | 52 |
77 | 78 | 79 | 80 |
81 |

82 | Package <Unnamed> 83 |

84 | 85 | 86 | 87 | 89 | 90 | 91 | 92 | 93 | 94 |
88 | Class Summary
MainClass containing the main method.
95 |   96 | 97 |

98 |

99 |
100 |
101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 121 | 124 | 125 | 126 | 127 | 130 | 146 | 147 |
122 | 123 |
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 | 36 | 37 | 50 | 53 | 54 | 55 | 56 | 59 | 75 | 76 |
51 | 52 |
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 | 124 | 127 | 128 | 129 | 130 | 133 | 149 | 150 |
125 | 126 |
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 | 36 | 37 | 50 | 53 | 54 | 55 | 56 | 59 | 75 | 76 |
51 | 52 |
77 | 78 | 79 | 80 |
81 |

82 | Package data 83 |

84 | 85 | 86 | 87 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 |
88 | Class Summary
CarriersClass describing the modulator carriers.
ConstClass containing the global constant fields.
DftCoeffClass describing the DFT coefficients.
ExportExport DFT dftCoefficients.
FilterCoeffClass describing the Filter coefficients.
GeneratorAbstract class Generator - Ground of all coefficients-generator class
ProcessCall containing the data processing methods.
119 |   120 | 121 |

122 | 123 | 124 | 125 | 127 | 128 | 129 | 130 | 131 | 132 |
126 | Exception Summary
ProgExceptionClass representing an exception.
133 |   134 | 135 |

136 |

137 |
138 |
139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 159 | 162 | 163 | 164 | 165 | 168 | 184 | 185 |
160 | 161 |
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 | --------------------------------------------------------------------------------