Файл: Лабораторная работа 3 Разработка схем цос на плис типа fpga.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 52
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Варианты 4,9
Частота дискретизации Fs=100 Мгц, частота пропускания Fpass=10 Мгц, частота подавления Fstop=19 Мгц, фильтр имеет 7(8) коэффициентов.
-0.038645752774681554
0.12608229298259332
0.21239603218007624
0.28323565416535013
0.28323565416535013
0.21239603218007624
0.12608229298259332
-0.038645752774681554
Варианты 5,12
Частота дискретизации Fs=100 Мгц, частота пропускания Fpass=16 Мгц, частота подавления Fstop=26 Мгц, фильтр имеет 7(8) коэффициентов.
-0.024458211392255642
0.1385734715904797
0.20432647461212372
0.26273795244659287
0.26273795244659287
0.20432647461212372
0.1385734715904797
-0.024458211392255642
Варианты 6,11
Частота дискретизации Fs=100 Мгц, частота пропускания Fpass=12 Мгц, частота подавления Fstop=24 Мгц, фильтр имеет 7(8) коэффициентов.
-0.058116432908280218
0.049430803026937656
0.20936548340988409
0.34953467616723588
0.34953467616723588
0.20936548340988409
0.049430803026937656
-0.058116432908280218
5. Разработать нерекурсивный фильтр нижних частот.
Частотные характеристики фильтра задаются в fdatool.
Определить реакцию на единичный импульс.
Проверить частотные характеристики фильтра.
Варианты 1-12
Частота дискретизации Fs=100 Мгц, частота пропускания Fpass=12Мгц, частота подавления Fstop=18 Мгц, фильтр имеет 15(16) коэффициентов.
0.037059570118627934
-0.02307320394269835
-0.052956774526219129
-0.062069563249109824
-0.017519265429228749
0.083952385419489794
0.20538459563162348
0.28813463217040336
0.28813463217040336
0.20538459563162348
0.083952385419489794
-0.017519265429228749
-0.062069563249109824
-0.052956774526219129
-0.02307320394269835
0.037059570118627934
6. Разработать нерекурсивный фильтр высоких частот.
Частотные характеристики фильтра задаются в fdatool.
Определить реакцию на единичный импульс.
Проверить частотные характеристики фильтра.
Варианты 1-12
Частота дискретизации Fs=100 Мгц, частота подавления Fstop=14 Мгц, частота пропускания Fpass=24Мгц, фильтр имеет 15(16) коэффициентов.
0.017425690480098226
-0.0060410075547963783
-0.037948478513453787
-0.03481532541025964
0.036865329587026013
0.11464314902818995
0.045582703094050298
-0.52418449504105036
0.52418449504105036
-0.045582703094050298
-0.11464314902818995
-0.036865329587026013
0.03481532541025964
0.037948478513453787
0.0060410075547963783
-0.017425690480098226
7. Разработать полосовой фильтр.
Частотные характеристики фильтра задаются в fdatool.
Определить реакцию на единичный импульс.
Проверить частотные характеристики фильтра.
Варианты 1-12
0.11624549922712731
-0.020790206504145009
-0.073891791891143851
-0.1177347608815346
-0.11345647456159967
-0.050813727213856463
0.03987313582326811
0.10544954752035379
0.10544954752035379
0.03987313582326811
-0.050813727213856463
-0.11345647456159967
-0.1177347608815346
-0.073891791891143851
-0.020790206504145009
0.11624549922712731
ПРИЛОЖЕНИЕ
Пример схемы на языке Verilog:
Y(n) = 0.75*x(n) + 0.25*x(n-1)
`timescale 1ns / 1ps
module f2(x, clk, y); // внешние сигналы
input [7:0] x; input clk; output reg [7:0] y;
reg [7:0] x75=0,xz25b=0,xz=0; // внутренние
wire [7:0] x25,x5,xz25; // сигналы
always @ (posedge clk) begin
x75 <= x5+x25; // 0.75*x(n)
xz25b <= xz25; // 0.25*x(n-1)
y <= x75 + xz25b;
xz <= x;
end
assign x5 = {x[7],x[7:1]}; // 0.5*x(n)
assign x25 = {x[7],x[7],x[7:2]}; // 0.25*x(n)
assign xz25 = {xz[7],xz[7],xz[7:2]};
endmodule
Нерекурсивный фильтр. Входной буфер
reg signed [15:0] xz [0 : 7]; // двумерный массив xz
always @ (posedge clk ) // 8 16-разрядных чисел
if (!in_reset_n) // сброс xz[0], xz[1],…, xz[7]
for (i = 0; i < 8; i = i + 8'd1) //
xz[i] <= #1 0;
else // сдвиг xz[1]<-xz[0], xz[2]<-xz[1],…, xz[7]<-xz[6],
begin // xz[0] <- x; выполняется одновременно
for (i = 1; i < 8; i = i + 8'd1)
xz[i] <= xz[i - 1]; //
xz [0] <= x; //
end
Нерекурсивный фильтр. Задание коэффициентов
wire signed [20:0] b[0 : 3]; // двумерный массив
assign b[0] = 21'h1f58fb;
assign b[1] = 21'h1c3fd;
assign b[2] = 21'h3622b;
assign b[3] = 21'h4ae1a;
Вычисление yn
Фильтр имеет симметричные коэффициенты: b0=bM-1, b1=bM-2, …
reg signed [15:0] xz [0 : 7]; // двумерный массив xz
reg signed [16:0] xzsum[0 : 3]; // сумм для сим коэф-тов
reg signed [37:0] bxx[0 : 3]; // Рез умнож на коэфф-ты
reg signed [38:0] s0[0 : 1]; // частичные суммы
reg signed [39:0] s1; //
always @ (posedge clk )
for (i = 0; i < 4; i = i + 8'd1) begin
xzsum[i] <= #1 xz[i] + xz[7 - i];
bxx[i] <= #1 xzsum[i] * b[i];
end
// xzsum[0] <= #1 xz[0]+xz[7]; xzsum[1] <= #1 xz[1]+xz[6];
// xzsum[2] <= #1 xz[2]+xz[5]; xzsum[3] <= #1 xz[3]+xz[4];
// bxx[0] <= #1 xzsum[0]*b[0]; bxx[1] <= #1 xzsum[1]*b[1];
// bxx[2] <= #1 xzsum[2]*b[2]; bxx[3] <= #1 xzsum[3]*b[3];
s0[0] <= bxx[0] + bxx[1]; s0[1] <= bxx[2] + bxx[3];
s1 <= s0[0] + s0[1]; //
Чтение входного сигнала из файла
reg signed [15:0] roms [100:0];
initial $readmemh("c:/PRJ/…sin01.txt", roms);
reg [15:0] addr2=0;
reg signed [15:0] rs=0, qsin=0;
always @ (posedge clk)
begin
if ((reset == 1'b0) || (addr2 == 16'd099))
addr2 <= 9'b000000000;
else
addr2 <= addr2 + 9'b000000001;
rs <= (roms[addr2]); qsin <= rs; x <= qsin; //
end
Запись результатов в файл
integer handle1,i,i0;
initial begin
handle1 = $fopen("Z:/nerfxx/… b11.txt"); i0=0;
#2000
for (i = 0; i < 1150; i = i + 1) begin //
$fwrite(handle1," %d %d %d %d ",
i, x, y, f1.b[i0]);
i0=i0+1;
if(i0 > 3)i0=0;
$fwrite(handle1,"\n");
#10;
end
#10;
$fclose(handle1);
end
Заголовок модуля
`timescale 1ns / 1ps // КИХ фильтр
module f07u (
output [15:0] y, // выход данных
input clk, in_reset_n,//
input signed [15:0] x // вход данных,
);
Включение компонента в проектируемое устройство
// .наименование контакта(имя сигнала)
f07u f1 (.in_reset_n(reset), .clk(clk), .x(x), .y(y));