91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CIC插值濾波器與直接頻率合成器DDS的FPGA實(shí)現(xiàn)

Hack電子 ? 來源:FPGA學(xué)習(xí)之旅 ? 2023-04-12 10:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CIC濾波器無線通信中的常用模塊,一般用于數(shù)字下變頻(DDC)和數(shù)字上變頻(DUC)系統(tǒng)。隨著現(xiàn)代無線通信中數(shù)據(jù)速率的增加,它的應(yīng)用變得尤為重要。CIC濾波器的結(jié)構(gòu)簡(jiǎn)單,沒有乘法器,只有加法器、積分器和寄存器,適合于工作在高采樣率條件下,而且CIC濾波器是一種基于零點(diǎn)相消的FIR濾波器,已經(jīng)被證明是在高速抽取或插值系統(tǒng)中非常有效的單元。 我們首先產(chǎn)生一個(gè)采樣率Fs=0.78125Mhz,頻率Fout=0.078125Mhz的樣本信號(hào),對(duì)其進(jìn)行16倍插值。這就涉及到直接頻率合成器DDS的知識(shí):

69849da6-d8d8-11ed-bfe3-dac502259ad0.png

上圖的RAM部分存放通過MATLAB生成一個(gè)周期完整正弦波的離散點(diǎn)。Fc采樣時(shí)鐘:本模塊用一個(gè)50MHZ的采樣時(shí)鐘,即每隔20ns,從RAM中讀出一個(gè)采樣值。這里記住還有一種通過使能信號(hào)去讀取ram的值,這個(gè)時(shí)候的Fc一定不能用時(shí)鐘信號(hào)50M去算,而應(yīng)該以使能信號(hào)頻率去計(jì)算,下面會(huì)詳細(xì)體現(xiàn)。

相位累加器:顧名思義,在這里完成相位累加的功能,相位累加器的溢出頻率就是DDS輸出的信號(hào)頻率,位寬為N。


頻率控制字M:決定輸出頻率,相當(dāng)于相位累加器地址addr步進(jìn)值。


目標(biāo)頻率:Fout=Fs*M/2^N,對(duì)于這個(gè)公式我們可以這么理解,一秒內(nèi)相位累加器的累加值為Fs*M,而寄存器最大值為2^(N-1),溢出次數(shù)為Fs*M/2^N,因?yàn)榧拇嫫髦械闹祻?增加到2^(N-1),剛好輸出一個(gè)周期的正弦波信號(hào)。所以,寄存器溢出的次數(shù)就是輸出正弦波的周期數(shù)。


69add0e0-d8d8-11ed-bfe3-dac502259ad0.gif

接下來我們來實(shí)現(xiàn)它,首先用MATLAB產(chǎn)生一個(gè)完整周期的正弦波樣本,將其存入ROM。具體實(shí)現(xiàn)方法參見這篇文章:如何用MATLAB產(chǎn)生FPGA設(shè)計(jì)中所需的coe xtmif文件

clc;
clear all;
N=2^8;
s_p=0:255;%正弦波一個(gè)周期的采樣點(diǎn)數(shù) ROM深度256,位寬8
sin_data=sin(2*pi*s_p/N);
fix_p_sin_data=fix(sin_data*127);
for i=1:N
if fix_p_sin_data(i)<0
        fix_p_sin_data(i)=N+fix_p_sin_data(i);%有符號(hào)數(shù)--得+
else
        fix_p_sin_data(i)=fix_p_sin_data(i);
