matlab 维纳滤波波形图
时间: 2023-07-13 08:27:07 浏览: 97
以下是使用MATLAB进行维纳滤波后的波形图示例代码:
```matlab
% 定义信号
Fs = 1000; % 采样率
t = 0:1/Fs:1-1/Fs; % 时间向量
f1 = 10; % 信号频率
f2 = 50; % 噪声频率
x = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 合成信号
% 添加噪声
n = 0.5*randn(size(x)); % 高斯噪声
xn = x + n;
% 维纳滤波
y = wiener2(xn,[3 3]); % 3x3的滤波器大小
% 绘制波形图
figure;
subplot(3,1,1);
plot(t, x);
title('原始信号');
xlabel('时间 (秒)');
subplot(3,1,2);
plot(t, xn);
title('添加噪声后的信号');
xlabel('时间 (秒)');
subplot(3,1,3);
plot(t, y);
title('维纳滤波后的信号');
xlabel('时间 (秒)');
```
运行以上代码后,会显示一个包含三个子图的窗口,分别是原始信号、添加噪声后的信号和维纳滤波后的信号的波形图。其中,维纳滤波后的信号波形图应该比添加噪声后的信号波形图更接近于原始信号。
相关问题
matlab 维纳滤波
以下是使用MATLAB进行维纳滤波的示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 添加高斯白噪声
noisy_img = imnoise(img, 'gaussian', 0, 0.01);
% 显示原始图像和加噪声后的图像
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(noisy_img);
title('Noisy Image');
% 计算噪声方差
noise_var = var(double(noisy_img(:)));
% 维纳滤波
wnr_img = deconvwnr(noisy_img, fspecial('gaussian', 5, 2), noise_var);
% 显示维纳滤波后的图像
figure;
imshow(wnr_img);
title('Wiener Filtered Image');
```
这段代码首先读取一张图像,然后添加高斯白噪声。接着计算噪声方差,并使用`deconvwnr`函数进行维纳滤波。最后显示维纳滤波后的图像。
matlab利用维纳滤波实现图像的复原代码
以下是 MATLAB 代码实现图像的维纳滤波复原:
```matlab
%% 读入图像并加噪声
I = imread('lena.png');
J = imnoise(I,'gaussian',0,0.01);
%% 维纳滤波复原
% 计算点扩散函数(PSF)
PSF = fspecial('motion',21,11);
% 用PSF对图像进行模糊
K = imfilter(J,PSF,'conv','circular');
% 计算噪声功率
noise_var = var(J(:));
% 计算图像的功率谱密度
[Ju,~] = imhist(J);
Ju = Ju/numel(J);
Ju = Ju(Ju>0);
Ju = Ju(:);
Fu = fft(Ju);
% 计算维纳滤波器的传递函数
H = conj(fft2(PSF,size(J,1),size(J,2)))./...
(abs(fft2(PSF,size(J,1),size(J,2))).^2 + noise_var./max(Ju));
% 对模糊图像进行维纳滤波
F = fft2(K);
F_hat = H.*F;
f_hat = real(ifft2(F_hat));
% 显示结果
subplot(1,3,1),imshow(I),title('原始图像');
subplot(1,3,2),imshow(J),title('加噪图像');
subplot(1,3,3),imshow(f_hat),title('维纳滤波复原');
```
其中,`I` 是原始图像,`J` 是加噪图像,`PSF` 是点扩散函数,`K` 是模糊图像,`noise_var` 是噪声功率,`Ju` 是加噪图像的功率谱密度,`Fu` 是加噪图像的傅里叶谱,`H` 是维纳滤波器的传递函数,`F` 是模糊图像的傅里叶谱,`F_hat` 是维纳滤波后的傅里叶谱,`f_hat` 是维纳滤波复原后的图像。
阅读全文