专栏
标签
分享7:案例-倾听你的声音
技术分享
发布于 2025-01-15 10:11:00
查看 52过去530天

作为《信号分析与处理》课程的一个小练习,要求同学们录制一段自己的声音,利用MWORKS对声音文件读取,编写时域、频谱分析代码,展示语音信号的时域波形及频谱图,并对这段声音进行处理,包括实现变声、变调、倍速等。
附件:声音原文件、变声后的文件

using WAV
using FFTW
using Plots
# 读取音频文件
audio_data, fs = wavread("录音.wav")  # 替换为你的音频文件路径
# 假设音频是单声道
if size(audio_data, 2) > 1
    y0 = audio_data[:, 1]  # 提取第一个声道的数据
else
    y0 = audio_data
end
N = length(y0)
n = 0:N-1  # StepRangeLen 类型
f = (n / N .- 0.5) .* fs
# 绘制原始时域图
p1 = Plots.plot(y0, xlabel="t", ylabel="幅值", title="原始信号", label="")
display(p1)
# 进行 FFT 变换并绘制原始频域图
Y0 = fft(y0)
Y0 = fftshift(Y0)
p2 = Plots.plot(f, abs.(Y0), xlabel="f / Hz", ylabel="幅值", title="原始信号", xlims=(0, 2000), label="")
display(p2)

image.png
image.png

变声处理代码

sing WAV
using FFTW
using Plots
# 读取音频文件
audio_data, fs = wavread("录音.wav")  # 替换为你的音频文件路径
# 假设音频是单声道
if size(audio_data, 2) > 1
    y0 = audio_data[:, 1]  # 提取第一个声道的数据
else
    y0 = audio_data
end
N = length(y0)
n = 0:N-1  # StepRangeLen 类型
f = (n / N .- 0.5) .* fs
# 选择一个搬移量(例如,搬移10Hz)
frequency_shift = 10
# 将 n 转换为浮点数数组
n_float = float.(n)
# 创建一个复指数调制信号
modulating_signal = exp.(-2π * 1im * frequency_shift * n_float / fs)
# 将原始信号与调制信号相乘,实现频谱搬移
y_shifted = y0 .* real(modulating_signal)
# 绘制搬移后的时域图
p3 = Plots.plot(y_shifted, xlabel="t", ylabel="amplitude", title="Shifted Signal (Time Domain)", label="")
display(p3)
# 对搬移后的信号进行 FFT,以查看频谱搬移的效果
Y_shifted = fft(y_shifted)
Y_shifted = fftshift(Y_shifted)
# 绘制搬移后的频域图
f_shifted = (n_float / N .- 0.5) .* fs
p4 = Plots.plot(f_shifted, abs.(Y_shifted), xlabel="f / Hz", ylabel="amplitude", title="Shifted Signal (Frequency Domain)", xlims=(0, 2000), label="")
display(p4)
# 检查搬移后的信号幅度
max_amplitude = maximum(abs.(y_shifted))
println("Maximum amplitude of shifted signal: ", max_amplitude)
# 检查是否有直流偏移(均值不为0)
mean_shifted = mean(y_shifted)
println("Mean of shifted signal: ", mean_shifted)
# 保存变声后的信号为 WAV 文件
wavwrite(y_shifted, "shifted_audio.wav", Fs=fs)
# 检查文件是否保存成功
if isfile("shifted_audio.wav")
    println("Audio file saved successfully.")
else
    println("Error saving audio file.")
end

原声音
image.png
处理后声音
image.png
原声音频谱图
image.png
处理后声音频谱
image.png

所属专栏:Julia语言
产品信息:Syslab科学计算环境
通信科学计算
附件 2 个附件(2284kb)

全部回答 1

发布于 2025-01-17 17:44:45

您给的代码运行后出现下面的问题,请求指教
1c1cbff4-a82e-4be8-9240-bd92f4c2ca6f.png

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天