用matlab给出平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。的代码
时间: 2024-02-26 20:57:30 浏览: 181
基于Matlab实现升余弦滚降滤波器冲激响应的产生、基带脉冲成形以及绘制基带信号眼图+仿真结果和运行方法.zip
好的,以下是对应的Matlab代码:
```matlab
% 设置参数
fs = 10000; % 采样率
T = 1/fs; % 采样时间间隔
B = 2000; % 带宽
beta = 0.5; % 滚降系数
% 构造时间序列
t = -5*T:T/10:5*T;
% 构造平方根升余弦脉冲成形滤波器
h = sqrt(2)*pi*B*sinc(pi*B*t).*cos(pi*beta*B*t)./(1-(2*beta*B*t).^2);
% 绘制滤波器的传输函数
f = -fs/2:fs/1000:fs/2; % 频率序列
H = sqrt(2)*cos(pi*f/(2*B)).*(abs(f)<=B); % 传输函数
figure;
plot(f, abs(H));
xlim([-B-100, B+100]);
ylim([0, sqrt(2)+0.1]);
xlabel('频率(Hz)');
ylabel('幅度');
title('平方根升余弦脉冲成形滤波器的传输函数');
% 生成基带信号
fc1 = 1000; % 第一个载频
fc2 = 2000; % 第二个载频
T_symbol = 1/fs*10; % 符号时间间隔
t_symbol = 0:T_symbol:10*T_symbol; % 符号时间序列
data = randi([0, 1], 1, 10); % 随机生成0/1序列
s = zeros(size(t_symbol)); % 基带信号
for i = 1:length(data)
if data(i) == 0
s((i-1)*fs*10+1:i*fs*10) = cos(2*pi*fc1*t_symbol);
else
s((i-1)*fs*10+1:i*fs*10) = cos(2*pi*fc2*t_symbol);
end
end
% 上采样
s_up = upsample(s, 10);
% 过滤
r = filter(h, 1, s_up);
% 绘制复基带信号的功率谱
f_r = fftshift(abs(fft(r)).^2);
f_axis = linspace(-fs/2, fs/2, length(f_r));
figure;
plot(f_axis, f_r);
xlim([-B-100, B+100]);
ylim([0, max(f_r)*1.1]);
xlabel('频率(Hz)');
ylabel('功率谱');
title('复基带信号的功率谱');
% 计算复基带信号的带宽和符号速率
bw = B/2; % 复基带信号的带宽
symbol_rate = B; % 符号速率
```
注意,以上代码中生成的基带信号是一个随机的0/1序列,使用时可以根据需要进行修改。另外,在绘制复基带信号的功率谱时,由于频谱图是对称的,因此需要使用`fftshift`函数将频谱图移动到中心。
阅读全文