www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > FPGA開源工作室

基于FPGA數(shù)字混頻器的設(shè)計

1 混頻原理

混頻即兩個不同頻率之間的混合,得到第三個頻率。數(shù)字混頻器的設(shè)計也是FPGA數(shù)字信號處理中基礎(chǔ)入門的設(shè)計之一,混頻便是兩個信號相乘得它們的和頻率和差頻率。數(shù)字混頻在通信的調(diào)制、解調(diào)、DUC(數(shù)字上變頻)、DDC(數(shù)字下變頻)等系統(tǒng)中廣泛應(yīng)用。通常把其中一個信號稱為本振信號(local oscillator),另一個信號稱為混頻器的輸入信號。

2 設(shè)計目標(biāo)

在采樣頻率為44.1KHZ下通過DDS產(chǎn)生2KHZ的本振信號和3KHZ的外部輸入信號。對兩個信號分別進(jìn)行相加處理和相乘處理。使用matlab分析信號頻域和時域的變化。

3 matlab設(shè)計驗證

clear all
close all
clc

FS = 44100;%采樣率
fc = 2000; %本振信號 2khz
fe = 3000; %外部輸入信號  3khz
N  = 1024;%1024點一個正玄周期
Q  = 32;  %量化32bit

t =0:2*pi/FS:2*pi*N/FS;

sin_osc =sin(t*fc);
sin_e =sin(t*fe);

sin_mult = sin_osc.*sin_e;
sin_add = sin_osc+sin_e;

f_osc =fft(sin_osc,N);
f_osc=20*log(abs(f_osc))/log(10);        %換算成dBW單位
ft=[0:(FS/N):FS/2];              %轉(zhuǎn)換橫坐標(biāo)以Hz為單位
f_osc=f_osc(1:length(ft));

f_e =fft(sin_e,N);
f_e=20*log(abs(f_e))/log(10);        %換算成dBW單位
f_e=f_e(1:length(ft));

f_add =fft(sin_add,N);
f_add=20*log(abs(f_add))/log(10);        %換算成dBW單位
f_add=f_add(1:length(ft));

f_mult =fft(sin_mult,N);
f_mult=20*log(abs(f_mult))/log(10);        %換算成dBW單位
f_mult=f_mult(1:length(ft));

figure,
hold on
subplot(221),plot(t(1:128),sin_osc(1:128),'-');
legend('sinosc');title('2K HZ');
subplot(222),plot(t(1:128),sin_e(1:128),'-');
legend('sine');title('3K HZ');
subplot(223),plot(t(1:128),sin_add(1:128),'-');
legend('sinadd');title('add ');
subplot(224),plot(t(1:128),sin_mult(1:128),'-');
legend('sinmult');title('mult ');
grid;
hold off

figure,
hold on
subplot(221);plot(ft,f_osc);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖 2KHZ','fontsize',8);legend('sinosc');
subplot(222);plot(ft,f_e);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖3KHZ','fontsize',8);legend('sine');
subplot(223);plot(ft,f_mult);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖1KHZ 和 6','fontsize',8);legend('sinmult');
subplot(224);plot(ft,f_add);
xlabel('頻率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);
title('信號頻譜圖2KHZ 和 3KHZ','fontsize',8);legend('sinadd');
hold off

圖1 matlab時域波形

如上圖1所示,圖1左上1為2khz本振信號sin波,圖1右上2為3khz外部輸入sin波,圖1左下1為2khz+3khz時域波形,圖1右下1為2KHZ*3KHZ時域波形。

圖2 信號頻域分析

如上圖2所示,左下1為兩個信號相乘所得頻域圖形,分析可知2KHZ*3KHZ得到了1KHZ和6KHZ,右下1為兩個信號相加所得頻域圖像,分析可知2khz+3khz得到了2khz 和 3khz。

4 FPGA的程序設(shè)計

1) 相加模塊設(shè)計

`timescale 1ps/1ps

module digital_add( input mclk,//45.1584MHZ input reset_n, input signed[31:0] pcm_in1, input signed[31:0] pcm_in2, output signed[31:0] pcm_out ); localparam LAST_CYCLE = 1023; reg [9:0] i; reg signed [32:0] pcm_r; assign pcm_out = pcm_r[32:1]; always @(posedge mclk or negedge reset_n) begin if(!reset_n) begin
 i<= 0; pcm_r <= 33'b0; end else begin
 i <= i + 1; if(i == 0) pcm_r <= pcm_in1 + pcm_in2;//add end
end
endmodule

相加會產(chǎn)生位擴(kuò)展。
2)相乘模塊設(shè)計

timescale 1ps/1ps

module digital_mult( input mclk,//45.1584MHZ input reset_n, input signed[31:0] pcm_in1, input signed[31:0] pcm_in2, output signed[31:0] pcm_out ); localparam LAST_CYCLE = 1023; reg [9:0] i; reg signed [63:0] pcm_r; assign pcm_out = pcm_r[63:32]; always @(posedge mclk or negedge reset_n) begin if(!reset_n) begin
 i<= 0; pcm_r <= 0; end else begin
 i <= i + 1; if(i == 0) pcm_r <= pcm_in1*pcm_in2;//mult end
end
endmodule

圖3 數(shù)字混頻器的modelsim時域波形

觀察圖3 可知matlab仿真基本和FPGA時域波形一致,設(shè)計成功。接下來對FPGA設(shè)計處理的數(shù)據(jù)進(jìn)行分析。

圖4 FPGA產(chǎn)生的2khz 和3khz時域和頻域波形

圖5 混頻后時域和頻域分析

由圖4和圖5與圖1和圖2對比,F(xiàn)PGA設(shè)計成功。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