Verilog卷積_Conv函數實現_MATLAB卷積_FPGA驅動VGA顯示(1)MATLAB

看了奧本海姆的信號與系統的卷積和之後就想用FPGA實現一下,首先用MATLAB仿真,MATLAB有現成的卷積函數,用輸入變量un卷積xn相當於xn通過一個累加系統。

卷積是倒序乘累加,但是如果看成兩個多項式相乘相乘對象係數就是卷積對象,相乘結果係數就是卷積結果。以下是輸入函數xn,系統函數hn(取un),xn累加結果,MATLAB自帶卷積函數,我寫的卷積函數的結果圖:

輸入xn是單位階躍函數un的額時候:

輸入xn是指數函數的時候: 

源碼:

clear;clc;close all;

Scale = 1000;

un     = ones(1,Scale);
nun    =	0:length(un)-1;

%%這個是輸入2^n的結果
% x     =	zeros(1,Scale);
% for r2 = 1:Scale/10
%    for r = 1:10
%         x(10*(r2-1)+r)       =   2^r;
%     end
% end

x     =     ones(1,Scale);
nx          =	0 : length(x)-1;

y_x     =	zeros(1,length(un) + length(x)-1);
for r = 1 :  length(un) + length(x)-1
    if r == 1 
        y_x(r)       =   x(r) ;
    else
        if r<=length(x)-1
            y_x(r)      =  y_x(r-1)  +  x(r) ;
        else
            y_x(r)      =  y_x(r-1) ;
        end
    end
end
ny_x = 1 : length(un) + length(x)-1;

my_y_hx  =  my_conv(un,x)
nmy_y_hx  =  0 : length(my_y_hx)-1

y_hx           =   conv(un,x);%my_conv(un,x);
ny_hx          =   0 : length(y_hx)-1;

subplot(511);
stem(nx,x);
xlabel('nx');
ylabel('x輸入函數');
grid on;

subplot(512);
stem(nun,un);
xlabel('nun');
ylabel('un階躍函數');
grid on;

subplot(513);
stem(ny_x,y_x);
xlabel('ny_x');
ylabel('y_x直接算遞增的結果');
grid on;

subplot(514);
stem(nmy_y_hx,my_y_hx);
xlabel('nmy_y_hx');
ylabel('my_y_hx自己寫的卷積結果');
grid on;

subplot(515);
stem(ny_hx,y_hx);
xlabel('ny_hx');
ylabel('y_hx卷積系統函數得出');
grid on;

我寫的卷積: 

function y = my_conv( x,h )
nx = length(x);
nh = length(h);
y = zeros(1,nx+nh-1);
for index = 1:nx
    indexSum = x(index)*h;
    y(1,index:index+nh-1) = y(1,index:index+nh-1)+indexSum;
end
end

 之後就是將其Verilog化,見下一篇:https://blog.csdn.net/Mr_liu_666/article/details/103372507

FPGAVGA顯示,見下下篇:https://blog.csdn.net/Mr_liu_666/article/details/103376238

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章