大家好,我正在学习数字滤波器和频谱分析课程。我们得到了一份课程作业/家庭作业,我完全不知道该怎么处理它。我来自数学背景,以前从未做过任何信号处理,而且由于我是大学新手,我真的没有人可以问。
问题:
在本练习中,您需要使用频谱分析技术来确定在短音频样本(采样频率为 44.1KHz)中播放的音符。该样本将包含 5 个和弦的短序列,每个和弦包含 3 或 4 个同时演奏的不同音符。每个音符包括一个基频加上一系列基频倍数的谐波。本练习中的所有音符都属于 12 音符等律音阶。
这是我到目前为止打乱的一些代码:
[x,fs] = audioread('sample1_va18535.wav');
fs % fs is the sampling frequency usually 44.1 KHz
wavplay; % Play audio
N = 4410; % 0.1 seconds at 44.1KHz
N1 = 2205; % 0.05 seconds
n = N1+1:N1+N; % 0.05 – 0.15 seconds
xn = x(n,1); % Select left channel of short clip
wavplay; % Play short clip
t = n/fs; % Time index
plot(t,xn);
xlabel('Time (s)');
ylabel('Amplitude');
window = hamming(N); % Create window
wxn = xn .* window; % Apply window
Xk = fft(wxn); % DFT
k = 0:N-1;
f=k*fs/N; % Frequency in Hz
pause;
plot(f,abs(Xk));
ylabel('Magnitude');
xlabel('Frequency (Hz)');
现在我很确定这还远远没有结束(我什至不确定这段代码是否正确)。有人会这么好心并向我解释如何生成这些频率吗?我知道我需要创建一个基频矢量并忽略任何谐波。

