Przeglądaj źródła

Добавлен новый фильтр, добавляется память для хранения коэфициентов и переключения фильтров.

ChStepan 1 rok temu
rodzic
commit
d0255433d4

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

@@ -83,83 +83,36 @@ module	DecimFilterWrapper
 //	ASSIGNMENTS
 //================================================================================
 
-	assign	FilteredAdcDataI_o	=	outDataI;
+	assign	FilteredAdcDataI_o	=	decimData;
 
-	assign	FilteredDataVal_o	=	decimDataValR;
+	assign	FilteredDataVal_o	=	decimDataVal;
 
 //================================================================================
 //	CODING
 //================================================================================
 
-always	@(posedge	Clk_i)	begin
-	if	(!Rst_i)	begin
-		case(DecimFactor_i)
-			3'd0:	begin
-						outDataI		<=	adcExtData[LsbForR1-1-:16];
-						decimDataValR	<=	OscWind_i;
-					end
-			3'd1:	begin
-						outDataI		<=	adcExtData[LsbForR1-1-:16];
-						decimDataValR	<=	OscWind_i;
-					end
-			3'd2:	begin
-						outDataI		<=	decimData[LsbForR2-1-:16];
-						decimDataValR	<=	decimDataVal;
-					end
-			// 3'd3:	begin
-						// outDataI	<=	decimData[maxWidthForR3-1-:16];
-						// decimDataValR	<=	decimDataVal;
-					// end
-			// 3'd4:	begin
-						// outDataI	<=	decimDataI[LsbForR4-1-:16];
-						// decimDataValR	<=	decimDataVal;
-					// end
-			// 3'd5:	begin
-						// outDataI	<=	decimDataI[maxWidthForR5-1-:16];
-						// decimDataValR	<=	decimDataVal;
-					// end
-			// 3'd6:	begin
-						// outDataI	<=	decimDataI[maxWidthForR6-1-:16];
-						// decimDataValR	<=	decimDataVal;
-					// end
-			// 3'd7:	begin
-						// outDataI	<=	decimDataI[maxWidthForR7-:16];
-						// decimDataValR	<=	decimDataVal;
-					// end
-		endcase
-	end	else	begin
-		outDataI	<=	16'd0;
-		decimDataValR	<=	1'b0;
-	end
+wire [8:0] coefAddr;
+wire [17:0] coefData;
+
+reg [8:0] testAddrCnt;
+
+always @(posedge Clk_i) begin
+	if (!Rst_i) begin
+		if (OscWind_i) begin
+			testAddrCnt<=testAddrCnt+10;
+		end else begin
+			testAddrCnt<=0;
+		end
+	end else begin
+		testAddrCnt	<=0;
+	end 
 end
 
