用matlab写一段FSK非相干解调解调代码两路信号分别进行包络检波使用hilbert函数,取出低频分量,得到解调信号,比较两路抽样值大小,上支路样值大于下支路判为1,否则判为0
时间: 2024-02-28 11:55:21 浏览: 20
好的,以下是一个使用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 = lowpass(abs(hilbert(rx1)), fc1); % 第一个频率信号的包络的低频分量
env2 = lowpass(abs(hilbert(rx2)), fc1); % 第二个频率信号的包络的低频分量
% 解调处理
bits = zeros(1, length(data));
for i = 1:length(data)
if env1(i) > env2(i) % 判断解调结果
bits(i) = 1;
else
bits(i) = 0;
end
end
% 输出解调结果
disp(['接收到的数据为:' num2str(bits)])
```
以上代码生成了一个长度为1000的数据序列,其中交替发送了两个频率,使用了1500Hz和2500Hz的本振信号进行解调,使用hilbert函数进行包络检波并取出低频分量,判断接收到的数据序列。判断大小的方法是上支路样值大于下支路判为1,否则判为0。您可以根据您的具体应用,修改参数和数据序列来进行测试。