利用matlab写一个2psk调制解调的代码,能够画出通过带通的波形
时间: 2024-02-23 20:01:09 浏览: 23
好的,以下是一个2PSK调制解调的MATLAB代码,同时也会输出调制信号通过带通滤波器后的波形:
```matlab
% 调制信号函数
function [modulated, t] = mod_signal(data, fc, fs)
t = 0:1/fs:(length(data)-1)/fs; % 时间轴
carrier = sin(2*pi*fc*t); % 载波
modulated = zeros(size(t)); % 调制信号
for i = 1:length(data)
if data(i) == 0
modulated((i-1)*fs/fc+1:i*fs/fc) = carrier((i-1)*fs/fc+1:i*fs/fc);
else
modulated((i-1)*fs/fc+1:i*fs/fc) = -carrier((i-1)*fs/fc+1:i*fs/fc);
end
end
end
% 解调信号函数
function [demodulated, t] = demod_signal(signal, fc, fs)
t = 0:1/fs:(length(signal)-1)/fs; % 时间轴
carrier = sin(2*pi*fc*t); % 载波
demodulated = zeros(size(t)); % 解调信号
for i = 1:length(signal)
if signal(i) >= 0
demodulated(i) = 0;
else
demodulated(i) = 1;
end
end
end
% 带通滤波器函数
function [filtered, t] = bandpass_filter(signal, fs, f1, f2)
[b, a] = butter(6, [f1, f2]/(fs/2), 'bandpass');
filtered = filter(b, a, signal);
t = 0:1/fs:(length(signal)-1)/fs; % 时间轴
end
% 测试数据
data = [0, 1, 1, 0, 1, 0, 0, 1, 0, 1];
fc = 10; % 载波频率
fs = 100; % 采样频率
f1 = 8; % 带通滤波器下限频率
f2 = 12; % 带通滤波器上限频率
% 调制
[modulated, t] = mod_signal(data, fc, fs);
subplot(3, 1, 1);
plot(t, modulated);
title('Modulated Signal');
xlabel('Time (s)');
ylabel('Amplitude');
% 带通滤波器
[filtered, t] = bandpass_filter(modulated, fs, f1, f2);
subplot(3, 1, 2);
plot(t, filtered);
title('Filtered Signal');
xlabel('Time (s)');
ylabel('Amplitude');
% 解调
[demodulated, t] = demod_signal(filtered, fc, fs);
subplot(3, 1, 3);
stairs(t, demodulated, 'LineWidth', 2);
ylim([-0.1, 1.1]);
title('Demodulated Signal');
xlabel('Time (s)');
ylabel('Amplitude');
```
运行代码后,会先输出调制信号的图形,然后输出调制信号通过带通滤波器后的图形,最后输出解调信号的图形。