matlab写代码FSK解调
时间: 2023-07-10 08:22:18 浏览: 55
好的,以下是 FSK 解调的 MATLAB 代码:
```matlab
%% FSK解调
y1 = fsk_noisy .* cos(2*pi*f1*t); % 计算解调信号1
y2 = fsk_noisy .* cos(2*pi*f2*t); % 计算解调信号2
% 设计巴特沃斯低通滤波器,截止频率为基带信号频率的两倍
[b,a] = butter(5, 2*fm/j);
% 对解调信号进行滤波
f1_rec = filtfilt(b, a, y1);
f2_rec = filtfilt(b, a, y2);
% 通过解调信号的幅度来判断码元的取值,得到解调后的二进制数据
for n = 1:i
if f1_rec(j/i*n) > f2_rec(j/i*n)
a_rec(n) = 1;
else
a_rec(n) = 0;
end
end
% 比较解调前后的数据
disp('原始数据:');
disp(a);
disp('解调后数据:');
disp(a_rec);
```
在此代码中,我们首先计算出两个解调信号 `y1` 和 `y2`,然后通过 `butter` 函数设计巴特沃斯低通滤波器,并使用 `filtfilt` 函数对解调信号进行滤波,得到解调后的信号 `f1_rec` 和 `f2_rec`。最后,通过比较解调后的信号的幅度大小,来判断码元的取值,得到解调后的二进制数据。
希望这可以帮到你!
相关问题
FSK解调matlab代码
以下是一个简单的FSK解调Matlab代码示例:
```matlab
% 生成FSK信号
fs = 10000; % 采样率
f1 = 1000; % 第一个频率
f2 = 2000; % 第二个频率
t = 0:1/fs:1; % 时间向量
msg = [0 1 0 1 1 0 1 0]; % 待发送的二进制消息
modulated = fskmod(msg,f1,f2,fs); % 生成FSK信号
% 加入噪声
SNR = 10; % 信噪比
noisy = awgn(modulated, SNR, 'measured'); % 加入高斯白噪声
% 解调FSK信号
freqsep = f2-f1; % 频率间隔
nsamp = 16; % 采样率
[b,a] = butter(6, freqsep/(2*fs), 'low'); % 低通滤波器
filtered = filter(b, a, noisy); % 滤波
t = 0:nsamp:length(filtered)-1; % 采样时间
samples = filtered(t+1); % 采样
demodulated = fskdemod(samples,f1,freqsep,nsamp,fs); % 解调
% 显示结果
subplot(3,1,1);
plot(t,modulated);
title('Modulated Signal');
subplot(3,1,2);
plot(t,filtered);
title('Filtered Signal');
subplot(3,1,3);
plot(t,demodulated);
title('Demodulated Signal');
```
这个代码生成了一个包含二进制消息的FSK信号,并加入了高斯白噪声。然后,它使用一个低通滤波器和采样器解调信号,并显示了原始FSK信号,滤波信号和解调信号。
2fsk调制解调matlab代码
以下是2FSK调制解调的MATLAB代码:
% 2FSK调制
fc = 1000; %载波频率
fs = 10000; %采样频率
T = 1/fs; %采样时间间隔
t = 0:T:1-T; %时间序列
f1 = 2000; %数字信息“1”对应的频率
f2 = 4000; %数字信息“0”对应的频率
a = [1 0 1 1 0 1 0 0]; %数字信息序列
s = zeros(1,length(t)); %初始化调制信号
for i = 1:length(a)
if a(i) == 1
s((i-1)*fs/f1+1:i*fs/f1) = sin(2*pi*f1*t((i-1)*fs/f1+1:i*fs/f1));
else
s((i-1)*fs/f2+1:i*fs/f2) = sin(2*pi*f2*t((i-1)*fs/f2+1:i*fs/f2));
end
end
c = sin(2*pi*fc*t); %载波信号
x = s.*c; %调制信号
subplot(3,1,1);
plot(t,s);
title('数字信息信号');
subplot(3,1,2);
plot(t,c);
title('载波信号');
subplot(3,1,3);
plot(t,x);
title('2FSK调制信号');
% 2FSK解调
y = x.*c; %解调信号
[b,a] = butter(6,2*pi*(f2-f1)/fs); %设计带通滤波器
z = filter(b,a,y); %滤波
figure;
subplot(3,1,1);
plot(t,x);
title('2FSK调制信号');
subplot(3,1,2);
plot(t,y);
title('2FSK解调信号');
subplot(3,1,3);
plot(t,z);
title('2FSK解调后的数字信息信号');
其中,a为数字信息序列,fc为载波频率,fs为采样频率,f1和f2分别为数字信息“1”和“0”对应的频率。代码中使用了带通滤波器对解调信号进行滤波,得到数字信息序列。