MATLAB製作mif檔案 正弦訊號發生器1

2021-09-08 13:22:13 字數 2385 閱讀 2426

正弦訊號發生器:需要按一定脈衝傳送取樣的正弦資料。我們需要把資料存入rom中,之後按一定脈衝頻率把資料輸出。

訊號發生器可以用乙個儲存器實現,根據不同的位址訊號,輸出不同的訊號值即可。配置ram或rom中的資料可以用mif檔案,mif檔案是儲存器初始化檔案,即memory initialization file,生成mif檔案可用quartusii自帶的mif編輯器,但是這種方法必須乙個個的確定每個點的值(自己手動輸入),不適合大規模儲存器。因此可以用高階語言程式設計生成mif檔案。

常見生成方法:

quartus自帶的mif編輯器生成

mif軟體生成

高階程式語言生成

主要介紹第三中方法,按照mif檔案格式,使用高階程式語言(matlab、c)編寫生成

depth  =64;%取樣深度,即取樣個數

widths =8 ;%取樣資料位寬

n=0:63;%取樣時刻,取樣頻率為1;0:1:64的簡寫

s= sin(2*pi*n/64);%訊號生成

fidc = fopen('e:\quartus-projec\fpgarom\sine.mif','wt') %建立mif檔案

%寫入mif檔案的開頭

fprintf(fidc,'depth=%d\n',depth);

fprintf(fidc,'width=%d\n',widths);

fprintf(fidc,'address_radix=uns;\n');%位址格式,uns表示保持現有格式

fprintf(fidc,'data_radix=uns;\n');%資料格式

fprintf(fidc,'content begin\n');

%取樣資料的輸出

for(x =1:depth)

fprintf(fidc,'%d:%d;\n',x-1,round(31*sin(2*pi*(x-1)/32)+32));

end;%round(a)將a中的元素按最近的整數取整,即四捨五入;資料為x-1:round(a(x)),其中x-1為取樣時刻,a(x)為取樣資料。

fprintf(fidc,'end;');%對應fprintf(fidc,'content begin\n')

fclose(fidc);

l=31*sin(2*pi*(n-1)/32)+32;

plot(l);

下面是生成後的sine.mif檔案的內容,有助於理解上面的程式,應用於rom時,sine.mif檔案裡的第一和第二行後面要加「;」

遇到的難點:就是理解程式中的每一步驟。主要是取樣點、取樣時刻、取樣資料的個數及位寬等。

製作nc檔案(Matlab)

首先看乙個nc檔案中包含哪些部分,例如乙個標準的fvcom輸入檔案wind.nc netcdf wind可以看出nc檔案包含兩個主要部分 dimensions 各個變數維度大小 variables 變數 在上面檔案中包含三個維度 nele,node,time。其中nele,node兩個是固定長度的,...

mif檔案 coe檔案的建立

在fpga中使用rom的應用是十分常見的,但資料較少時,可以直接使用quartus ii 或者vivado工具直接產生mif檔案或者coe檔案。但當資料量很大的時,在eda工具中,乙個個輸入這是非常繁瑣的 不現實的,針對這種情況,一般是使用如matlab c等高階語言產生mif檔案 coe檔案,然後...

mif檔案生成方法

mif檔案就是儲存器初始化檔案,即memory initialization file,用來配置ram或rom中的資料。常見生成方法 quartus自帶的mif編輯器生成 mif軟體生成 高階程式語言生成 前兩種方法都有一定的缺陷,主要介紹第三中方法,按照mif檔案格式,使用高階程式語言 matla...