Prechádzať zdrojové kódy

Добавлен фильтр корректор.

ChStepan 1 rok pred
rodič
commit
5c98410ebe

+ 22 - 10
src/src/FftDataFiltering/DecimFilterWrapper.v

@@ -71,25 +71,28 @@ module	DecimFilterWrapper
 	
 	localparam	extendBitNum	=	FilteredDataWidth-AdcDataWidth;
 	
-	localparam	maxWidthForR1	=	6'd16;	//msb for R = 2;
-	localparam	maxWidthForR2	=	6'd21;	//msb for R = 2;
-	localparam	maxWidthForR3	=	6'd26;	//msb for R = 3;
-	localparam	maxWidthForR4	=	6'd28;	//msb for R = 4;
-	localparam	maxWidthForR5	=	6'd38;	//msb for R = 5;
-	localparam	maxWidthForR6	=	6'd40;	//msb for R = 6;
-	localparam	maxWidthForR7	=	6'd41;	//msb for R = 7;
+	localparam	maxWidthForR1	=	10'd16;	//msb for R = 2;
+	localparam	maxWidthForR2	=	10'd25;	//msb for R = 2;
+	localparam	maxWidthForR3	=	10'd26;	//msb for R = 3;
+	localparam	maxWidthForR4	=	10'd28;	//msb for R = 4;
+	localparam	maxWidthForR5	=	10'd38;	//msb for R = 5;
+	localparam	maxWidthForR6	=	10'd40;	//msb for R = 6;
+	localparam	maxWidthForR7	=	10'd41;	//msb for R = 7;
 	// localparam	maxWidthForR8	=	5'd26;	//msb for R = 8;
 	// localparam	maxWidthForR9	=	5'd27;	//msb for R = 9;
 	// localparam	maxWidthForR10	=	5'd28;	//msb for R = 10;
 	
+	wire	[39:0]	firData;
+	wire	firDataVal;
 //================================================================================
 //	ASSIGNMENTS
 //================================================================================
 
-	assign	FilteredAdcDataI_o	=	outDataI;
-	assign	FilteredAdcDataQ_o	=	outDataQ;
+	// assign	FilteredAdcDataI_o	=	outDataI;
+	assign	FilteredAdcDataI_o	=	firData[33-:16];
 
-	assign	FilteredDataVal_o	=	decimDataValIR;
+	// assign	FilteredDataVal_o	=	decimDataValIR;
+	assign	FilteredDataVal_o	=	firDataVal;
 
 
 // {{14{AdcData_i[AdcDataWidth-1]}},AdcData_i}
@@ -177,6 +180,15 @@ cicFilterInstI
 	.DataValid_o	(decimDataValI)
 );
 
+FirFilter FirFilter (
+  .aclk(Clk_i),                              // input wire aclk
+  .s_axis_data_tvalid(decimDataValI),  // input wire s_axis_data_tvalid
+  .s_axis_data_tready(),  // output wire s_axis_data_tready
+  .s_axis_data_tdata(outDataI),    // input wire [15 : 0] s_axis_data_tdata
+  .m_axis_data_tvalid(firDataVal),  // output wire m_axis_data_tvalid
+  .m_axis_data_tdata(firData)    // output wire [39 : 0] m_axis_data_tdata
+);
+
 endmodule
 
 

+ 6 - 1
src/src/InternalDsp/InternalDsp.v

@@ -35,7 +35,8 @@ module InternalDsp
 	parameter	CmdDataRegWith		=	24,
 	parameter	IntermediateWidth	=	18,
 	parameter	CorrAdcDataWidth	=	20,
-	parameter	AccWidth			=	80
+	parameter	AccWidth			=	80,
+	parameter	FftMode				=	"TRUE"
 )
 (
 	input	wire	Clk_i,
@@ -333,7 +334,10 @@ always @(posedge Clk_i) begin
 end
 //------------------------------------------------
 //Generating needed amount of calculating channels
+
 generate
+
+if (FftMode == "FALSE") begin			
 	for	(g=0;	g<ChNum;	g=g+1)	begin	:DspChannel
 	
 		AdcCalibration 
@@ -387,6 +391,7 @@ generate
 			.CorrResultVal_o	(resultValBus[g])
 		);
 	end
+end
 endgenerate
 
 endmodule

+ 36 - 10
src/src/Sim/CicTest.m

@@ -1,11 +1,12 @@
 FormatSpec = '%d';
 PointsNum = 500;
-N = 4;
+N = 12;
 R = 2;
 B = 14;
 M = 1;
 
 Bmax = ceil(log2(((R*M)^N)/R)+B);
+
 x = 1:1:PointsNum;
 xDecim = 1:1:PointsNum/R;
 Fs = 50;
@@ -30,11 +31,14 @@ InDataFft = InDataFft(1:PointsNum/2);
 FilteredDataPNum    =   PointsNum/R;
 
 FilteredDataFft = fft(FilteredData);
