【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真③(信号调制仿真)

4 篇文章 1 订阅

Verilog编写2FSK第③步信号的调制

上一篇编写了2FSK调制信号的程序,本节编写信号调制的子程序

  • 2FSK二进制频移键控,FSK 是用不同频率的载波来传递数字消息的。
  • 例如:f1=sin2πw f2=sin4πw 传输f1时代表’0’传输f2时是’1’
module modulation(clk,DDSin,DA_Data,DA_Data2,DDS_out);//定义模块和端口
input clk;//输入的时钟
input DDSin;//需要调制的信号
input wire [10:0]DA_Data;//输入的载波=‘0’
input wire [10:0]DA_Data2;//输入的载波=‘1’
output wire[10:0]DDS_out;//输出的调制完成的信号
reg [10:0]canshu;//模块定义内部寄存器
always @(posedge clk)//每当时钟上升沿时触发
begin
if(DDSin==0)//如果输入的基带信号为0则输出位载波1
canshu<=DA_Data;
else //如果输入的基带信号为1则输出位载波2
canshu<=DA_Data2;
end
assign DDS_out=canshu;//
endmodule
  • 子模块编写完成后编写顶层文件
module DDS_top(
input clk,
output wire [10:0]DA_Data,
output wire [10:0]DA_Data2,
output wire [10:0]DDS_out,
input canshu
);
DDS DDS(//例化上节的载波生成的模块
.clk(clk),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2)
);

modulation modulation(
.clk(clk),
.DDSin(canshu),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2),
.DDS_out(DDS_out)
);
endmodule
  • 最后编写tb仿真文件
`timescale  1ms/1ms
module DDS_tb;//因为是仿真文件不用进行端口设置,该文件里的参数都会在wave中显示
wire [10:0]DA_Data;
wire [10:0]DA_Data2;
wire [10:0]DDS_out;
reg clk;
reg canshu=0;
DDS_top DDS_top(
.clk(clk),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2),
.DDS_out(DDS_out),
.canshu(canshu)
);
initial clk=1;
always #5 clk=~clk;
endmodule

【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真①( MATLAB生成.mif文件)

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于使用MATLAB和FPGA结合实现2FSK调制解调的设计思路。 首先,您需要使用MATLAB来生成2FSK调制信号。您可以使用以下代码生成2FSK调制信号: ```matlab % 2FSK Modulation f1 = 10; % Carrier frequency 1 f2 = 20; % Carrier frequency 2 fs = 100; % Sampling frequency t = 0:1/fs:1; % Time vector m = [1 0 1 0 1 0 1 0]; % Message signal m = repelem(m,fs/f1); % Upsample the message signal s1 = sin(2*pi*f1*t); % Carrier signal 1 s2 = sin(2*pi*f2*t); % Carrier signal 2 s = m.*s1 + ~m.*s2; % Modulated signal ``` 这里,您需要定义两个载波频率和采样频率,然后生成一个时间向量。接下来,您需要定义一个消息信号,并将其上采样以与载波频率匹配。然后,您可以生成两个载波信号,并将它们与消息信号相乘。最后,您将它们相加,生成2FSK调制信号。 接下来,您需要将2FSK调制信号发送到FPGA中进行解调。在FPGA中,您可以使用相干解调器。相干解调器的原理是将接收信号与已知的参考信号相乘,然后将其通过低通滤波器来滤除高频分量。以下是相干解调器的MATLAB代码示例: ```matlab % 2FSK Demodulation r = s.*s1; % Received signal [b,a] = butter(10,2*f1/fs); % Lowpass filter y = filter(b,a,r); % Filtered signal z = y > mean(y); % Demodulated signal ``` 这里,您需要将接收到的信号与已知的载波信号1相乘。然后,您可以使用一个低通滤波器来滤除高频分量,并将其推迟一定的时间,以与原始消息信号对齐。最后,您可以将信号与其均值进行比较,并将其二值化,以获得解调信号。 在FPGA中,您可以使用HDL Coder将MATLAB代码转换为可在FPGA上运行的代码。HDL Coder支持将MATLAB代码转换为VHDL或Verilog语言,并为您提供FPGA开发工具的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值