4ask调制与解调的matlab
时间: 2023-10-23 21:11:50 浏览: 94
基于matlab的ask调制解调实现.doc
4ASK调制与解调的MATLAB代码如下:
调制代码:
```matlab
clear all;
clc;
% 参数设置
fc = 100; % 载波频率
fs = 1000; % 采样频率
T = 1/fs; % 采样时间间隔
tb = 1; % 符号间隔时间
N = fs*tb; % 每个符号对应的采样点数
A = 1; % 振幅
f1 = 10; % 第一个数字信号频率
f2 = 20; % 第二个数字信号频率
f3 = 30; % 第三个数字信号频率
f4 = 40; % 第四个数字信号频率
bits = [1 0 1 1 0 0 1 0]; % 待调制的比特序列
% 生成数字信号
t = 0:T:tb-T; % 一个符号内的时间序列
s1 = A*sin(2*pi*f1*t); % 第一个数字信号
s2 = A*sin(2*pi*f2*t); % 第二个数字信号
s3 = A*sin(2*pi*f3*t); % 第三个数字信号
s4 = A*sin(2*pi*f4*t); % 第四个数字信号
% 4ASK调制
s = zeros(1, length(bits)*N); % 用于存储调制后的信号序列
for i = 1:length(bits)
if bits(i) == 0 % 0 -> s1
s((i-1)*N+1:i*N) = s1;
else % 1 -> s2
s((i-1)*N+1:i*N) = s2;
end
end
% 生成载波信号
c = A*sin(2*pi*fc*t);
% 调制后的信号
x = s.*c;
% 作图
figure(1);
subplot(311);
plot(t, s1, 'r', t, s2, 'g', t, s3, 'b', t, s4, 'm');
xlabel('时间/s');
ylabel('幅值');
title('数字信号波形');
legend('1', '2', '3', '4');
subplot(312);
plot(t, c);
xlabel('时间/s');
ylabel('幅值');
title('载波信号波形');
subplot(313);
plot(x);
xlabel('时间/s');
ylabel('幅值');
title('4ASK调制信号波形');
```
解调代码:
```matlab
clear all;
clc;
% 参数设置
fc = 100; % 载波频率
fs = 1000; % 采样频率
T = 1/fs; % 采样时间间隔
tb = 1; % 符号间隔时间
N = fs*tb; % 每个符号对应的采样点数
f1 = 10; % 第一个数字信号频率
f2 = 20; % 第二个数字信号频率
% 生成数字信号
t = 0:T:tb-T; % 一个符号内的时间序列
s1 = sin(2*pi*f1*t); % 第一个数字信号
s2 = sin(2*pi*f2*t); % 第二个数字信号
% 生成载波信号
c = sin(2*pi*fc*t);
% 4ASK调制
bits = [1 0 1 1 0 0 1 0]; % 待调制的比特序列
s = zeros(1, length(bits)*N); % 用于存储调制后的信号序列
for i = 1:length(bits)
if bits(i) == 0 % 0 -> s1
s((i-1)*N+1:i*N) = s1;
else % 1 -> s2
s((i-1)*N+1:i*N) = s2;
end
end
% 调制后的信号
x = s.*c;
% 加噪声
SNR = 10; % 信噪比
noise = randn(1, length(x)); % 高斯白噪声
noise_power = norm(x)/sqrt(length(x))/10^(SNR/20); % 噪声功率
noise = noise*noise_power;
y = x + noise;
% 解调
bits_rec = zeros(1, length(bits)); % 解调后的比特序列
for i = 1:length(bits)
% 一个符号内的信号
z = y((i-1)*N+1:i*N).*c((i-1)*N+1:i*N);
% 对信号进行积分
s1_sum = sum(z.*s1);
s2_sum = sum(z.*s2);
% 判决
if s1_sum > s2_sum
bits_rec(i) = 0;
else
bits_rec(i) = 1;
end
end
% 计算误码率
num_error = sum(bits ~= bits_rec);
BER = num_error/length(bits);
% 作图
figure(1);
subplot(311);
plot(t, s1, 'r', t, s2, 'g');
xlabel('时间/s');
ylabel('幅值');
title('数字信号波形');
legend('1', '2');
subplot(312);
plot(t, c);
xlabel('时间/s');
ylabel('幅值');
title('载波信号波形');
subplot(313);
plot(y);
xlabel('时间/s');
ylabel('幅值');
title('4ASK调制信号波形(加噪声后)');
figure(2);
stem(bits, 'fill', 'MarkerSize', 8);
hold on;
stem(bits_rec, 'r', 'fill', 'MarkerSize', 8);
xlabel('比特序号');
ylabel('比特值');
title(['误码率:', num2str(BER)]);
legend('发送比特', '接收比特');
```
其中,调制代码中的 `bits` 变量是待调制的比特序列,解调代码中的 `bits` 变量是发送的比特序列。运行后,可以得到调制信号、加噪声后的信号、解调后的比特序列以及误码率等结果。
阅读全文