这两天终于考完试了,但是还又课设要弄,在这里开个博客记录我的过程,这也是我第一次写博客,顺便纪念一下,2019.1.9
题目1
录音,一段绕口令
要求一
添加一个信噪比位4dB的均匀白噪声
要求二
设计相应的维纳滤波器,对要求一产生的加噪声信号进行处理
要求三
语音信号平均信号功率要比另一个题目的语音信号平均功率高10倍
1,将音频文件转化为.wav格式,导入matlab,
这里用到另一个大佬的方法,不再陈述
https://blog.csdn.net/liusandian/article/details/51921171
加入维纳滤波器降噪的代码(有待测试)
clc ; clear ; close all;
T = 10; % 取10s信号进行分析
f0 = 50; % 市电干扰频率
fs = 4*f0; % 采样频率
% generate observed signal
for k = 1:1:T*fs
if mod(floor(k/(T*fs/8)),2) == 0
d(k) = 10;
else
d(k) = -10;
end
end
d = d + normrnd(0,1,1,T*fs); % add noise
figure; plot(d); title('无干扰电力线信号'); grid on; axis([1 T*fs -20 20])
% add interference
n = 1:1:T*fs;
d = d + 50*cos(2*pi*f0*n/fs + pi/6); % pi/6 --- phase of interference
figure; plot(d); title('带市电干扰电力线信号');grid on; axis([1 T*fs -70 70])
% generate reference signal order = 1 / coeff number = 2
x_in1 = cos(2*pi*f0*n/fs);
x_in2 = cos(2*pi*f0*(n-1)/fs);
x = [x_in1;x_in2];
% wiener filter
R_xx = x*x'/(T*fs); % E(xx')
R_dx = d*x'/(T*fs); % E(dx')
w = R_xx\(R_dx.');
y = d - w'*x;
figure; plot(y); title('维纳滤波后电力线信号');grid on; axis([1 T*fs -20 20])
维纳滤波器代码如下
[JYJ,fs]=audioread('文件的目录.wav');%声音读取
%sound(JYJ,fs); %声音回放
JYJ=JYJ(1:1030128);
n1=length(JYJ);
JYJ1=fft(JYJ,n1); %快速傅里叶变换
figure(1)
subplot(2,1,1) %绘出时域波
plot(JYJ)
xlabel('时间')
ylabel('幅度')
title('初始信号波形')
grid on
subplot(2,1,2)