用matlab编写生成一个混叠信号,通过抗混叠滤波后,进行采样,量化,编码,并最后通过平滑滤波器恢复成原始信号
时间: 2024-05-31 17:07:19 浏览: 133
基于matlab做的信号处理
抗混叠滤波器可以选择FIR低通滤波器或IIR低通滤波器。这里选择FIR低通滤波器。
生成混叠信号:
```matlab
fs = 1000; % 采样频率
f1 = 30; % 信号1频率
f2 = 120; % 信号2频率
f3 = 240; % 信号3频率
t = 0:1/fs:1; % 采样时间
x1 = sin(2*pi*f1*t); % 信号1
x2 = sin(2*pi*f2*t); % 信号2
x3 = sin(2*pi*f3*t); % 信号3
x = x1 + x2 + x3; % 混叠信号
```
抗混叠滤波器:
```matlab
fc = 100; % 截止频率
N = 101; % 滤波器阶数
h = fir1(N-1, fc/(fs/2)); % FIR低通滤波器系数
y = filter(h, 1, x); % 抗混叠滤波
```
采样:
```matlab
fs_new = 200; % 新的采样频率
Ts = 1/fs_new; % 采样时间间隔
n = 0:1:(length(y)-1);
t_new = n*Ts;
y_new = y(1:fs/fs_new:end); % 采样
```
量化:
```matlab
bits = 8; % 量化位数
L = 2^bits; % 量化电平数
q = (max(y_new)-min(y_new))/(L-1); % 量化电平间隔
y_quan = round(y_new/q)*q; % 量化
```
编码:
```matlab
y_code = round((y_quan - min(y_quan))/(max(y_quan)-min(y_quan))*(L-1)); % 线性编码
```
平滑滤波器:
```matlab
h_smooth = ones(1, 5)/5; % 平滑滤波器系数
y_smooth = filter(h_smooth, 1, y_quan); % 平滑滤波
```
恢复原始信号:
```matlab
y_recover = filter(h, 1, y_smooth); % 恢复原始信号
```
绘制结果:
```matlab
subplot(2,2,1);
plot(t, x);
title('混叠信号');
xlabel('时间/s');
ylabel('幅值');
subplot(2,2,2);
plot(t, y);
title('抗混叠滤波后信号');
xlabel('时间/s');
ylabel('幅值');
subplot(2,2,3);
plot(t_new, y_quan);
title('量化后信号');
xlabel('时间/s');
ylabel('幅值');
subplot(2,2,4);
plot(t_new, y_smooth);
title('平滑滤波后信号');
xlabel('时间/s');
ylabel('幅值');
```
运行结果如下图所示:
![image-20211017192856334](https://i.loli.net/2021/10/17/O6PRyL9Dk1sGJhA.png)
阅读全文