完成malefile模板

TARGET  := test_file.out

CFLAGS   := -g -Wall
CC             := gcc

SOURCE   := $(wildcard *.c)
OBJ            := $(patsubst %.c, %.o, $(SOURCE))

$(TARGET):$(OBJ)
$(CC) $(CFLAGS) $^ -o $@

%*.o     : %*.c
$(CC) $(CFLAG) -c $^ -o $@

clean:
rm -rf *.o *.out
%% 1. 读取音频文件(确保文件在工作目录,双声道转单声道) maleFile = 'male.wav'; % 男声音频 femaleFile = 'female.wav';% 女声音频 musicFile = 'music.wav'; % 音乐音频 [y_male, Fs] = audioread(maleFile); % 读取信号及采样率 [y_female, ~] = audioread(femaleFile); [y_music, ~] = audioread(musicFile); % 处理双声道(取单声道) if size(y_male,2)==2 y_male = y_male(:,1); y_female = y_female(:,1); y_music = y_music(:,1); end %% 2. 输出时域波形(以男声音频为例) t_male = (0:length(y_male)-1)/Fs; % 时间轴 figure('Name','时域波形'); subplot(3,1,1); plot(t_male, y_male); title('原始男性语音时域波形'); xlabel('时间 (s)'); grid on; %% 3. 调节声音大小(增益) gain = 0.5; % 音量缩放系数(0.5 为缩小,>1 为放大) y_male_gain = y_male * gain; subplot(3,1,2); plot(t_male, y_male_gain); title('音量调节后时域波形'); xlabel('时间 (s)'); grid on; %% 4. 两种信号混音(男女语音,需截断对齐长度) len = min(length(y_male), length(y_female)); % 取较短长度 y_mix = (y_male(1:len) + y_female(1:len)) / 2; % 混音并归一化(避免溢出) t_mix = (0:len-1)/Fs; subplot(3,1,3); plot(t_mix, y_mix); title('男女语音混音时域波形'); xlabel('时间 (s)'); grid on; %% 5. 音乐信号回音效果(延迟叠加) delay_sec = 0.5; % 延迟 0.5 秒 delay = round(delay_sec * Fs); % 延迟样本数 y_music_echo = y_music; % 初始化回音信号 if delay < length(y_music) % 避免索引越界 y_music_echo(delay+1:end) = y_music_echo(delay+1:end) + 0.5*y_music(1:end-delay); end t_music = (0:length(y_music)-1)/Fs; figure('Name','回音效果'); subplot(2,1,1); plot(t_music, y_music); title('原始音乐时域波形'); grid on; subplot(2,1,2); plot(t_music, y_music_echo); title('回音处理后时域波形'); grid on; %% 6. 频谱与音谱观察(8000、16000 点分析,以男声音频为例) N_list = [8000, 16000]; % 分析点数 figure('Name','频谱分析'); for i = 1:2 N = N_list(i); y_n = y_male(1:N); % 取前 N 点 Y = fft(y_n); % 傅里叶变换 f = (0:N-1)*Fs/N; % 频率轴 mag = abs(Y)/N; % 幅度谱(归一化) phase = angle(Y); % 相位谱 subplot(2,2,i); plot(f, mag); title(['N=',num2str(N),' 幅度谱']); xlabel('频率 (Hz)'); grid on; subplot(2,2,i+2); plot(f, phase); title(['N=',num2str(N),' 相位谱']); xlabel('频率 (Hz)'); grid on; end %% 7. 减抽样(混叠与非混叠,以音乐信号为例) % 假设信号最高频率 f_max=5000Hz(实际可通过频谱分析确定) f_max = 5000; M_non_alias = 4; % 非混叠:Fs/M=44100/4=11025 ≥ 2*5000=10000 M_alias = 8; % 混叠:Fs/M=44100/8=5512.5 < 10000 % 非混叠减抽样 y_down_non = y_music(1:M_non_alias:end); Fs_non = Fs/M_non_alias; t_down_non = (0:length(y_down_non)-1)/Fs_non; Y_down_non = fft(y_down_non); f_down_non = (0:length(Y_down_non)-1)*Fs_non/length(Y_down_non); mag_down_non = abs(Y_down_non)/length(Y_down_non); % 混叠减抽样 y_down_alias = y_music(1:M_alias:end); Fs_alias = Fs/M_alias; t_down_alias = (0:length(y_down_alias)-1)/Fs_alias; Y_down_alias = fft(y_down_alias); f_down_alias = (0:length(Y_down_alias)-1)*Fs_alias/length(Y_down_alias); mag_down_alias = abs(Y_down_alias)/length(Y_down_alias); figure('Name','减抽样分析'); subplot(2,2,1); plot(t_down_non, y_down_non); title('非混叠减抽样(M=4)时域'); grid on; subplot(2,2,2); plot(f_down_non, mag_down_non); title('非混叠减抽样幅度谱'); grid on; subplot(2,2,3); plot(t_down_alias, y_down_alias); title('混叠减抽样(M=8)时域'); grid on; subplot(2,2,4); plot(f_down_alias, mag_down_alias); title('混叠减抽样幅度谱'); grid on; %% 8. IIR 低通滤波器设计(buttord + butter,以男声音频为例) Wp = 1000; % 通带截止 1000Hz Wsb = 1200; % 阻带截止 1200Hz Rp = 1; % 通带波纹 1dB Rs = 40; % 阻带衰减 40dB % 归一化频率(数字频率,范围 [0,1]) Wp_norm = 2*Wp/Fs; Wsb_norm = 2*Wsb/Fs; % 设计滤波器阶数和截止频率 [n, Wn] = buttord(Wp_norm, Wsb_norm, Rp, Rs); [b, a] = butter(n, Wn); % Butterworth 滤波器 % 零相位滤波(避免相位延迟) y_filtered = filtfilt(b, a, y_male); % 分析滤波后信号 Y_filtered = fft(y_filtered, 8000); % 8000 点 FFT f_filtered = (0:7999)*Fs/8000; mag_filtered = abs(Y_filtered)/8000; phase_filtered = angle(Y_filtered); figure('Name','IIR 滤波分析'); subplot(2,2,1); plot(t_male, y_filtered); title('滤波后时域波形'); xlabel('时间 (s)'); grid on; subplot(2,2,2); plot(f_filtered, mag_filtered); title('滤波后幅度谱'); xlabel('频率 (Hz)'); grid on; subplot(2,2,3); plot(f_filtered, phase_filtered); title('滤波后相位谱'); xlabel('频率 (Hz)'); grid on; 对代码进行检查修改
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值