調(diào)用quartus的ip核測量頻率和幅值,可以把程序分成四大部分。第一部分是AD采樣模塊,本次實驗用的是ad828,最高采樣率為70M,
根據(jù)奈貴斯特采樣定律 Fs > 2Fc,即采樣率要大于信號最高頻率的兩倍,如果要求信號的頻率,需要知道頻率所對應(yīng)的地址和頻率分
變率F。而F = Fs/N,所以只要知道了采樣速率FS和地址坐標(biāo),就可以求出頻率來。ad采樣率為50M,程序設(shè)定的有四個頻率分辨率,
分別為1Hz,10Hz,100HZ還有1KHz,拿1Hz來舉例,F(xiàn)S = F * N,所以只要對采樣時鐘進行適當(dāng)?shù)姆诸l就可以算出FS來。
另外還需要注意的一點就是fft輸入的數(shù)據(jù)是有符號的,需要對原始數(shù)據(jù)處理一下,變成有符號的二進制,只要在前面補零就可以。
/*----------------------------------------------------------------------- Date : 2017-XX-XX Description : Design for 頻率分辨率. -----------------------------------------------------------------------*/ module sample_clk ( //global clock input clk, //system clock 200M input rst_n, //sync reset //key interface // input key0_value, input [1:0] key_data, //sample_clk interface output reg sample_clk ); //-------------------------------- //Funtion : /* always @(posedge clk or negedge rst_n) begin if(!rst_n) key_data <= 2'd0; else if(key0_value) key_data <= key_data + 1'b1; end */ //-------------------------------- //Funtion : 分頻 reg [15:0] n; always @(posedge clk or negedge rst_n) begin if(!rst_n) n <= 16'd0; else case(key_data) 2'b00 : n <= 16'd48828; //頻率分辨率 1Hz 2'b01 : n <= 16'd4882; //10Hz 2'b10 : n <= 16'd488; //100Hz 2'b11 : n <= 16'd48; //1KHz default : ; endcase end //-------------------------------- //Funtion : sample_clk reg [15:0] cnt_clk; always @(posedge clk or negedge rst_n) begin if(!rst_n) cnt_clk <= 16'd0; else if(cnt_clk >= n - 1'b1) cnt_clk <= 16'd0; else cnt_clk <= cnt_clk + 1'b1; end always @(posedge clk or negedge rst_n) begin if(!rst_n) sample_clk <= 1'b0; else if(cnt_clk >= n - 1'b1) sample_clk <= ~sample_clk; else sample_clk <= sample_clk; end endmodule
審核編輯:劉清
-
FFT
+關(guān)注
關(guān)注
15文章
434瀏覽量
59259 -
時鐘
+關(guān)注
關(guān)注
10文章
1714瀏覽量
131277 -
AD采樣
+關(guān)注
關(guān)注
0文章
23瀏覽量
15933
原文標(biāo)題:FFT_ad采樣速率
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論