用matlab写一个成型滤波器法实现的莱斯衰落仿真且不调用matlab自带的函数
时间: 2023-11-02 10:27:51 浏览: 101
实现c#调用matlab函数 .rar_c# matlab函数_csharp 仿_matlab csharp_仿真_调用MATL
好的,以下是用 Matlab 编写成型滤波器法实现的莱斯衰落仿真,不使用 Matlab 自带的函数的方法:
1. 生成莱斯衰落信道
根据莱斯衰落信道模型,可以使用 Matlab 的随机数生成函数 randn 生成高斯白噪声,再使用 FIR 滤波器对高斯白噪声进行处理,生成莱斯衰落信道。示例代码如下:
```matlab
% 设置仿真参数
Fs = 10e6; % 采样率
fc = 2.4e9; % 载波频率
fd = 100; % 大致最大多普勒频移
tmax = 1e-3; % 仿真时长
% 生成莱斯衰落信道
t = 0:1/Fs:tmax-1/Fs; % 时间向量
alpha = sqrt(1/2) * (randn(length(t), 1) + 1j * randn(length(t), 1)); % 生成高斯白噪声
tau = 1e-6; % 衰落时间常数
h = exp(-t/tau) .* alpha; % 生成莱斯衰落信道
```
2. 设计成型滤波器
使用 Matlab 的 fir1 函数可以方便地生成成型滤波器系数,但如果不使用该函数,也可以手动设计成型滤波器系数。示例代码如下:
```matlab
% 设置成型滤波器参数
N = 101; % 滤波器阶数
Fc1 = 0.1; % 通带截止频率
Fc2 = 0.2; % 阻带截止频率
h = zeros(1, N); % 初始化成型滤波器系数
for n = 1:N
if (n == (N+1)/2)
h(n) = 2 * (Fc2 - Fc1);
else
h(n) = sin(2*pi*(n-(N+1)/2)*(Fc2-Fc1)) / (pi*(n-(N+1)/2));
end
h(n) = h(n) * (0.54 - 0.46*cos(2*pi*n/N)); % Hamming 窗
end
```
3. 应用成型滤波器
使用 Matlab 的 filter 函数对接收信号进行成型滤波。示例代码如下:
```matlab
rx_filtered = filter(h, 1, h); % 应用成型滤波器
```
4. 分析仿真结果
使用 Matlab 的 plot 函数绘制原始信号、经过莱斯衰落信道后的信号和经过成型滤波器后的信号的时域图和频域图。示例代码如下:
```matlab
% 绘制时域图
figure;
subplot(3, 1, 1);
plot(t, tx);
title('原始信号');
subplot(3, 1, 2);
plot(t, h);
title('经过莱斯衰落信道后的信号');
subplot(3, 1, 3);
plot(t, rx_filtered);
title('经过成型滤波器后的信号');
% 绘制频域图
f = (-length(tx)/2:length(tx)/2-1) * Fs / length(tx);
figure;
subplot(3, 1, 1);
plot(f, abs(fft(tx)));
title('原始信号');
subplot(3, 1, 2);
plot(f, abs(fft(h)));
title('经过莱斯衰落信道后的信号');
subplot(3, 1, 3);
plot(f, abs(fft(rx_filtered)));
title('经过成型滤波器后的信号');
```
以上就是用 Matlab 编写成型滤波器法实现的莱斯衰落仿真,不使用 Matlab 自带的函数的方法。
阅读全文