end
end
fid = fopen('sin.coe','w');% 打開一個(gè).coe文件
% 存放在ROM中的.coe文件第一行必須是這個(gè)字符串,10表示10進(jìn)制,可以改成其他進(jìn)制
fprintf(fid,'memory_initialization_radix = 10;
');
% 存放在ROM中的.coe文件第二行必須是這個(gè)字符串
fprintf(fid,'memory_initialization_vector = 
');
% 把前255個(gè)數(shù)據(jù)寫入.coe文件中,并用逗號(hào)隔開,為了方便知道數(shù)據(jù)的個(gè)數(shù),每行只寫一個(gè)數(shù)據(jù)
fprintf(fid,'%d,
',fix_p_sin_data(1:end-1));
% 把最后一個(gè)數(shù)據(jù)寫入.coe文件中,并用分號(hào)結(jié)尾
fprintf(fid,'%d;
',fix_p_sin_data(end)); 
fclose(fid);??%?關(guān)閉文件指針

6a6093ce-d8d8-11ed-bfe3-dac502259ad0.png

6a7e7858-d8d8-11ed-bfe3-dac502259ad0.png

在VIVADO中調(diào)用ROM IP核,存放一個(gè)周期正弦波的信息:

6a9bf3f6-d8d8-11ed-bfe3-dac502259ad0.png

6acb5cea-d8d8-11ed-bfe3-dac502259ad0.png

6aef11c6-d8d8-11ed-bfe3-dac502259ad0.png

這一步加載我們用MATLAB生成的coe文件,如果加載的coe文件錯(cuò)誤,箭頭指的地方會(huì)報(bào)紅。創(chuàng)建完rom后例化仿真

module dds(
  input  wire          clk,
  input   wire         rst_n,
  output  wire  [7:0]  o_wave
);


reg  [7:0]  addr;
always @(posedge clk)begin
if(!rst_n)
    addr <= 8'd0;
else
    addr <= addr + 1'b1;
end


sp_ram_256x8 sp_ram_256x8 (
  .clka(clk),    // input wire clka
  .addra(addr ),  // input wire [7 : 0] addra
  .douta(o_wave)  // output wire [7 : 0] douta
);

仿真圖如下:

6b1596ac-d8d8-11ed-bfe3-dac502259ad0.png

接下來我們首先產(chǎn)生一個(gè)采樣率Fs=0.78125Mhz,頻率Fout=0.078125Mhz的樣本信號(hào):

module  gen_sin(
  input   wire         sclk,
  input   wire         rst_n,
  output  wire  [7:0]  data_o,
  output  reg          data_v
);
parameter  DIV_NUM=6'd63;//50M/64=0.78125M采樣率
//FC = 0.078125Mhz信號(hào)頻率
//FS = 0.78125Mhz采樣頻率
parameter  FRQ_W_1M=32'd429496730;
//2^32*(0.078125)/0.78125//fc=M*fs/2^32 
reg   [31:0]  phase_sum_1m;
wire  [7:0]   addr_1m;
wire  [7:0]   o_wave_1m;


reg   [5:0]   div_cnt;
reg           s_flag;


//分頻產(chǎn)生0.78125M采樣率
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    div_cnt <= 'd0;
else if(div_cnt == DIV_NUM)
    div_cnt <= 'd0;
  else 
    div_cnt <= div_cnt + 1'b1;
//梳狀濾波器驅(qū)動(dòng)脈沖                                                 
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    s_flag <= 1'b0;
else if(div_cnt == 6'd0)
    s_flag <= 1'b1;
else s_flag <= 1'b0;
always @(posedge sclk or negedge rst_n)
  if(rst_n == 1'b0)
    data_v <= 1'b0;
  else 
    data_v <= 1'b1;


assign  data_o = o_wave_1m;//0.78125
//
//相位累加器
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    phase_sum_1m<='d0;
else if(s_flag == 1'b1)
    phase_sum_1m <= phase_sum_1m + FRQ_W_1M ;


//相位
assign  addr_1m=phase_sum_1m[31:24];


sp_ram_256x8 sp_ram_256x8 (
  .clka(sclk),    // input wire clka
  .addra(addr_1m),  // input wire [7 : 0] addra
  .douta(o_wave_1m)  // output wire [7 : 0] douta
);
endmodule
數(shù)字信號(hào)的頻譜是周期性的,且周期等于數(shù)據(jù)的采樣頻率。整數(shù)倍零值內(nèi)插當(dāng)然不能簡(jiǎn)單地等同于提高了數(shù)據(jù)采樣頻率,在插值過程中,頻譜會(huì)以采樣頻率進(jìn)行壓縮,可能會(huì)引起頻譜混疊,通過內(nèi)插、低通濾波處理后,即可得到正確的經(jīng)高速采樣后的數(shù)字信號(hào)。如下圖所示: 6b2f2eaa-d8d8-11ed-bfe3-dac502259ad0.png

所以多速率信號(hào)處理過程的關(guān)鍵是設(shè)計(jì)滿足要求的抗混疊濾波器。即抽取或內(nèi)插處理后,在有用信號(hào)頻段內(nèi)不產(chǎn)生頻譜混疊。同時(shí)要求濾波器占用硬件資源少且運(yùn)算速度快,一般只要有效增加濾波器的階數(shù),可以設(shè)計(jì)出滿足指標(biāo)要求的各種抗混疊濾波器。CIC(積分梳狀)濾波器及半帶濾波器因?yàn)榫哂羞\(yùn)算速度快、占用資源少等特點(diǎn),在多速率信號(hào)處理中得到了廣泛的應(yīng)用。其沖激響應(yīng)為:

6b4ee650-d8d8-11ed-bfe3-dac502259ad0.png

它的抽頭系數(shù)只有1或者0。 直接用MATLAB仿真觀察,分析一下 CIC 濾波器的頻譜特性,可得到其幅頻特性。

6b67364c-d8d8-11ed-bfe3-dac502259ad0.png

根據(jù)上述公式在MATLAB中編寫如下代碼觀察濾波器抑制情況:

clc;
clear all;
R=16;
M=1;
N=3;
n=0500-1;
w=pi*n/(length(n));
num=sin(R*M*w/2);
den=sin(w/2);
H=(num./den).^N;
ABS_H=abs(H);
mag=20*log10(ABS_H/max(ABS_H));
plot(w/pi,mag);
grid on;
axis([0,1,-200,0]);

6b93e35e-d8d8-11ed-bfe3-dac502259ad0.png

由上圖可知,對(duì)帶外信號(hào)有很好的抑制效果。

在進(jìn)行Verilog實(shí)現(xiàn)時(shí),首先要把具體電路結(jié)構(gòu)映射出來,CIC濾波器具體實(shí)現(xiàn)框圖如下,系數(shù)為1:

6bae50ea-d8d8-11ed-bfe3-dac502259ad0.png

6bd28096-d8d8-11ed-bfe3-dac502259ad0.png

按照上述框圖進(jìn)行編碼,對(duì)上述生成的樣本信號(hào)(采樣率Fs=0.78125Mhz,頻率Fout=0.078125Mhz的樣本信號(hào))進(jìn)行16倍插值濾波處理(FS采樣率提高,信號(hào)頻率Fout不變),涉及代碼均參考V3學(xué)社尤老師,讀者可訪問文后提供的網(wǎng)址學(xué)習(xí)參考:

module  cic_interpolate(
  input  wire    sclk,//50M
  input  wire    rst_n,
  input  wire  [7:0]  data_in,
  input  wire    data_v,
  output  wire  [19:0]  data_out
);
parameter  W=20;
parameter  DIV_NUM=6'd63;//50M/64=0.78125M
parameter  DIV_NUM_I=3'd3;
//BIN + N*log2(R)=8+3*4=20;
reg  [W-1:0]  comb1;
reg  [W-1:0]  comb2;
reg  [W-1:0]  comb3;
reg  [W-1:0]  integ1;
reg  [W-1:0]  integ2;
reg  [W-1:0]  integ3;
wire  [W-1:0]  comb1_w;
wire  [W-1:0]  comb2_w;
wire  [W-1:0]  comb3_w;
wire  [W-1:0]  integ1_w;
wire  [W-1:0]  integ2_w;
wire  [W-1:0]  integ3_w;
reg  [5:0]  div_cnt;
reg    s_flag;
reg    s_flag_i;


//此計(jì)數(shù)器用于控制分頻,為梳狀濾波器和積分濾波器提供驅(qū)動(dòng)脈沖
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    div_cnt <= 'd0;
else if(div_cnt == DIV_NUM)
    div_cnt <= 'd0;
  else 
    div_cnt <= div_cnt + 1'b1;
//梳狀濾波器驅(qū)動(dòng)脈沖                                                 
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    s_flag <= 1'b0;
else if(div_cnt == 6'd0)
    s_flag <= 1'b1;
else s_flag <= 1'b0;
//積分濾波器驅(qū)動(dòng)脈沖
always @(posedge sclk or negedge rst_n)
  if(rst_n == 1'b0)
    s_flag_i <= 1'b0;
  else if(div_cnt[1:0] == 2'd0)
    s_flag_i <= 1'b1;
  else s_flag_i <= 1'b0;


//梳狀濾波器的寄存器
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    comb1<='d0;
else if(data_v == 1'b1 && s_flag == 1'b1)
    comb1<= {{12{data_in[7]}},data_in};
else if(data_v == 1'b0)
    comb1<='d0;


always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    comb2<='d0;
else if(data_v == 1'b1 && s_flag == 1'b1)
    comb2<= comb1_w;
else if(data_v == 1'b0)
    comb2<='d0;


always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
    comb3<='d0;
else if(data_v == 1'b1 && s_flag == 1'b1)
    comb3<= comb2_w;
else if(data_v == 1'b0)
    comb3<='d0;
//寄存器間的組合邏輯
assign  comb1_w= {{12{data_in[7]}},data_in}-comb1;
assign  comb2_w= comb1_w-comb2;
assign  comb3_w= comb2_w-comb3;


//積分濾波器間的組合邏輯
assign  integ1_w=comb3_w + integ1;
assign  integ2_w=integ1_w + integ2;
assign  integ3_w=integ2_w + integ3;
//插值后的結(jié)果輸出
assign  data_out = integ3_w;
//積分濾波器的寄存器
always @(posedge sclk or negedge rst_n)
if(rst_n == 1'b0) begin
    integ1<='d0;
    integ2<='d0;
    integ3<='d0;
  end
else if(data_v == 1'b1 && s_flag_i == 1'b1)begin
    integ1<=integ1_w;
    integ2<=integ2_w;
    integ3<=integ3_w;
??end
endmodule

對(duì)上述模塊進(jìn)行仿真:紅框?yàn)椴逯登埃G框?yàn)椴逯岛笮Ч庇^的看到輸出信號(hào)更加平滑細(xì)膩:

6bf12fa0-d8d8-11ed-bfe3-dac502259ad0.png

6c099522-d8d8-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1646

    文章

    22069

    瀏覽量

    619676
  • 濾波器
    +關(guān)注

    關(guān)注

    162

    文章

    8154

    瀏覽量

    182350
  • 頻率合成器
    +關(guān)注

    關(guān)注

    5

    文章

    297

    瀏覽量

    32880
  • 無線通信
    +關(guān)注

    關(guān)注

    58

    文章

    4762

    瀏覽量

    145320
  • DDS
    DDS
    +關(guān)注

    關(guān)注

    22

    文章

    673

    瀏覽量

    154586

原文標(biāo)題:CIC插值濾波器與直接頻率合成器DDS的FPGA實(shí)現(xiàn)

文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AD9164BBCZ 直接數(shù)字頻率合成器

    AD9164BBCZ 16位、12 GSPS、RF DAC和直接數(shù)字頻率合成器訂貨***黃小姐微信同號(hào) AD9164是一款高性能16位數(shù)模轉(zhuǎn)換(DAC)和
    發(fā)表于 07-29 12:11

    基于DDS頻率合成器設(shè)計(jì)介紹

    直接數(shù)字頻率合成DDS)在過去十年受到了頻率合成器設(shè)計(jì)工程師極大的歡迎,它被認(rèn)為是一種具有低相
    發(fā)表于 07-08 07:26

    什么是頻率合成器

    和相位來生成被調(diào)制信號(hào),因此對(duì)于數(shù)字通信系統(tǒng)來說可以產(chǎn)生任意的波形。軟件無線電系統(tǒng)中的數(shù)字上下變頻、本地載波的產(chǎn)生以及壓控震蕩等重要環(huán)節(jié)都可以用DDS技術(shù)實(shí)現(xiàn)。  采用DDS技術(shù)的
    發(fā)表于 08-19 19:18

    如何采用DDS實(shí)現(xiàn)頻率合成器的設(shè)計(jì)?

    本文將介紹DDS和PLL的工作原理,并結(jié)合一電臺(tái)(工作頻率2 MHz~500 MHz)的設(shè)計(jì),給出DDS做參考的PLL頻率合成器的設(shè)計(jì)方案。
    發(fā)表于 04-20 06:42

    DDS直接數(shù)字頻率合成器、信號(hào)發(fā)生、函數(shù)發(fā)生

    DDS直接數(shù)字頻率合成器、信號(hào)發(fā)生、函數(shù)發(fā)生1.DDS
    發(fā)表于 03-24 18:10

    AD9850 DDS 頻率合成器的原理及應(yīng)用

    AD9850 是AD I 公司采用先進(jìn)的DDS 技術(shù), 1996年推出的高集成度DDS 頻率合成器, 它內(nèi)部包括可編程DDS 系統(tǒng)、高性能D
    發(fā)表于 04-10 13:14 ?83次下載

    基于FPGA直接數(shù)字頻率合成器的設(shè)計(jì)

    直接數(shù)字頻率合成是一種新的頻率合成技術(shù),介紹了利用Altera的FPGA器件
    發(fā)表于 08-09 15:02 ?61次下載

    FPGA實(shí)現(xiàn)直接數(shù)字頻率合成器

     【摘 要】 描述了直接數(shù)字頻率合成器DDS)的原理和特點(diǎn),并給出了用FPGA實(shí)現(xiàn)
    發(fā)表于 05-11 19:52 ?1087次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>的<b class='flag-5'>直接</b>數(shù)字<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>

    基于FPGA直接數(shù)字頻率合成器的設(shè)計(jì)和實(shí)現(xiàn)

    【摘 要】 介紹了利用Altera的FPGA器件(ACEXEP1K50)實(shí)現(xiàn)直接數(shù)字頻率合成器的工作原理、設(shè)計(jì)思路、電路結(jié)構(gòu)和改進(jìn)優(yōu)化方法。
    發(fā)表于 05-16 19:15 ?1134次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>直接</b>數(shù)字<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>的設(shè)計(jì)和<b class='flag-5'>實(shí)現(xiàn)</b>

    基于FPGA直接數(shù)字頻率合成器的設(shè)計(jì)和實(shí)現(xiàn)

    摘要:介紹了利用Altera的FPGA器件(ACEX EP1K50)實(shí)現(xiàn)直接數(shù)字頻率合成器的工作原理、設(shè)計(jì)思想、電路結(jié)構(gòu)和改進(jìn)優(yōu)化方法。
    發(fā)表于 06-20 13:53 ?732次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>直接</b>數(shù)字<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>的設(shè)計(jì)和<b class='flag-5'>實(shí)現(xiàn)</b>

    什么是直接頻率合成器(DS)

    什么是直接頻率合成器(DS) 頻率合成的歷史 頻率
    發(fā)表于 03-23 11:23 ?1893次閱讀

    同步多個(gè)基于DDS頻率合成器AD9850

    同步多個(gè)基于DDS頻率合成器AD9850
    發(fā)表于 11-29 16:03 ?57次下載
    同步多個(gè)基于<b class='flag-5'>DDS</b>的<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>AD9850

    時(shí)鐘應(yīng)用中的直接數(shù)字頻率合成器

    直接數(shù)字式頻率合成器DDSDDS同DSP(數(shù)字信號(hào)處理)一樣,也是一項(xiàng)關(guān)鍵的數(shù)字化技術(shù)。與傳統(tǒng)的頻率
    發(fā)表于 02-01 16:12 ?44次下載
    時(shí)鐘應(yīng)用中的<b class='flag-5'>直接</b>數(shù)字<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>

    頻率合成器環(huán)路濾波器的設(shè)計(jì)

    頻率合成器環(huán)路濾波器的設(shè)計(jì),又需要的下來看看
    發(fā)表于 12-16 22:23 ?23次下載

    基于DDS驅(qū)動(dòng)PLL結(jié)構(gòu)的寬帶頻率合成器的設(shè)計(jì)與實(shí)現(xiàn)

    和仿真,從仿真和測(cè)試結(jié)果看,該頻率合成器達(dá)到了設(shè)計(jì)目標(biāo)。該頻率合成器的輸出頻率范圍為 594~999 MHz,
    發(fā)表于 10-27 17:54 ?10次下載
    基于<b class='flag-5'>DDS</b>驅(qū)動(dòng)PLL結(jié)構(gòu)的寬帶<b class='flag-5'>頻率</b><b class='flag-5'>合成器</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>
    主站蜘蛛池模板: 欧美大片xxxxbbbb | 日本高清视频网站www | 天天干夜夜爽天天操夜夜爽视频 | 国产一区二区丁香婷婷 | 激情综合网婷婷 | 男人j进人女人j 的视频 | 天天撸夜夜操 | 欧美18xxoovideos| 成人网在线视频 | 调教r18车肉高h男男 | 精品三级国产精品经典三 | 亚洲人成网站色7799在线观看 | 国产精品va在线观看不 | 五月婷婷丁香在线视频 | 国产经典一区 | 操碰视频在线观看 | 国产午夜三区视频在线 | 夜夜爽爽 | 亚洲高清不卡视频 | 欲香欲色天天综合和网 | 成熟女性毛茸茸xx免费视频 | 国产三级在线 | 日韩欧美在线第一页 | 国产香蕉久久精品综合网 | 在线色国产 | 色偷偷91久久综合噜噜噜噜 | 五月天亚洲 | 天堂在线网 | 黄色插插插 | 欧美性色欧美a在线播放 | 在线精品一区二区三区 | 亚洲日本中文字幕天天更新 | 欧美黄免在线播放 | 四虎影院永久在线 | 在线电影你懂得 | 高清视频免费 | 色婷婷久久 | 天天操天天干天天摸 | 永久免费在线观看 | 亚洲一卡2卡3卡4卡5卡乱码 | 99久久免费精品视频 |