背景噪声的研究
1. 声音如何产生? 声音是由物体振动产生声波,通过介质(空气或固体、液体)传播,并能被人的听觉器官所感知的波动现象。 最初发出振动的物体叫声源。声音以波的形式振动传播,所以声音是一种波。 2.信号处理的意义? 声音的本质是压力脉动,所以无论是仿真还是实验,直接测量得到的都只是每个时刻的压力值。尽管我们也可以通过时域上的压力 信号的大小定性的判断压力脉动的强弱,但是压力的时间信号太过杂乱无章,我们通常需要把时域的信号转换为频域,以便更清晰的辨识信号的特征。 3. 时域与频域? 时域:描述信号随时间变化的坐标系。 频域:描述信号在频率特性时用到的一种坐标系,其横坐标就是频率。 对于特定几何尺度的物体,气流在一秒钟扫过它的次数就是频率,所以速度越快,意味着产生的信号频率越高;而频率与几何尺度则往往成反比的关系,即尺寸越小,产生的频率越高。相对于时域,频域的信号更容易和几何结构以及流场建立相互对应的关系。 4.如何转换? 傅里叶原理:任何连续测量的时域信号,都可以表示为不同频率的正弦波信号的无限叠加。傅里叶变换,则是把这些正弦波信号复原并换算到频域空间的积分变换方法。
对于离散时间序号信号
x
(
j
)
,
j
=
1
,
2
,
3
,
…
,
N
x(j),j=1, 2, 3, \dots, N
x(j),j=1,2,3,…,N,其傅里叶变换及其逆变换可以表示为:
Y
(
K
)
=
∑
j
=
1
N
x
(
j
)
W
N
(
j
?
1
)
(
k
?
1
)
Y(K) = \sum_{j=1}^{N}x(j)W_N^{(j-1)(k-1)}
Y(K)=j=1∑N?x(j)WN(j?1)(k?1)?
x
(
j
)
=
1
n
∑
k
=
1
N
Y
(
k
)
W
N
?
(
j
?
1
)
(
k
?
1
)
x(j) = \frac{1}{n}\sum_{k=1}^NY(k)W_N^{-(j-1)(k-1)}
x(j)=n1?k=1∑N?Y(k)WN?(j?1)(k?1)? 其中,
W
N
=
e
(
?
2
π
i
)
/
N
W_N=e^{(-2\pi i)/N}
WN?=e(?2πi)/N。 离散傅里叶变换也是从时域到频域的转换,只不过它是把一组复数
x
(
j
)
x(j)
x(j),转换成了另一组复数
Y
(
K
)
Y(K)
Y(K),就可以愉快的实现对离散数据的变换。 离散傅里叶变换好是好,只不过如果采样的数据量大了,计算量也会急剧增加。1965年,Cooley和Tukey提出了离散傅里叶变换(DFT)的快速算法,即快速傅里叶变换。 5.频谱 我们知道频谱的横坐标是频率,纵坐标表示该频率下的振幅,对于声音信号来说也就是压力脉动的强弱。 6. 在matlab中实现傅里叶变换
Ts = 1/50;
t = 0:Ts:10-Ts;
x = sin(2*pi*15*t) + sin(2*pi*20*t);
plot(t,x)% 横坐标为时间,纵坐标为值
xlabel('Time(seconds)')
ylabel('Amplitude')
y = fft(x);
fs = 1/Ts;
f = (0:length(y)-1)*fs/length(y);%设置傅里叶变换y为纵轴,f为横轴
plot(f,abs(y))%最后生成频域图
xlabel('Frequency(Hz)')
ylabel('Magnitude')
title('Magnitude')
%fftshift 函数对变换执行以零为中心的循环平移
n = length(x);
fshift = (-n/2:n/2-1)*(fs/n);
yshift = fftshift(y);
plot(fshift,abs(yshift))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
rng('default')
xnoise = x + 2.5*randn(size(t));%在x中混入高斯噪声
%绘画含噪声的图像
ynoise = fft(xnoise);
ynoiseshift = fftshift(ynoise);
power = abs(ynoiseshift).^2/n;
plot(fshift,power)
title('Power')
xlabel('Frequency (Hz)')
ylabel('Power')
%计算快速傅里叶
whaleFile = 'bluewhale.au';
[x,fs] = audioread(whaleFile);
whaleMoan = x(2.45e4:3.10e4);
t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);
plot(t,whaleMoan)
xlabel('Time (seconds)')
ylabel('Amplitude')
xlim([0 t(end)])
m = length(whaleMoan);
n = pow2(nextpow2(m));
y = fft(whaleMoan,n);
f = (0:n-1)*(fs/n)/10; % frequency vector
power = abs(y).^2/n; % power spectrum
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency (Hz)')
ylabel('Power')
|