matlab中平方根升余弦滚降滤波用的函数
时间: 2023-11-16 11:06:53 浏览: 248
在 Matlab 中,平方根升余弦滚降滤波可以使用 firrcos 函数来实现。该函数的语法如下:
```matlab
h = firrcos(N, Wc, beta, rolloff, 'rollofftype')
```
其中,N 表示滤波器的长度;Wc 表示滤波器的截止频率;beta 表示余弦半周期的系数;rolloff 表示滚降因子;'rollofftype' 表示滚降类型。
例如,下面的代码演示了如何使用 firrcos 函数生成一个长度为 50,截止频率为 0.1,滚降因子为 0.5 的平方根升余弦滚降滤波器:
```matlab
N = 50;
Wc = 0.1;
beta = 0.5;
rolloff = 0.5;
h = firrcos(N, Wc, beta, rolloff, 'rollofftype');
```
生成的滤波器 h 可以用于信号的滤波。
相关问题
将上一个问题的调制信号用平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
以下是matlab代码实现:
调制信号用平方根升余弦脉冲成形,滚降系数为0.5
```matlab
% 构造滤波器,平方根升余弦脉冲成形,滚降系数为0.5,时域长度为50个符号
span = 50; % 滤波器时域长度
rolloff = 0.5; % 滚降系数
srrc_filter = rcosdesign(rolloff, span, Ns/Fs, 'sqrt');
% 将滤波器归一化
srrc_filter = srrc_filter / max(srrc_filter);
% 显示滤波器的时域响应和频域响应
fvtool(srrc_filter, 'Analysis', 'freq')
% 对调制信号进行滤波
tx_signal_filtered = conv(qam_symbols, srrc_filter, 'same');
```
绘制脉冲成形滤波器的传输函数,标出其带宽
```matlab
% 绘制滤波器的传输函数
freqz(srrc_filter, 1, 1024, Fs);
% 获取滤波器的带宽
bw = bandwidth(srrc_filter, Fs);
% 在图上标出带宽
hold on
plot([-bw/2, -bw/2], [-100, 0], 'r--');
plot([bw/2, bw/2], [-100, 0], 'r--');
hold off
% 显示图形标题和轴标签
title('脉冲成形滤波器的传输函数');
xlabel('频率(Hz)');
ylabel('增益(dB)');
```
对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
```matlab
% 上采样
tx_signal_upsampled = upsample(qam_symbols, Ns);
% 滤波
tx_signal_bb = conv(tx_signal_upsampled, srrc_filter, 'same');
% 计算功率谱密度
[p, w] = periodogram(tx_signal_bb, [], [], Fs, 'centered', 'psd');
% 绘制功率谱密度图
plot(w, 10*log10(p));
hold on
% 标出带宽
plot([-bw/2, -bw/2], [-200, 0], 'r--');
plot([bw/2, bw/2], [-200, 0], 'r--');
% 显示图形标题和轴标签
title('复基带信号的功率谱密度');
xlabel('频率(Hz)');
ylabel('功率谱密度(dB/Hz)');
% 计算基带信号的带宽
bw_baseband = Rs * (1 + rolloff) / 2;
% 在图上标出基带信号的带宽和符号速率
plot([-bw_baseband/2, -bw_baseband/2], [-200, 0], 'g--');
plot([bw_baseband/2, bw_baseband/2], [-200, 0], 'g--');
plot([Rs/2, Rs/2], [-200, 0], 'm--');
hold off
% 添加图例
legend('功率谱密度', '复基带信号带宽', '基带信号带宽', '符号速率');
```
说明:
通过平方根升余弦脉冲成形滤波器,可以对调制信号进行滤波,使其变为复基带信号。滤波器的带宽可以通过bandwidth函数计算得到,也可以通过freqz函数绘制频域响应图并标出带宽。复基带信号的功率谱密度可以通过periodogram函数计算得到,可以看到其带宽与滤波器的带宽相对应。与基带信号带宽和符号速率相比较,可以看到复基带信号的带宽更宽,这是因为通过脉冲成形滤波器升采样后,信号的带宽被扩展了,但是传输的信息速率仍然为4Kbps。
提供MATLAB代码以实现以下任务(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
以下是MATLAB代码实现:
```matlab
% 产生信源符号序列
bits = randi([0 1], 1, 40000); % 生成40000个0或1的随机数
symbols = bi2de(reshape(bits, 4, [])', 'left-msb'); % 将比特序列转换为16进制符号
modSymbols = qammod(symbols, 16); % 星座映射
scatterplot(modSymbols); % 绘制星座图
xlabel('I'); ylabel('Q'); title('16QAM星座图');
% 脉冲成形
rolloff = 0.5; span = 10; % 滚降系数和脉冲宽度
sps = 4; % 每个符号对应4个采样点
pulse = rcosdesign(rolloff, span, sps, 'sqrt'); % 平方根升余弦脉冲成形滤波器
freqz(pulse); % 绘制滤波器传输函数
xlabel('Normalized Frequency'); ylabel('Magnitude'); title('脉冲成形滤波器传输函数');
% 上采样和滤波
upsampledSymbols = upsample(modSymbols, sps); % 上采样
filteredSignal = filter(pulse, 1, upsampledSymbols); % 滤波
Fs = 100000; % 采样率
pwelch(filteredSignal, [], [], [], Fs); % 绘制功率谱密度图
xlabel('Frequency (Hz)'); ylabel('Power/Frequency (dB/Hz)'); title('复基带信号功率谱密度图');
```
需要注意的是,符号速率为4Kbps,采样率应该至少为8KHz,而不是100KHz。因此,在代码中,我们将每个符号对应的采样点数设为4,从而得到采样率为16KHz。此外,为了避免频谱混叠,滤波器的带宽应该为符号速率的两倍,即8KHz。因此,我们将脉冲成形滤波器的脉冲宽度设为10个采样点,从而得到带宽为8KHz的滤波器。
阅读全文