資源簡介
f1=50; % 頻率1
f2=100; % 頻率2
fs=2*(f1+f2); % 采樣頻率
Ts=1/fs; % 采樣間隔
N=120; % 采樣點數
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合
figure(1)
plot(y);
title('兩個正弦信號')
figure(2)
stem(abs(fft(y)));
title('兩信號頻譜')
%% 2.小波濾波器譜分析
h=wfilters('db30','l'); % 低通
g=wfilters('db30','h'); % 高通
h=[h,zeros(1,N-length(h))]; % 補零(圓周卷積,且增大分辨率變于觀察)
g=[g,zeros(1,N-length(g))]; % 補零(圓周卷積,且增大分辨率變于觀察)
figure(3);
stem(abs(fft(h)));
title('低通濾波器圖');
figure(4);
stem(abs(fft(g)));
title('高通濾波器圖')
%% 3.MALLET分解算法(圓周卷積的快速傅里葉變換實現)
sig1=ifft(fft(y).*fft(h)); % 低通(低頻分量)
sig2=ifft(fft(y).*fft(g)); % 高通(高頻分量)
figure(5); % 信號圖
subplot(2,1,1)
plot(real(sig1));
title('分解信號1')
subplot(2,1,2)
plot(real(sig2));
title('分解信號2')
figure(6); % 頻譜圖
subplot(2,1,1)
stem(abs(fft(sig1)));
title('分解信號1頻譜')
subplot(2,1,2)
stem(abs(fft(sig2)));
title('分解信號2頻譜')
%% 4.MALLET重構算法
sig1=dyaddown(sig1); % 2抽取
sig2=dyaddown(sig2); % 2抽取
sig1=dyadup(sig1); % 2插值
sig2=dyadup(sig2); % 2插值
sig1=sig1(1,[1:N]); % 去掉最后一個零
sig2=sig2(1,[1:N]); % 去掉最后一個零
hr=h(end:-1:1); % 重構低通
gr=g(end:-1:1); % 重構高通
hr=circshift(hr',1)'; % 位置調整圓周右移一位
gr=circshift(gr',1)'; % 位置調整圓周右移一位
sig1=ifft(fft(hr).*fft(sig1)); % 低頻
sig2=ifft(fft(gr).*fft(sig2)); % 高頻
sig=sig1+sig2; % 源信號
%% 5.比較
figure(7);
subplot(2,1,1)
plot(real(sig1));
title('重構低頻信號');
subplot(2,1,2)
plot(real(sig2));
title('重構高頻信號');
figure(8);
subplot(2,1,1)
stem(abs(fft(sig1)));
title('重構低頻信號頻譜');
subplot(2,1,2)
stem(abs(fft(sig2)));
title('重構高頻信號頻譜');
figure(9)
plot(real(sig),'r','linewidth',2);
hold on;
plot(y);
legend('重構信號','原始信號')
title('重構信號與原始信號比較') f1=50; % 頻率1
f2=100; % 頻率2
fs=2*(f1+f2); % 采樣頻率
Ts=1/fs; % 采樣間隔
N=120; % 采樣點數
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合
figure(1)
plot(y);
title('兩個正弦信號')
figure(2)
stem(abs(fft(y)));
title('兩信號頻譜')
%% 2.小波濾波器譜分析
h=wfilters('db30','l'); % 低通
g=wfilters('db30','h'); % 高通
h=[h,zeros(1,N-length(h))]; % 補零(圓周卷積,且增大分辨率變于觀察)
g=[g,zeros(1,N-l
f2=100; % 頻率2
fs=2*(f1+f2); % 采樣頻率
Ts=1/fs; % 采樣間隔
N=120; % 采樣點數
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合
figure(1)
plot(y);
title('兩個正弦信號')
figure(2)
stem(abs(fft(y)));
title('兩信號頻譜')
%% 2.小波濾波器譜分析
h=wfilters('db30','l'); % 低通
g=wfilters('db30','h'); % 高通
h=[h,zeros(1,N-length(h))]; % 補零(圓周卷積,且增大分辨率變于觀察)
g=[g,zeros(1,N-length(g))]; % 補零(圓周卷積,且增大分辨率變于觀察)
figure(3);
stem(abs(fft(h)));
title('低通濾波器圖');
figure(4);
stem(abs(fft(g)));
title('高通濾波器圖')
%% 3.MALLET分解算法(圓周卷積的快速傅里葉變換實現)
sig1=ifft(fft(y).*fft(h)); % 低通(低頻分量)
sig2=ifft(fft(y).*fft(g)); % 高通(高頻分量)
figure(5); % 信號圖
subplot(2,1,1)
plot(real(sig1));
title('分解信號1')
subplot(2,1,2)
plot(real(sig2));
title('分解信號2')
figure(6); % 頻譜圖
subplot(2,1,1)
stem(abs(fft(sig1)));
title('分解信號1頻譜')
subplot(2,1,2)
stem(abs(fft(sig2)));
title('分解信號2頻譜')
%% 4.MALLET重構算法
sig1=dyaddown(sig1); % 2抽取
sig2=dyaddown(sig2); % 2抽取
sig1=dyadup(sig1); % 2插值
sig2=dyadup(sig2); % 2插值
sig1=sig1(1,[1:N]); % 去掉最后一個零
sig2=sig2(1,[1:N]); % 去掉最后一個零
hr=h(end:-1:1); % 重構低通
gr=g(end:-1:1); % 重構高通
hr=circshift(hr',1)'; % 位置調整圓周右移一位
gr=circshift(gr',1)'; % 位置調整圓周右移一位
sig1=ifft(fft(hr).*fft(sig1)); % 低頻
sig2=ifft(fft(gr).*fft(sig2)); % 高頻
sig=sig1+sig2; % 源信號
%% 5.比較
figure(7);
subplot(2,1,1)
plot(real(sig1));
title('重構低頻信號');
subplot(2,1,2)
plot(real(sig2));
title('重構高頻信號');
figure(8);
subplot(2,1,1)
stem(abs(fft(sig1)));
title('重構低頻信號頻譜');
subplot(2,1,2)
stem(abs(fft(sig2)));
title('重構高頻信號頻譜');
figure(9)
plot(real(sig),'r','linewidth',2);
hold on;
plot(y);
legend('重構信號','原始信號')
title('重構信號與原始信號比較') f1=50; % 頻率1
f2=100; % 頻率2
fs=2*(f1+f2); % 采樣頻率
Ts=1/fs; % 采樣間隔
N=120; % 采樣點數
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合
figure(1)
plot(y);
title('兩個正弦信號')
figure(2)
stem(abs(fft(y)));
title('兩信號頻譜')
%% 2.小波濾波器譜分析
h=wfilters('db30','l'); % 低通
g=wfilters('db30','h'); % 高通
h=[h,zeros(1,N-length(h))]; % 補零(圓周卷積,且增大分辨率變于觀察)
g=[g,zeros(1,N-l
代碼片段和文件信息
clc;clear;
%%?1.正弦波定義
f1=50;?%?頻率1
f2=100;?%?頻率2
fs=2*(f1+f2);?%?采樣頻率
Ts=1/fs;?%?采樣間隔
N=120;?%?采樣點數
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts);?%?正弦波混合
figure(1)
plot(y);
title(‘兩個正弦信號‘)
figure(2)
stem(abs(fft(y)));
title(‘兩信號頻譜‘)
%%?2.小波濾波器譜分析
h=wfilters(‘db30‘‘l‘);?%?低通
g=wfilters(‘db30‘‘h‘);?%?高通
h=[hzeros(1N-length(h))];?%?補零(圓周卷積,且增大分辨率變于觀察)
g=[gzeros(1N-length(g))];?%?補零(圓周卷積,且增大分辨率變于觀察)
figure(3);
stem(abs(fft(h)));
title(‘低通濾波器圖‘);
figure(4);
stem(abs(fft(g)));
title(‘高通濾波器圖‘)
%%?3.MALLET分解算法(圓周卷積的快速傅里葉變換實現)
sig1=ifft(fft(y).*fft(h));?%?低通(低頻分量)
sig2=ifft(fft(y).*fft(g));?%?高通(高頻分量)
figure(5);?%?信號圖
subplot(211)
plot(real(sig1));
title(‘分解信號1‘)
subplot(212)
plot(real(sig2));
title(‘分解信號2‘)
figure(6);?%?頻譜圖
subplot(211)
stem(abs(fft(sig1)));
title(‘分解信號1頻譜‘)
評論
共有 條評論