用matlab写一段比较db基和sym基相位失真程度、频带划分效果的代码
时间: 2023-12-03 22:41:58 浏览: 65
以下是一段用MATLAB比较db基和sym基相位失真程度、频带划分效果的代码:
```MATLAB
% 生成测试信号
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间序列
f1 = 5; % 第一个频率
f2 = 20; % 第二个频率
x = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 合成信号
% 计算db基和sym基的相位失真程度
order = 16; % 滤波器阶数
fc = 10; % 截止频率
[b_db,a_db] = butter(order, 2*fc/fs, 'high', 'db'); % db基滤波器系数
[b_sym,a_sym] = butter(order, 2*fc/fs, 'high', 'sym'); % sym基滤波器系数
y_db = filter(b_db, a_db, x); % db基滤波器输出
y_sym = filter(b_sym, a_sym, x); % sym基滤波器输出
phase_distortion_db = sum(abs(angle(y_db./x))); % db基相位失真程度
phase_distortion_sym = sum(abs(angle(y_sym./x))); % sym基相位失真程度
% 计算db基和sym基的频带划分效果
f = linspace(0,fs/2,1024); % 频率序列
h_db = freqz(b_db,a_db,f,fs); % db基频率响应
h_sym = freqz(b_sym,a_sym,f,fs); % sym基频率响应
band_division_db = max(abs(h_db)); % db基频带划分效果
band_division_sym = max(abs(h_sym)); % sym基频带划分效果
% 输出结果
fprintf('db基相位失真程度:%f\n', phase_distortion_db);
fprintf('sym基相位失真程度:%f\n', phase_distortion_sym);
fprintf('db基频带划分效果:%f\n', band_division_db);
fprintf('sym基频带划分效果:%f\n', band_division_sym);
```
解释一下这段代码做了什么:
首先,我们生成了一个由两个正弦波合成的测试信号。然后,我们使用`butter`函数计算了一个16阶的高通滤波器的系数,其中`'db'`和`'sym'`分别表示使用db基和sym基计算系数。接着,我们分别使用这两个滤波器对测试信号进行滤波,并计算滤波器输出和原始信号之间的相位差的绝对值和,作为相位失真程度的度量。最后,我们计算了滤波器的频率响应,并找到频率响应的最大值,作为频带划分效果的度量。
你可以使用这段代码在MATLAB中运行,以比较db基和sym基的相位失真程度和频带划分效果。
阅读全文