谢邀。
你问的是“如果 Matlab 中用代码得到了一段一维信号的频谱,如何把这段频谱转化成可以听的声音”吗?
假设你频谱的幅度和相位响应是齐的,以下 Matlab 代码只考虑你的频谱是 Matlab 代码里面生成的情况,不考虑外来格式。
注意,简单起见没有给信号加合适的包络,所以声音起止时会听到“卡嗒”声。
disp('Hi.'); Fs = 44100; % 采样率(赫兹) Nyquist = Fs/2; Ts = 1/Fs; % 采样周期(秒) % 输入信号为两段1秒长的正弦波相加 f0 = 440; f1 = 880; amp = 0.5; durSec = 1; vt = 0:Ts:durSec; sndIn = amp*(sin(2*pi*f0*vt) + sin(2*pi*f1*vt)); disp('Listen to the input sound ...'); sound(sndIn, Fs); % 发声 % 快速傅立叶变换得到频谱 spectrum = fft(sndIn); % 逆变换得到输出信号 sndOut = ifft(spectrum); disp('Listen to the output sound ...'); sound(sndOut, Fs); % 发声 % 作图绘制输入输出信号和频谱幅度响应。 subplot(3, 1, 1); plot(vt, sndIn); title('Input Time-domain Signal'); subplot(3, 1, 2); N = floor(Nyquist); vf = 0:N; vm = abs(spectrum(vf+1)); stem(vf, vm/max(vm)); title('Spectrum: Normalized Magnitude Response'); subplot(3, 1, 3); plot(vt, sndOut); title('Output Time-domain Signal'); disp('Bye.');