-CicResp = 20*log10(abs(FilteredDataFft(1:FilteredDataPNum/2)));
+FilteredDataFft = FilteredDataFft(1:FilteredDataPNum/2);
+
+CicResp = 20*log10(abs(FilteredDataFft));
 CicResp = CicResp-max(CicResp)
 
 Freqs = (Fs*(1:(PointsNum/2))/PointsNum);
 FreqsDecim = Fs/R*(1:(FilteredDataPNum/2))/FilteredDataPNum;
+NormFreqs = FreqsDecim/Fs;
 
 FirResponce = 20 * log10(abs(fft(FilterCoefs, FilteredDataPNum)));
 FirResponce = FirResponce(1:FilteredDataPNum/2);
@@ -56,19 +60,41 @@ figure('name','CIC/FIR Frequency Response', 'Numbertitle', 'off')
   plot(FreqsDecim, CicResp, '-', 'LineWidth', 2, 'Color',[1 0 0]);
   hold on;
 
-  title([{'CIC, Comp. FIR and Result'};{sprintf('Filter Order = %i, Coef. width = %i',NFIR,Bc)}]);
+  title([{'CIC, Comp. FIR and Result'};{sprintf('Filter Order = %i',N)}]);
   xlabel ('Freq (\pi x rad / samples)');
   ylabel ('Magnitude (dB)');
   legend('Comp. FIR','Sum Response','CIC filter','location','northeast');
   grid on;
 
-
-
-
-
-
-
-
+NFFT  = 2^14;  % FFT points for Freq Response (spectrum)
+STEP = 1/NFFT;   % Step size
+ff = 0:1/NFFT:1-1/NFFT;
+
+Hcic = abs((sin(pi*M*R*NormFreqs) ./ sin(pi*NormFreqs))).^N;
+Hcicdb = 20 * log10(abs(Hcic));
+Hcicdb = Hcicdb - max(Hcicdb);
+##figure('name','Cic Response', 'Numbertitle', 'off')
+##plot(FreqsDecim, CicResp - max(CicResp), '-.', 'LineWidth', 2, 'Color',[0 0 1]);
+##
+##title([{'Cic Response'}]);
+##xlabel ('Freq (\pi x rad / samples)');
+##ylabel ('Magnitude');
+##axis tight;
+##grid on;
+##
+##figure('name','CicResp', 'Numbertitle', 'off')
+##  plot(NormFreqs, CicResp, 'LineWidth', 2, 'Color',[0 0 1]);
+##  hold on;
+##
+##figure('name','HCICdb Frequency Response', 'Numbertitle', 'off')
+##  plot(NormFreqs, Hcicdb, 'LineWidth', 2, 'Color',[0.2 0.5 0]);
+##  hold on;
+
+figure('name','Resulting Frequency Response', 'Numbertitle', 'off')
+plot(FreqsDecim,20*log10(abs(FilteredDataFft)), 'LineWidth',2)
+title("Single-Sided Amplitude Spectrum of cic+fir filter")
+xlabel("f (Hz)")
+ylabel("Amp")
 
 
 

+ 14 - 14
src/src/Sim/CorrFilterCoefs.txt

@@ -1,16 +1,16 @@
-106
--743
-2255
--3809
-2262
-6386
--22626
+247
+-1274
+3543
+-5332
+1607
+12268
+-32041
 32767
 32767
--22626
-6386
-2262
--3809
-2255
--743
-106
+-32041
+12268
+1607
+-5332
+3543
+-1274
+247

+ 2 - 2
src/src/Sim/DecimFilterWrapperTb.v

@@ -47,10 +47,10 @@ always	#10 Clk50	=	~Clk50;
 
 //==========================================================================================
 
-parameter	N	=	8;
+parameter	N	=	12;
 parameter	M	=	1;
 
-parameter	MaxWidth	=	38;
+parameter	MaxWidth	=	51;
 
 initial begin
 	Clk50		=	1'b1;

+ 18 - 18
src/src/Sim/FilteredData.txt

@@ -1,26 +1,26 @@
      0
      0
-   127
-  3583
-  8958
-  3583
-   127
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
-     0
      0
      0
      0
+     1
+    -6
+    10
+     4
+   -52
+    93
+   -58
+  -156
+   895
+   895
+  -156
+   -58
+    93
+   -52
+     4
+    10
+    -6
+     1
      0
      0
      0

+ 19 - 0
src/src/Sim/fir_filter.coe

@@ -0,0 +1,19 @@
+Radix = 10;
+Coefficient_Width = 16;
+Coefdata =
+247,
+-1274,
+3543,
+-5332,
+1607,
+12268,
+-32041,
+32767,
+32767,
+-32041,
+12268,
+1607,
+-5332,
+3543,
+-1274,
+247;