-// cicFilter 
-// #(
-	// .N (N),	//filter order
-	// .M (M),	//comb delay
-	// .filteredDataWidth	(FilteredDataWidth),
-	// .inOutDataWidth		(FilteredDataWidth),
-	// .decimCntWidth		(7)
-// )
-// cicFilterInstI
-// (
-	// .Clk_i			(Clk_i),
-	// .Rst_i			(Rst_i),
-	// .DecimFactor_i	(DecimFactor_i),
-	// .Data_i			({{extendBitNum{AdcData_i[AdcDataWidth-1]}},AdcData_i}),
-	// .DataNd_i		(OscWind_i),
-	// .Data_o			(decimDataI),
-	// .DataValid_o	(decimDataVal)
-// );
-
-// FirFilter FirFilter (
-  // .aclk(Clk_i),                              // input wire aclk
-  // .s_axis_data_tvalid(decimDataVal),  // 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
-// );
+CoefROM CoefRom (
+  // .a(coefAddr),      // input wire [8 : 0] a
+  .a(testAddrCnt),      // input wire [8 : 0] a
+  .spo(coefData)  // output wire [17 : 0] spo
+);
 
 systolicFilter DataFitler (
 	.Clk_i(Clk_i), 

+ 5 - 1
src/src/Sim/BitWidthCalc.m

@@ -4,9 +4,13 @@ B = 16;
 M = 1;
 FormatSpecR = '%f';
 FormatSpecW = '%X\n';
-##FormatSpecW = '%h\n';
+%FormatSpecW = '%h\n';
 
 
+Fc = 3;
+Fs = 50;
+
+Fnqst = (Fs/R)/2
 
 Bmax = ceil(log2(((R*M)^N)/R)+B);
 MaxWidthR2 = ceil(log2(((2*M)^N)/2)+B);

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

@@ -205,9 +205,9 @@ DecimFilter
 	.IfFtwL_i		(24'h51eb85),
 	.IfFtwH_i		(24'h23),
 	
-	.AdcData_i		(sinAdd),
+	// .AdcData_i		(sinAdd),
 	// .AdcData_i		(adcDataMixedCut),
-	// .AdcData_i		(ncoSin1),
+	.AdcData_i		(adcData),
 	
 	.FilteredAdcDataI_o	(filteredDataOut),
 	.FilteredAdcDataQ_o	(),

+ 45 - 45
src/src/Sim/FFTTest.m

@@ -18,7 +18,7 @@ xDecim = 1:1:PointsNum/R;
 Fc = 3;
 Fs = 50;
 
-#########################################################################################################################
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 ReadInDataId = fopen('C:/S5243_FFT_REPO/src/src/Sim/InputSignal.txt','r');
 InDataSignal = fscanf(ReadInDataId,FormatSpec);
 fclose(ReadInDataId);
@@ -36,7 +36,7 @@ FilterCoefs = fscanf(ReadFilterCoefsId,FormatSpec);
 fclose(ReadFilterCoefsId);
 
 
-#########################################################################################################################
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FreqBandOrig = Fs*(1:(PointsNum))/PointsNum;
 FreqbandDecim = (Fs/2*R)*(1:(PointsNum))/PointsNum;
@@ -45,7 +45,7 @@ InDataFft = abs(fft(InDataSignal+randn(size(InDataSignal)))/PointsNum);
 InDataFftDb = 20*log10(InDataFft);
 
 FilteredDataFft = abs(fft(FilteredData+randn(size(FilteredData)))/PointsNum);
-##FilteredDataFft = abs(fft(FilteredData)/PointsNum);
+% FilteredDataFft = abs(fft(FilteredData)/PointsNum);
 FilteredDataFftDb = 20*log10(FilteredDataFft);
 FilteredDataFftDb = FilteredDataFftDb-max(FilteredDataFftDb);
 
@@ -54,36 +54,36 @@ ImpuseRespFftDb = 20*log10(ImpuseRespFft);
 ImpuseRespFftDb = ImpuseRespFftDb-max(ImpuseRespFftDb);
 
 Fband = 0:1/PointsNum:1-1/PointsNum;
-##Fband = 0:1/PointsNum:0.5-1/PointsNum;
-
-##InDataFftDb = InDataFftDb(1:length(Fband));
-##FilteredDataFftDb = FilteredDataFftDb(1:length(Fband));
-##ImpuseRespFftDb = ImpuseRespFftDb(1:length(Fband));
-
-#########################################################################################################################
-##figure('name','In Data Time/Freq', 'Numbertitle', 'off')
-##subplot(2,1,1)
-##plot(x, InDataSignal)
-##grid on;
-##grid minor;
-##title("In Signal")
-##xlabel("Time")
-##ylabel("Amp")
-##
-##subplot(2,1,2)
-##plot(Fband,InDataFftDb)
-##grid on;
-##grid minor;
-##title("Single-Sided Amplitude Spectrum of InData")
-##xlabel("f (Hz)")
-##ylabel("Amp")
+%Fband = 0:1/PointsNum:0.5-1/PointsNum;
+
+%InDataFftDb = InDataFftDb(1:length(Fband));
+%FilteredDataFftDb = FilteredDataFftDb(1:length(Fband));
+%ImpuseRespFftDb = ImpuseRespFftDb(1:length(Fband));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%figure('name','In Data Time/Freq', 'Numbertitle', 'off')
+%subplot(2,1,1)
+%plot(x, InDataSignal)
+%grid on;
+%grid minor;
+%title("In Signal")
+%xlabel("Time")
+%ylabel("Amp")
+%
+%subplot(2,1,2)
+%plot(Fband,InDataFftDb)
+%grid on;
+%grid minor;
+%title("Single-Sided Amplitude Spectrum of InData")
+%xlabel("f (Hz)")
+%ylabel("Amp")
 
 figure('name','Frequency compare', 'Numbertitle', 'off')
 subplot(3,1,1)
 plot(Fband,InDataFftDb)
 grid on;
 grid minor;
-##axis([0 25 -70 80]);
+%axis([0 25 -70 80]);
 title("Single-Sided Amplitude Spectrum of Data before filter")
 xlabel("Time")
 ylabel("Amp")
@@ -92,7 +92,7 @@ subplot(3,1,2)
 plot(Fband,ImpuseRespFftDb)
 grid on;
 grid minor;
-##axis([0 50 -60 1]);
+%axis([0 50 -60 1]);
 title("Cic Frequency response")
 xlabel("f (Hz)")
 ylabel("Amp")
@@ -101,27 +101,27 @@ subplot(3,1,3)
 plot(Fband,FilteredDataFftDb)
 grid on;
 grid minor;
-##axis([0 25 -70 80]);
+%axis([0 25 -70 80]);
 title("Single-Sided Amplitude Spectrum of Data after filter")
 xlabel("f (Hz)")
 ylabel("Amp")
 
-##figure('name','Impulse Response Time/Freq', 'Numbertitle', 'off')
-##subplot(2,1,1)
-##plot(x, ImpulseResp)
-##grid on;
-##grid minor;
-##title("In Signal")
-##xlabel("Time")
-##ylabel("Amp")
-##
-##subplot(2,1,2)
-##plot(Fband,ImpuseRespFftDb)
-##grid on;
-##grid minor;
-##title("Single-Sided Amplitude Spectrum of InData")
-##xlabel("f (Hz)")
-##ylabel("Amp")
+%figure('name','Impulse Response Time/Freq', 'Numbertitle', 'off')
+%subplot(2,1,1)
+%plot(x, ImpulseResp)
+%grid on;
+%grid minor;
+%title("In Signal")
+%xlabel("Time")
+%ylabel("Amp")
+%
+%subplot(2,1,2)
+%plot(Fband,ImpuseRespFftDb)
+%grid on;
+%grid minor;
+%title("Single-Sided Amplitude Spectrum of InData")
+%xlabel("f (Hz)")
+%ylabel("Amp")
 
 
 

Plik diff jest za duży
+ 0 - 2000
src/src/Sim/FilteredData.txt


Plik diff jest za duży
+ 3 - 0
src/src/Sim/FiltersCoeffs.coe


Plik diff jest za duży
+ 0 - 2000
src/src/Sim/ImpResp.txt


Plik diff jest za duży
+ 0 - 2000
src/src/Sim/InputSignal.txt


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

@@ -1,18 +0,0 @@
-Radix = 10;
-Coefficient_Width = 16;
-Coefdata =
--137,
-282,
--770,
-1889,
--4162,
-8631,
--17375,
-32767,
--17375,
-8631,
--4162,
-1889,
--770,
-282,
--137;

+ 70 - 0
src/src/Sim/fir_filter2.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:24:05
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 00071,
+0023f,
+00520,
+00693,
+003e2,
+3fe88,
+3fc0d,
+3ff54,
+00396,
+00238,
+3fced,
+3fc35,
+00212,
+0055a,
+3ffac,
+3f963,
+3fdbe,
+00732,
+005aa,
+3f95c,
+3f64b,
+00476,
+00e1b,
+3ffee,
+3ed82,
+3f88a,
+01677,
+0144f,
+3e65f,
+3d178,
+01bac,
+0a04e,
+0e39e,
+0a04e,
+01bac,
+3d178,
+3e65f,
+0144f,
+01677,
+3f88a,
+3ed82,
+3ffee,
+00e1b,
+00476,
+3f64b,
+3f95c,
+005aa,
+00732,
+3fdbe,
+3f963,
+3ffac,
+0055a,
+00212,
+3fc35,
+3fced,
+00238,
+00396,
+3ff54,
+3fc0d,
+3fe88,
+003e2,
+00693,
+00520,
+0023f,
+00071;

+ 70 - 0
src/src/Sim/fir_filter3.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:37:19
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 3ffc9,
+3ff4e,
+3fe99,
+3fe08,
+3fe36,
+3ff9f,
+0022d,
+004f5,
+0067b,
+00592,
+00245,
+3fe3a,
+3fbee,
+3fd27,
+0017c,
+00622,
+0077d,
+003af,
+3fc6b,
+3f67d,
+3f6d3,
+3feb8,
+009e7,
+01063,
+00b8b,
+3fb89,
+3e93d,
+3e2a4,
+3f310,
+01b7e,
+04ffb,
+07c40,
+08d8a,
+07c40,
+04ffb,
+01b7e,
+3f310,
+3e2a4,
+3e93d,
+3fb89,
+00b8b,
+01063,
+009e7,
+3feb8,
+3f6d3,
+3f67d,
+3fc6b,
+003af,
+0077d,
+00622,
+0017c,
+3fd27,
+3fbee,
+3fe3a,
+00245,
+00592,
+0067b,
+004f5,
+0022d,
+3ff9f,
+3fe36,
+3fe08,
+3fe99,
+3ff4e,
+3ffc9;

+ 70 - 0
src/src/Sim/fir_filter4.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:38:03
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 3fff0,
+3fffa,
+00026,
+00095,
+0015c,
+00279,
+003c3,
+004e5,
+00573,
+00505,
+00368,
+000c3,
+3fdaa,
+3fb06,
+3f9d3,
+3fac5,
+3fdf0,
+00298,
+00742,
+00a1a,
+0098e,
+004fb,
+3fd20,
+3f436,
+3ed7a,
+3ec58,
+3f350,
+0030c,
+019de,
+033ee,
+04c14,
+05d23,
+0634a,
+05d23,
+04c14,
+033ee,
+019de,
+0030c,
+3f350,
+3ec58,
+3ed7a,
+3f436,
+3fd20,
+004fb,
+0098e,
+00a1a,
+00742,
+00298,
+3fdf0,
+3fac5,
+3f9d3,
+3fb06,
+3fdaa,
+000c3,
+00368,
+00505,
+00573,
+004e5,
+003c3,
+00279,
+0015c,
+00095,
+00026,
+3fffa,
+3fff0;

+ 70 - 0
src/src/Sim/fir_filter5.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:38:32
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 3ffe1,
+3ffb4,
+3ff67,
+3fefc,
+3fe7a,
+3fdf6,
+3fd8f,
+3fd6d,
+3fdb6,
+3fe87,
+3ffea,
+001c8,
+003e7,
+005ee,
+0076f,
+007f9,
+00734,
+004fa,
+0016d,
+3fcff,
+3f870,
+3f4b7,
+3f2df,
+3f3d5,
+3f83b,
+0003d,
+00b7b,
+01906,
+0277c,
+03535,
+04082,
+047f1,
+04a89,
+047f1,
+04082,
+03535,
+0277c,
+01906,
+00b7b,
+0003d,
+3f83b,
+3f3d5,
+3f2df,
+3f4b7,
+3f870,
+3fcff,
+0016d,
+004fa,
+00734,
+007f9,
+0076f,
+005ee,
+003e7,
+001c8,
+3ffea,
+3fe87,
+3fdb6,
+3fd6d,
+3fd8f,
+3fdf6,
+3fe7a,
+3fefc,
+3ff67,
+3ffb4,
+3ffe1;

+ 70 - 0
src/src/Sim/fir_filter6.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:38:58
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 0001b,
+0003a,
+00072,
+000c2,
+0012c,
+001ab,
+00235,
+002b9,
+00323,
+00356,
+0033a,
+002b4,
+001b6,
+0003b,
+3fe51,
+3fc18,
+3f9c5,
+3f79f,
+3f5f6,
+3f524,
+3f578,
+3f737,
+3fa88,
+3ff72,
+005d4,
+00d64,
+015b5,
+01e3c,
+0265c,
+02d7a,
+03305,
+0368a,
+037bf,
+0368a,
+03305,
+02d7a,
+0265c,
+01e3c,
+015b5,
+00d64,
+005d4,
+3ff72,
+3fa88,
+3f737,
+3f578,
+3f524,
+3f5f6,
+3f79f,
+3f9c5,
+3fc18,
+3fe51,
+0003b,
+001b6,
+002b4,
+0033a,
+00356,
+00323,
+002b9,
+00235,
+001ab,
+0012c,
+000c2,
+00072,
+0003a,
+0001b;

+ 70 - 0
src/src/Sim/fir_filter7.coe

@@ -0,0 +1,70 @@
+; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
+; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
+; Generated on: 02-Feb-2024 15:39:39
+Radix = 16; 
+Coefficient_Width = 18; 
+CoefData = 0000a,
+3fffb,
+3ffeb,
+3ffce,
+3ff9e,
+3ff56,
+3fef3,
+3fe72,
+3fdd3,
+3fd19,
+3fc4c,
+3fb77,
+3faaa,
+3f9f9,
+3f97d,
+3f94f,
+3f98a,
+3fa45,
+3fb96,
+3fd89,
+00026,
+00369,
+00742,
+00b97,
+01044,
+0151c,
+019ec,
+01e7b,
+02293,
+02600,
+02895,
+02a30,
+02abb,
+02a30,
+02895,
+02600,
+02293,
+01e7b,
+019ec,
+0151c,
+01044,
+00b97,
+00742,
+00369,
+00026,
+3fd89,
+3fb96,
+3fa45,
+3f98a,
+3f94f,
+3f97d,
+3f9f9,
+3faaa,
+3fb77,
+3fc4c,
+3fd19,
+3fdd3,
+3fe72,
+3fef3,
+3ff56,
+3ff9e,
+3ffce,
+3ffeb,
+3fffb,
+0000a;

+ 1 - 1
src/src/Sim/untitled.txt

@@ -1 +1 @@
-000000DB
+000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF010ED06BB60DE010FF00FFFF000010B56F857104FB506EE605BF401758F65B010DFEEE45516CDF06BCCCCCCB60FDC61554EEEFDB5E4F2BCED79216CCDCCDCC61297DECB2F4E5B