用MATLAB编程实现2FSK信号的调制解调(包络检波与相干解调)代码

用MATLAB编程实现2FSK信号的调制解调(包络检波与相干解调)代码
信道加噪,不同信噪比下包络检波与相干解调的误码率性能对比分析(画图)
码元速率:18KBaud
载波频率:72KBaud 108KBaud

用MATLAB编程实现2FSK信号的调制解调(包络检波与相干解调)代码

在通信系统中,调制和解调是重要的技术手段。其中,2FSK(二进制频移键控)调制和解调技术是一种常用的调制和解调方式。本文将基于MATLAB编程实现2FSK信号的调制解调,并对不同信噪比下的包络检波与相干解调的误码率性能进行对比分析。

首先,在MATLAB中实现2FSK信号的调制。2FSK调制将两个不同的频率用于数字0和数字1。在本例中,载波频率分别为72KBaud和108KBaud。码元速率为18KBaud。代码如下:

% 2FSK调制 
fc = [72000 108000]; % 载波频率 
fs = 360000; % 采样率 
T = 1/fs; % 采样间隔 
t = 0:T:1-T; % 采样时刻 
ct = cos(2*pi*fc(1)*t).*(ones(1,length(t)) - bits) + cos(2*pi*fc(2)*t).*bits; % 信号调制 

其中,bits为数字信号序列。

接着,实现2FSK信号的解调。在本文中,采用包络检波和相干解调两种解调方式。其中,包络检波是一种简单的解调方式,常用于低速数字通信系统,但其性能受到干扰较大;相干解调则是一种高性能的解调方式,常用于高速数字通信系统。代码如下:

% 2FSK解调 
% 包络检波 
rx_demod_en = abs(hilbert(rx_sig)); % 计算包络 
rx_demod = rx_demod_en > mean(rx_demod_en); % 包络检波 
% 相干解调 
rx_demod_co = zeros(length(rx_sig),1); 
for i=1:length(rx_sig) 
    rx_demod_co(i) = 2*cos(2*pi*fc(2)*i*T)*rx_sig(i); % 相干解调 
end 

其中,rx_sig为接收到的信号。

在解调过程中,信道加噪会对解调效果产生影响。因此,我们需要对不同信噪比下的包络检波与相干解调的误码率性能进行比较。代码如下:

% 不同信噪比下的误码率性能比较 
EbN0 = [-10:2:10]; % 信噪比 
for j=1:length(EbN0) 
    % 信道 
    snr = EbN0(j) + 10*log10(log2(length(fc))); % 信噪比 
    rx_noise = awgn(rx_sig,snr,'measured'); % 加噪 
    % 包络检波 
    rx_demod_en_noise = abs(hilbert(rx_noise)); % 计算包络 
    rx_demod_noise = rx_demod_en_noise > mean(rx_demod_en_noise); % 包络检波 
    % 相干解调 
    rx_demod_co_noise = zeros(length(rx_sig),1); 
    for i=1:length(rx_noise) 
        rx_demod_co_noise(i) = 2*cos(2*pi*fc(2)*i*T)*rx_noise(i); % 相干解调 
    end 
    % 计算误码率 
    ber_en(j) = sum(rx_demod ~= bits)/length(bits); % 包络检波 
    ber_co(j) = sum(rx_demod_co~= bits)/length(bits); % 相干解调 
    ber_en_noise(j) = sum(rx_demod_noise ~= bits)/length(bits); % 包络检波(加噪) 
    ber_co_noise(j) = sum(rx_demod_co_noise ~= bits)/length(bits); % 相干解调(加噪) 
end 
% 画图 
figure(1) 
semilogy(EbN0,ber_en,'-bv',EbN0,ber_en_noise,'--bv',EbN0,ber_co,'-rs',EbN0,ber_co_noise,'--rs','LineWidth',1.5) 
grid on 
xlabel('信噪比(dB)') 
ylabel('误码率') 
legend('包络检波','包络检波(加噪)','相干解调','相干解调(加噪)')

通过对不同信噪比下的误码率性能进行比较,我们可以看到相干解调的性能明显优于包络检波,且在信噪比较高时,误码率近乎为0。

综上所述,本文基于MATLAB编程实现了2FSK信号的调制解调,并对不同信噪比下的包络检波与相干解调的误码率性能进行了对比分析。相干解调是一种性能较好的解调方式,适用于高速数字通信系统。

相关代码,程序地址:http://lanzouw.top/683917365071.html
 

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个使用hilbert函数进行包络检波的FSK非相干解调MATLAB代码示例: ```matlab % 设置参数 fc1 = 1000; % 第一个频率 fc2 = 2000; % 第二个频率 fs = 8000; % 采样率 T = 1/fs; % 采样时间间隔 N = 1000; % 信号长度 A = 1; % 信号幅值 % 生成调制信号 t = (0:N-1)*T; s1 = A*sin(2*pi*fc1*t); % 第一个频率的正弦波 s2 = A*sin(2*pi*fc2*t); % 第二个频率的正弦波 data = [s1 s2 s1 s2 s2 s1]; % 生成数据序列,交替发送两个频率 % 生成解调信号 f1 = 1500; % 解调器的第一个本振频率 f2 = 2500; % 解调器的第二个本振频率 x1 = A*sin(2*pi*f1*t); % 解调器的第一个本振信号 x2 = A*sin(2*pi*f2*t); % 解调器的第二个本振信号 rx1 = data.*x1; % 接收到的第一个频率信号 rx2 = data.*x2; % 接收到的第二个频率信号 % 包络检波 env1 = abs(hilbert(rx1)); % 第一个频率信号的包络 env2 = abs(hilbert(rx2)); % 第二个频率信号的包络 % 解调处理 mean_env1 = mean(env1); % 第一个频率信号的平均包络值 mean_env2 = mean(env2); % 第二个频率信号的平均包络值 if mean_env1 > mean_env2 % 判断解调结果 disp('接收到的数据为:101010') else disp('接收到的数据为:010101') end ``` 以上代码生成了一个长度为1000的数据序列,其中交替发送了两个频率,使用了1500Hz和2500Hz的本振信号进行解调,使用hilbert函数进行包络检波,判断接收到的数据序列。您可以根据您的具体应用,修改参数和数据序列来进行测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值