对BPSK信号进行Haar 小波变换并绘制时域和频域图的matlab完整代码
时间: 2024-01-16 11:02:48 浏览: 43
以下是对BPSK信号进行Haar小波变换并绘制时域和频域图的Matlab完整代码:
```matlab
% 生成BPSK信号
N = 1024; % 信号长度
Fs = 1000; % 采样率
t = (0:N-1)/Fs; % 时间向量
f = 10; % 信号频率
s = cos(2*pi*f*t); % 基带信号
fc = 100; % 载波频率
c = cos(2*pi*fc*t); % 载波信号
x = s.*c; % BPSK信号
% Haar小波变换
[C, L] = wavedec(x, 3, 'haar'); % 小波分解,分解3层
A3 = appcoef(C, L, 'haar', 3); % 获取第3层低频系数(近似系数)
D3 = detcoef(C, L, 3); % 获取第3层高频系数(细节系数)
A2 = appcoef(C, L, 'haar', 2); % 获取第2层低频系数
D2 = detcoef(C, L, 2); % 获取第2层高频系数
A1 = appcoef(C, L, 'haar', 1); % 获取第1层低频系数
D1 = detcoef(C, L, 1); % 获取第1层高频系数
% 绘制时域图
figure;
subplot(5,1,1);
plot(t, x);
title('BPSK信号');
xlabel('时间(秒)');
ylabel('幅度');
axis([0 max(t) -1.2 1.2]);
subplot(5,1,2);
plot(t, A3);
title('第3层低频系数');
xlabel('时间(秒)');
ylabel('幅度');
axis([0 max(t) -1.2 1.2]);
subplot(5,1,3);
plot(t, D3);
title('第3层高频系数');
xlabel('时间(秒)');
ylabel('幅度');
axis([0 max(t) -1.2 1.2]);
subplot(5,1,4);
plot(t, D2);
title('第2层高频系数');
xlabel('时间(秒)');
ylabel('幅度');
axis([0 max(t) -1.2 1.2]);
subplot(5,1,5);
plot(t, D1);
title('第1层高频系数');
xlabel('时间(秒)');
ylabel('幅度');
axis([0 max(t) -1.2 1.2]);
% 绘制频域图
figure;
subplot(5,1,1);
plot(abs(fft(x)));
title('BPSK信号');
xlabel('频率(Hz)');
ylabel('幅度');
axis([0 N/2 0 max(abs(fft(x)))]);
subplot(5,1,2);
plot(abs(fft(A3)));
title('第3层低频系数');
xlabel('频率(Hz)');
ylabel('幅度');
axis([0 N/2 0 max(abs(fft(A3)))]);
subplot(5,1,3);
plot(abs(fft(D3)));
title('第3层高频系数');
xlabel('频率(Hz)');
ylabel('幅度');
axis([0 N/2 0 max(abs(fft(D3)))]);
subplot(5,1,4);
plot(abs(fft(D2)));
title('第2层高频系数');
xlabel('频率(Hz)');
ylabel('幅度');
axis([0 N/2 0 max(abs(fft(D2)))]);
subplot(5,1,5);
plot(abs(fft(D1)));
title('第1层高频系数');
xlabel('频率(Hz)');
ylabel('幅度');
axis([0 N/2 0 max(abs(fft(D1)))]);
```
注意,上述代码中的绘图部分仅展示了各层系数的幅度谱,未展示相位谱。如果需要绘制完整的频域图,可以使用`fftshift`函数将频域数据移动到中心位置,然后分别绘制幅度谱和相位谱。