窗函数设计法的时域波形图怎么来的?
时间: 2023-06-17 22:04:03 浏览: 96
窗函数设计法是一种数字信号处理中常用的滤波器设计方法。在这种方法中,我们首先选择一个滤波器的理想响应,然后将其与一个窗函数相乘来得到实际的滤波器系数。常用的窗函数包括矩形窗、汉宁窗、汉明窗等。
时域波形图是指滤波器在时域上的输出波形。在窗函数设计法中,我们可以通过将理想响应与窗函数卷积来得到滤波器的时域系数,然后将其输入到差分方程中模拟滤波器的输出波形。最终得到的波形图即为滤波器的时域波形图。
需要注意的是,窗函数设计法的时域波形图只能给出滤波器的大致形态,而无法精确描述滤波器的性能。如果需要评估滤波器的性能,还需要进行频域分析或者使用其他方法。
相关问题
:窗函数设计法及滤波器设计 (1)读入语音信号。调整采样频率,实现语音信号的快放、慢放。 (2)熟悉各种窗函数,设计FIR低通滤波器。 (3)分析该语音信号的频谱,并画出时域波形图和频谱图。 (4)用MATLAB语言编程实现以上内容。
以下是利用窗函数法设计FIR低通滤波器的MATLAB代码实现:
```matlab
%% 读入语音信号
[y,fs] = audioread('speech.wav');
y = y(:,1); % 取左声道
t = (0:length(y)-1)/fs; % 时间序列
sound(y,fs); % 播放源语音
%% 实现语音信号的快放和慢放
y_fast = resample(y,2,1); % 快放两倍
y_slow = resample(y,1,2); % 慢放一半
sound(y_fast,fs); % 播放快放语音
sound(y_slow,fs); % 播放慢放语音
%% 窗函数法设计FIR低通滤波器
fc = 1000; % 通带截止频率
fs_new = 2*fc; % 新的采样频率
L = 101; % 滤波器长度
n = 0:L-1; % 时域序列
h = 2*fc/fs_new * sinc(2*fc/fs_new*(n - (L-1)/2)); % 理想低通滤波器
w = hamming(L)'; % 窗函数
h = h .* w; % 加窗
y_filtered = conv(y,h); % 进行滤波
y_filtered = y_filtered(L:end-L+1); % 截取滤波后的语音
%% 分析该语音信号的频谱
Y = fft(y);
Y_filtered = fft(y_filtered);
f = (0:length(Y)-1)*fs/length(Y); % 频率序列
f_new = (0:length(Y_filtered)-1)*fs_new/length(Y_filtered);
figure;
subplot(2,1,1);
plot(t,y);
xlabel('时间/s');
ylabel('幅值');
title('源语音波形图');
subplot(2,1,2);
plot(f,abs(Y));
xlim([0,fs/2]);
xlabel('频率/Hz');
ylabel('幅值');
title('源语音频谱图');
figure;
subplot(2,1,1);
plot(t,y_filtered);
xlabel('时间/s');
ylabel('幅值');
title('滤波后语音波形图');
subplot(2,1,2);
plot(f_new,abs(Y_filtered));
xlim([0,fs_new/2]);
xlabel('频率/Hz');
ylabel('幅值');
title('滤波后语音频谱图');
```
以上代码中,我读入了一个名为“speech.wav”的语音文件,并展示了源语音的时域波形图和频谱图。接着,我在窗函数法的基础上设计了一个FIR低通滤波器,并将其应用到源语音上,得到了滤波后的语音信号。最后,我画出了滤波后语音的时域波形图和频谱图。
1. 基本题目:窗函数设计法及滤波器设计 (1)读入语音信号。调整采样频率,实现语音信号的快放、慢放。 (2)熟悉各种窗函数,设计FIR低通滤波器。 (3)分析该语音信号的频谱,并画出时域波形图和频谱图。 (4)用MATLAB语言编程实现以上内容。
好的,我将分步骤回答这个问题。
1. 读入语音信号并调整采样频率
可以使用MATLAB中的`audioread`函数读入语音信号,使用`resample`函数调整采样频率。例如,读入采样频率为8000Hz的语音信号,将采样频率调整为16000Hz,实现语音信号的快放:
```matlab
[x, fs] = audioread('speech.wav'); % 读入语音信号
new_fs = 16000; % 新采样频率
y = resample(x, new_fs, fs); % 调整采样频率
sound(y, new_fs); % 播放加速后的语音信号
```
将采样频率调整为4000Hz,实现语音信号的慢放:
```matlab
[x, fs] = audioread('speech.wav'); % 读入语音信号
new_fs = 4000; % 新采样频率
y = resample(x, new_fs, fs); % 调整采样频率
sound(y, new_fs); % 播放减速后的语音信号
```
2. 窗函数设计法及滤波器设计
常用的窗函数有矩形窗、汉明窗、汉宁窗、布莱克曼窗等。可以使用MATLAB中的`fir1`函数设计FIR低通滤波器,其中`window`参数可以指定所使用的窗函数。
例如,设计一个截止频率为2000Hz的FIR低通滤波器,采用汉明窗:
```matlab
% FIR低通滤波器设计
fs = 16000; % 采样频率
fc = 2000; % 截止频率
N = 101; % 滤波器阶数
b = fir1(N-1, fc/(fs/2), 'low', hamming(N)); % 汉明窗
```
3. 分析语音信号的频谱,并画出时域波形图和频谱图
可以使用MATLAB中的`fft`函数计算语音信号的频谱,使用`plot`函数画出时域波形图和频谱图。
例如,分析一个采样频率为16000Hz的语音信号的频谱:
```matlab
[x, fs] = audioread('speech.wav'); % 读入语音信号
t = (0:length(x)-1)/fs; % 时间序列
subplot(2,1,1);
plot(t, x); % 画出时域波形图
xlabel('Time (s)');
ylabel('Amplitude');
title('Speech Signal');
N = length(x); % 信号长度
X = fft(x)/N; % 计算频谱
f = (0:N-1)*(fs/N); % 频率序列
subplot(2,1,2);
plot(f, 20*log10(abs(X))); % 画出频谱图
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Speech Signal Spectrum');
```
4. 完整代码
以上步骤整合后的MATLAB代码如下:
```matlab
% 读入语音信号并调整采样频率
[x, fs] = audioread('speech.wav'); % 读入语音信号
new_fs = 16000; % 新采样频率
y1 = resample(x, new_fs, fs); % 调整采样频率,实现语音信号的快放
new_fs = 4000; % 新采样频率
y2 = resample(x, new_fs, fs); % 调整采样频率,实现语音信号的慢放
% FIR低通滤波器设计
fs = 16000; % 采样频率
fc = 2000; % 截止频率
N = 101; % 滤波器阶数
b = fir1(N-1, fc/(fs/2), 'low', hamming(N)); % 汉明窗
% 分析语音信号的频谱,并画出时域波形图和频谱图
t = (0:length(x)-1)/fs; % 时间序列
subplot(3,1,1);
plot(t, x); % 画出原始语音信号的时域波形图
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Speech Signal');
t = (0:length(y1)-1)/new_fs; % 时间序列
subplot(3,1,2);
plot(t, y1); % 画出加速后的语音信号的时域波形图
xlabel('Time (s)');
ylabel('Amplitude');
title('Accelerated Speech Signal');
t = (0:length(y2)-1)/new_fs; % 时间序列
subplot(3,1,3);
plot(t, y2); % 画出减速后的语音信号的时域波形图
xlabel('Time (s)');
ylabel('Amplitude');
title('Decelerated Speech Signal');
N = length(x); % 信号长度
X = fft(x)/N; % 计算原始语音信号的频谱
f = (0:N-1)*(fs/N); % 频率序列
figure; % 新建一个图形窗口
subplot(3,1,1);
plot(f, 20*log10(abs(X))); % 画出原始语音信号的频谱图
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Original Speech Signal Spectrum');
Y1 = fft(y1)/N; % 计算加速后的语音信号的频谱
f = (0:N-1)*(new_fs/N); % 频率序列
subplot(3,1,2);
plot(f, 20*log10(abs(Y1))); % 画出加速后的语音信号的频谱图
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Accelerated Speech Signal Spectrum');
Y2 = fft(y2)/N; % 计算减速后的语音信号的频谱
f = (0:N-1)*(new_fs/N); % 频率序列
subplot(3,1,3);
plot(f, 20*log10(abs(Y2))); % 画出减速后的语音信号的频谱图
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Decelerated Speech Signal Spectrum');
```
输出结果为:时域波形图和频谱图。
阅读全文
相关推荐
















